{"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-e8067a8df712fb95", "name": "Possibly dead Python function: run_single_query", "shortDescription": {"text": "Possibly dead Python function: run_single_query"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d1d7e070d662788", "name": "Possibly dead Python function: do_GET", "shortDescription": {"text": "Possibly dead Python function: do_GET"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-986798d8be1e94d0", "name": "Possibly dead Python function: do_POST", "shortDescription": {"text": "Possibly dead Python function: do_POST"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa4344d6f82f9192", "name": "Possibly dead Python function: log_message", "shortDescription": {"text": "Possibly dead Python function: log_message"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-74e0b29b98dab8be", "name": "Stray `console.log` in TS/JS \u2014 scripts/update-platform-ai-defaults.ts:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-platform-ai-defaults.ts:55"}, "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-02abf6ddb5b5db26", "name": "Stray `console.log` in TS/JS \u2014 scripts/generate-openapi.ts:346", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-openapi.ts:346"}, "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-8cc539c6d64c879f", "name": "Stray `console.log` in TS/JS \u2014 scripts/tools/httpbin/list-tenants.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/tools/httpbin/list-tenants.ts:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e6fb307be9276f63", "name": "Stray `console.log` in TS/JS \u2014 scripts/tools/httpbin/import.ts:774", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/tools/httpbin/import.ts:774"}, "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-e28d3670ddee18af", "name": "Stray `console.log` in TS/JS \u2014 prisma/seed.ts:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed.ts:92"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2ec7e52fde92cc29", "name": "Stray `console.log` in TS/JS \u2014 tools/bugsnap/src/inject.js:7", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 tools/bugsnap/src/inject.js:7"}, "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-85ecb9ac4c88f84d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/list-row.tsx:73", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/list-row.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-2653f0b9a5c78dc3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/layouts/GlobalSearch.tsx:216", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layouts/GlobalSearch.tsx:216"}, "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-9a6a981bb89e3017", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/integrations/IntegrationList.tsx:421", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/integrations/IntegrationList.tsx:421"}, "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-0f4c40b1b8d71a8b", "name": "TODO/FIXME marker in shipping code \u2014 src/components/features/integrations/IntegrationHeader.tsx:89", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/features/integrations/IntegrationHeader.tsx:89"}, "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-1355ba35e747694b", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/integrations/TagFilter.tsx:66", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/integrations/TagFilter.tsx:66"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ee91f45aeaa086e9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/integrations/IntegrationDocumentationTab.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/integrations/IntegrationDocumentationTab.tsx:280"}, "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-bedf3a64fa306518", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/integrations/IntegrationCard.tsx:80", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/integrations/IntegrationCard.tsx:80"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-be5a3b096219b9f9", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/integrations/wizard/StepScraping.tsx:73", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/integrations/wizard/StepScraping.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-bfda48a35ff72f73", "name": "Stray `console.log` in TS/JS \u2014 src/components/features/integrations/wizard/StepConfigureAuth.tsx:564", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/components/features/integrations/wizard/StepConfigureAuth.tsx:564"}, "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-82c8ccb322bdebb0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/integrations/wizard/StepReviewActions.tsx:6", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/integrations/wizard/StepReviewActions.tsx:63"}, "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-1a2814654768875f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/composite-tools/CompositeToolDetail.tsx:507", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/composite-tools/CompositeToolDetail.tsx:507"}, "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-6eff5f896af3da7e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/composite-tools/CompositeToolList.tsx:490", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/composite-tools/CompositeToolList.tsx:490"}, "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-6678fb8dbeef35f4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/composite-tools/wizard/StepSelectOperations", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/composite-tools/wizard/StepSelectOperations.tsx:271"}, "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-6093bad1fd6644db", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/composite-tools/wizard/StepReview.tsx:167", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/composite-tools/wizard/StepReview.tsx:167"}, "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-701eaf9c71bbcfb2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/auto-maintenance/SchemaDiffViewer.tsx:225", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/auto-maintenance/SchemaDiffViewer.tsx:225"}, "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-954053ba75445cd4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/schema-drift/DriftReportsList.tsx:349", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/schema-drift/DriftReportsList.tsx:349"}, "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-42ff639900aa1929", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/dashboard/RecentActivity.tsx:118", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/dashboard/RecentActivity.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-530be4d3aea1c18f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/pipelines/sections/StepToolSelector.tsx:180", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/pipelines/sections/StepToolSelector.tsx:180"}, "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-8038acd8265d28a2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/pipelines/sections/StepCard.tsx:181", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/pipelines/sections/StepCard.tsx:181"}, "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-e62005513decc47d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/actions/RequestResponseViewer.tsx:62", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/actions/RequestResponseViewer.tsx:62"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-94d55fab14921897", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/actions/AddActionWizard.tsx:501", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/actions/AddActionWizard.tsx:501"}, "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-95beb4de0d8efe75", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/actions/TestHistory.tsx:122", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/actions/TestHistory.tsx:122"}, "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-40e30b843dd351f6", "name": "TODO/FIXME marker in shipping code \u2014 src/components/features/actions/BulkActionBar.tsx:15", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/features/actions/BulkActionBar.tsx:15"}, "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-039fa76fb9cc92c7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/actions/editor/VariableAutocomplete.tsx:233", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/actions/editor/VariableAutocomplete.tsx:233"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-760b99a33d9506ee", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/agentic-tools/wizard/StepToolAllocation.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/agentic-tools/wizard/StepToolAllocation.tsx:369"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd6636148391133c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/jobs/JobDetail.tsx:355", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/jobs/JobDetail.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-6dcb699a316e29c7", "name": "TODO/FIXME marker in shipping code \u2014 src/components/features/connections/ConnectionDetail.tsx:65", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/features/connections/ConnectionDetail.tsx:65"}, "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-ce748494a6bec2ad", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/connections/ConnectionCard.tsx:124", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/connections/ConnectionCard.tsx:124"}, "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-82b6a6bf219c25e1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/connections/ConnectionList.tsx:326", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/connections/ConnectionList.tsx:326"}, "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-fdefc18cd94e3739", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/connections/mappings/ConnectionMappingCard.", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/connections/mappings/ConnectionMappingCard.tsx:52"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-23a16ea8fe5123ab", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/installs/InstallList.tsx:67", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/installs/InstallList.tsx:67"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7c14aa147a7a06f0", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/installs/InstallFormDialog.tsx:535", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/installs/InstallFormDialog.tsx:535"}, "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-a9117e0ccfeec422", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/installs/InstallDetail.tsx:191", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/installs/InstallDetail.tsx:191"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a1fd8905f313fbba", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/installs/ToolPicker.tsx:244", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/installs/ToolPicker.tsx:244"}, "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-07cbef0fbf91ecb2", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/tabs/AgenticIntelligence.tsx:745", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/tabs/AgenticIntelligence.tsx:745"}, "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-5fc2c1492140f219", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/tabs/CompositeIntelligence.tsx:467", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/tabs/CompositeIntelligence.tsx:467"}, "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-2c85cce67173b23f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/tabs/ToolsActionsTab.tsx:546", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/tabs/ToolsActionsTab.tsx:546"}, "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-53a7ffa2111c05c0", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/v1/scrape/[jobId]/reanalyze/route.ts:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/v1/scrape/[jobId]/reanalyze/route.ts:34"}, "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-e4ccd80ba0aa7dac", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/v1/agentic-tools/[id]/sub-tool-parameters/route.ts:134", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/v1/agentic-tools/[id]/sub-tool-parameters/route.ts:134"}, "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-3227ebe50612fc01", "name": "Stray `console.log` in TS/JS \u2014 src/lib/modules/integrations/integration.service.ts:168", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/integrations/integration.service.ts:168"}, "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-2150b9b80683004f", "name": "Stray `console.log` in TS/JS \u2014 src/lib/modules/composite-tools/composite-tool.service.ts:1403", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/composite-tools/composite-tool.service.ts:1403"}, "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-1f13348c7fc5f59b", "name": "Stray `console.log` in TS/JS \u2014 src/lib/modules/composite-tools/handlers/invocation-handler.ts:221", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/composite-tools/handlers/invocation-handler.ts:221"}, "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-5630c159ddac44b8", "name": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/parallel-scraper.ts:227", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/parallel-scraper.ts:227"}, "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-27c8cbb43440f781", "name": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/scrape-job.service.ts:185", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/scrape-job.service.ts:185"}, "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-3897c219f5178191", "name": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/triage.ts:270", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/triage.ts:270"}, "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-df6f8f99c35eff63", "name": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/intelligent-crawler.ts:206", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/intelligent-crawler.ts:206"}, "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-e1ab133d9eecd0fa", "name": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/document-parser.ts:114", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/document-parser.ts:114"}, "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-930795c731c4b3f5", "name": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/ai.service.ts:126", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/ai.service.ts:126"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-979dfa780dead638", "name": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/doc-scraper.ts:382", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/doc-scraper.ts:382"}, "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-23eea9f8c41087ab", "name": "Stray `console.log` in TS/JS \u2014 src/lib/modules/execution/execution.service.ts:96", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/execution/execution.service.ts:96"}, "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-e5edb472d2a8e413", "name": "TODO/FIXME marker in shipping code \u2014 src/lib/modules/logging/logging.service.ts:563", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/modules/logging/logging.service.ts:563"}, "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-f811a58f02810c89", "name": "Stray `console.log` in TS/JS \u2014 src/lib/modules/actions/persist-from-scraper.ts:85", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/actions/persist-from-scraper.ts:85"}, "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-b9da59fb6bef6c61", "name": "TODO/FIXME marker in shipping code \u2014 src/lib/modules/gateway/gateway.service.ts:1728", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/modules/gateway/gateway.service.ts:1728"}, "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-fc4af508cc3c48c4", "name": "Stray `console.log` in TS/JS \u2014 src/lib/modules/gateway/gateway.service.ts:458", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/gateway/gateway.service.ts:458"}, "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-0a7178762fe73c63", "name": "Stray `console.log` in TS/JS \u2014 src/lib/modules/credentials/encryption.ts:170", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/credentials/encryption.ts:170"}, "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-309349bd31fbc04f", "name": "Insecure pattern 'direct_innerhtml_assignment' in .claude/skills/skill-creator/assets/eval_review.html:69", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in .claude/skills/skill-creator/assets/eval_review.html:69"}, "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-f446268a771bce9c", "name": "Insecure pattern 'direct_innerhtml_assignment' in .claude/skills/skill-creator/eval-viewer/viewer.html:766", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in .claude/skills/skill-creator/eval-viewer/viewer.html:766"}, "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-046f8323b0046448", "name": "Insecure pattern 'node_child_process' in tools/bugsnap/src/paths.js:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/bugsnap/src/paths.js:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a019e54a3be35fc2", "name": "Insecure pattern 'node_child_process' in tools/bugsnap/src/daemon.js:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/bugsnap/src/daemon.js:4"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ad8cbfc20368a06e", "name": "Insecure pattern 'node_child_process' in tools/bugsnap/src/chrome.js:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/bugsnap/src/chrome.js:1"}, "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-688d4aaaa01fa983", "name": "Possible secret in src/app/(dashboard)/settings/page.tsx", "shortDescription": {"text": "Possible secret in src/app/(dashboard)/settings/page.tsx"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6b356ea53219b388", "name": "Very large file: src/lib/modules/mcp/tools/tool-entity-authoring.ts (1620 lines)", "shortDescription": {"text": "Very large file: src/lib/modules/mcp/tools/tool-entity-authoring.ts (1620 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-58fba0d52a6cfa62", "name": "Very large file: src/lib/modules/gateway/gateway.service.ts (2094 lines)", "shortDescription": {"text": "Very large file: src/lib/modules/gateway/gateway.service.ts (2094 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-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "148 tests / 852 src (ratio 0.17)."}, "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 235 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 315 placeholder/mock markers across 110 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc55229a7a3c078d", "name": "Agent authority lacks a verifier contract: .mcp.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .mcp.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-8769bcc771831214", "name": "Agent instruction contains unpinned remote install: .claude/settings.json", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/settings.json"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-add09d5dbe220283", "name": "Agent authority lacks a verifier contract: .claude/agents/doc-updater.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/agents/doc-updater.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8e509e779d015a05", "name": "Agent instruction contains unpinned remote install: .claude/hooks/README.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/hooks/README.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-54bc4fe9ef702490", "name": "Agent authority lacks a verifier contract: .claude/skills/skill-creator/references/schemas.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/skill-creator/references/schemas.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-45e298e2cf0159da", "name": "Agent authority lacks a verifier contract: .claude/skills/skill-creator/agents/comparator.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/skill-creator/agents/comparator.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b26506acf3cc53a5", "name": "Agent authority lacks a verifier contract: .claude/skills/ux-review/SKILL.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/ux-review/SKILL.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5dd0093af1e51a78", "name": "Agent instruction contains unpinned remote install: .claude/skills/agent-browser/SKILL.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: .claude/skills/agent-browser/SKILL.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-85e3997353fc5369", "name": "Agent authority lacks a verifier contract: .claude/skills/agent-browser/references/snapshot-refs.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/agent-browser/references/snapshot-refs.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c8514a3262e400fd", "name": "Agent instruction/config may expose a secret: .claude/skills/create-tool/references/import-script-skeleton.md", "shortDescription": {"text": "Agent instruction/config may expose a secret: .claude/skills/create-tool/references/import-script-skeleton.md"}, "fullDescription": {"text": "Agent-facing files are routinely pasted into LLM/tool contexts. Move literal tokens, keys, and passwords into a secret manager or document them as placeholders only."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a1ccb035c32c5ad7", "name": "Agent authority lacks a verifier contract: .claude/skills/create-tool/references/prompt-templating.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/skills/create-tool/references/prompt-templating.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2f35533f68bac166", "name": "Commented-code block (5 lines) in prisma.config.ts:15", "shortDescription": {"text": "Commented-code block (5 lines) in prisma.config.ts:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5439010a84eb95aa", "name": "Legacy-named symbol `skippedDeprecated` in tests/unit/ai/action-generator.test.ts:546", "shortDescription": {"text": "Legacy-named symbol `skippedDeprecated` in tests/unit/ai/action-generator.test.ts:546"}, "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-031f6f18e64da463", "name": "Commented-code block (6 lines) in tests/unit/ai/llm/anthropic-meta-provider.test.ts:28", "shortDescription": {"text": "Commented-code block (6 lines) in tests/unit/ai/llm/anthropic-meta-provider.test.ts:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3341c555fb05728", "name": "Legacy-named symbol `api_v2` in tests/unit/variables/variable-parser.test.ts:73", "shortDescription": {"text": "Legacy-named symbol `api_v2` in tests/unit/variables/variable-parser.test.ts:73"}, "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-640a525545aa4334", "name": "Legacy-named symbol `get_foo_v2` in tests/unit/versions/adapter-normalize.test.ts:158", "shortDescription": {"text": "Legacy-named symbol `get_foo_v2` in tests/unit/versions/adapter-normalize.test.ts:158"}, "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-77ede60486c43e8e", "name": "Commented-code block (9 lines) in tests/unit/agentic-tools/openai-provider.test.ts:16", "shortDescription": {"text": "Commented-code block (9 lines) in tests/unit/agentic-tools/openai-provider.test.ts:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-52c71ad754b28efc", "name": "Legacy-named symbol `database_schema_v2` in tests/unit/agentic-tools/prompt-processor.test.ts:84", "shortDescription": {"text": "Legacy-named symbol `database_schema_v2` in tests/unit/agentic-tools/prompt-processor.test.ts:84"}, "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-e3d2efd5079d165f", "name": "Commented-code block (5 lines) in tests/helpers/setup.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in tests/helpers/setup.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-f4e286d3860cdde6", "name": "Commented-code block (7 lines) in scripts/tools/httpbin/import.ts:324", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/tools/httpbin/import.ts:324"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-76e350eb8077b5bf", "name": "Commented-code block (5 lines) in .claude/skills/skill-creator/scripts/improve_description.py:158", "shortDescription": {"text": "Commented-code block (5 lines) in .claude/skills/skill-creator/scripts/improve_description.py:158"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd232cae9e3f611a", "name": "Network/subprocess call without timeout or try/except \u2014 .claude/skills/skill-creator/scripts/run_eval.py:85", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 .claude/skills/skill-creator/scripts/run_eval.py:85"}, "fullDescription": {"text": "`subprocess.Popen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c221105bd2c56652", "name": "Commented-code block (9 lines) in src/components/ui/side-panel.tsx:56", "shortDescription": {"text": "Commented-code block (9 lines) in src/components/ui/side-panel.tsx:56"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-127e7cf15f82d35a", "name": "Commented-code block (9 lines) in src/components/ui/modal.tsx:59", "shortDescription": {"text": "Commented-code block (9 lines) in src/components/ui/modal.tsx:59"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-28a1c6633a9be0dd", "name": "Commented-code block (6 lines) in src/components/features/integrations/IntegrationFieldMappingsTab.tsx:25", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/features/integrations/IntegrationFieldMappingsTab.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-0ec9e14fbc995f8a", "name": "Commented-code block (6 lines) in src/components/features/integrations/IntegrationDetail.tsx:200", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/features/integrations/IntegrationDetail.tsx:200"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0187a70a233cc50f", "name": "Commented-code block (6 lines) in src/components/features/integrations/wizard/StepConfigureAuth.tsx:585", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/features/integrations/wizard/StepConfigureAuth.tsx:585"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-85cf5aefb7479c3d", "name": "Commented-code block (7 lines) in src/components/features/settings/MetaAiSection.tsx:6", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/features/settings/MetaAiSection.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-374914c1321ad55f", "name": "Commented-code block (7 lines) in src/components/features/settings/LlmManagementSection.tsx:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/features/settings/LlmManagementSection.tsx:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4bf21ee50d64d142", "name": "Commented-code block (5 lines) in src/components/features/settings/ToolAiSection.tsx:129", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/features/settings/ToolAiSection.tsx:129"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2e6197a4e27ba567", "name": "Commented-code block (5 lines) in src/components/features/pipelines/PipelineDashboard.tsx:113", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/features/pipelines/PipelineDashboard.tsx:113"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-30a1b247b916ad48", "name": "Commented-code block (7 lines) in src/components/features/actions/ActionEditor.tsx:344", "shortDescription": {"text": "Commented-code block (7 lines) in src/components/features/actions/ActionEditor.tsx:344"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2791b1f299cc4d52", "name": "Commented-code block (5 lines) in src/components/features/actions/ActionTester.tsx:114", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/features/actions/ActionTester.tsx:114"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-41736804b5e7832d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/features/actions/ActionTester.tsx:119", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/features/actions/ActionTester.tsx:119"}, "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-91cdb20a31e58790", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/features/actions/editor/PaginationSettings.tsx:221", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/features/actions/editor/PaginationSettings.tsx:221"}, "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-85509b5de59993b3", "name": "Commented-code block (5 lines) in src/components/features/agentic-tools/AgenticToolDetail.tsx:16", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/features/agentic-tools/AgenticToolDetail.tsx:16"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6e3bbb7182076a32", "name": "Commented-code block (5 lines) in src/components/features/agentic-tools/wizard/StepLLMConfig.tsx:39", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/features/agentic-tools/wizard/StepLLMConfig.tsx:39"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-505d4440c89eeab7", "name": "Commented-code block (5 lines) in src/components/features/ai-tools/AIToolDashboard.tsx:386", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/features/ai-tools/AIToolDashboard.tsx:386"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-efa5168b8b780086", "name": "Commented-code block (6 lines) in src/components/features/ai-tools/installs/InstallList.tsx:21", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/features/ai-tools/installs/InstallList.tsx:21"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-75abc9b4f5e14fee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/features/ai-tools/installs/snippets.ts:100", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/features/ai-tools/installs/snippets.ts:100"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1e00744818d7f425", "name": "Commented-code block (5 lines) in src/components/features/ai-tools/installs/InstallDetail.tsx:142", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/features/ai-tools/installs/InstallDetail.tsx:142"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e72093cb028f19b3", "name": "Commented-code block (6 lines) in src/components/features/ai-tools/tabs/ToolsActionsTab.tsx:188", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/features/ai-tools/tabs/ToolsActionsTab.tsx:188"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc158c9b5ec858ad", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/features/ai-tools/tabs/ExportTab.tsx:202", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/features/ai-tools/tabs/ExportTab.tsx:202"}, "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-6dda48c0f6f3c551", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/docs/guides/pagination/page.tsx:48", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/docs/guides/pagination/page.tsx:48"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1d2fff2af4dbb2cf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/api/client.ts:77", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/api/client.ts:77"}, "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-8f0b701cbfdcec4b", "name": "Commented-code block (6 lines) in src/lib/api/middleware/auth.ts:207", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/api/middleware/auth.ts:207"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-151bf0d603896625", "name": "Commented-code block (7 lines) in src/lib/modules/integrations/integration.service.ts:220", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/modules/integrations/integration.service.ts:220"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc23b511e79a383b", "name": "Commented-code block (5 lines) in src/lib/modules/composite-tools/composite-tool.service.ts:334", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/modules/composite-tools/composite-tool.service.ts:334"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-62cabaaad5a89913", "name": "Commented-code block (6 lines) in src/lib/modules/composite-tools/handlers/invocation-handler.ts:311", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/modules/composite-tools/handlers/invocation-handler.ts:311"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-95a4f7448126d885", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/composite-tools/export/composite-tool.transformer.ts:522", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/composite-tools/export/composite-tool.transformer.ts:522"}, "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-c3baebff2df2ea5a", "name": "Commented-code block (7 lines) in src/lib/modules/auto-maintenance/description-cascade.ts:169", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/modules/auto-maintenance/description-cascade.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-67a0d297f99d94c4", "name": "Commented-code block (5 lines) in src/lib/modules/auto-maintenance/auto-maintenance.service.ts:360", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/modules/auto-maintenance/auto-maintenance.service.ts:360"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c6726d02fd8f6778", "name": "Commented-code block (7 lines) in src/lib/modules/auto-maintenance/schema-inference.ts:521", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/modules/auto-maintenance/schema-inference.ts:521"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5d8e4262a90db562", "name": "Commented-code block (5 lines) in src/lib/modules/ai/scrape-job.service.ts:942", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/modules/ai/scrape-job.service.ts:942"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-963220ea841bce4a", "name": "Legacy-named symbol `includeDeprecated` in src/lib/modules/ai/action-generator.ts:180", "shortDescription": {"text": "Legacy-named symbol `includeDeprecated` in src/lib/modules/ai/action-generator.ts:180"}, "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-60bc8199a44269b7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/ai/action-generator.ts:124", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/ai/action-generator.ts:124"}, "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-0908cd1eab730627", "name": "Commented-code block (5 lines) in src/lib/modules/ai/llm/providers/openai.ts:119", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/modules/ai/llm/providers/openai.ts:119"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-86c4c1e4e02f5459", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/auth/oauth-providers/generic.ts:102", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/auth/oauth-providers/generic.ts:102"}, "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-3c6448d2f77938db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/auth/oauth-providers/base.ts:164", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/auth/oauth-providers/base.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-b6efbb6f6dea4083", "name": "Commented-code block (5 lines) in src/lib/modules/pipelines/pipeline.service.ts:337", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/modules/pipelines/pipeline.service.ts:337"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-746f811e4bd5808c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/pipelines/export/pipeline.transformer.ts:325", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/pipelines/export/pipeline.transformer.ts:325"}, "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-e2624e3af58ffc28", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/execution/retry.ts:207", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/execution/retry.ts:207"}, "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-ca19962e870c6b14", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/execution/http-client.ts:284", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/execution/http-client.ts:284"}, "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-b72061eaefc7e771", "name": "Commented-code block (5 lines) in src/lib/modules/execution/execution.service.ts:401", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/modules/execution/execution.service.ts:401"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fd832020bccdae6d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/execution/pagination/pagination.schemas.ts:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/execution/pagination/pagination.schemas.ts:49"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b84d48e365f92f2a", "name": "Legacy-named symbol `includeDeprecated` in src/lib/modules/actions/persist-from-scraper.ts:32", "shortDescription": {"text": "Legacy-named symbol `includeDeprecated` in src/lib/modules/actions/persist-from-scraper.ts:32"}, "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-e7daefca12eeb28c", "name": "Commented-code block (11 lines) in src/lib/modules/actions/persist-from-scraper.ts:195", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/modules/actions/persist-from-scraper.ts:195"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d164c5dcd11fc932", "name": "Commented-code block (6 lines) in src/lib/modules/tool-export/tool-export.service.ts:689", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/modules/tool-export/tool-export.service.ts:689"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-33ad2bb717a70a94", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/tool-export/tool-export.service.ts:1058", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/tool-export/tool-export.service.ts:1058"}, "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-0ee89a63aa4d2183", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/tool-export/formats/langchain.transformer.ts:257", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/tool-export/formats/langchain.transformer.ts:257"}, "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-f185df077ef4feaa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/tool-export/formats/mcp.transformer.ts:405", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/tool-export/formats/mcp.transformer.ts:405"}, "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-cfca1d5b6d887d97", "name": "Commented-code block (6 lines) in src/lib/modules/gateway/gateway.service.ts:289", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/modules/gateway/gateway.service.ts:289"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e5bc30f68645d043", "name": "Commented-code block (6 lines) in src/lib/modules/versions/adapters/pipeline.adapter.ts:275", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/modules/versions/adapters/pipeline.adapter.ts:275"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a1bcf1e19bd5899e", "name": "Commented-code block (10 lines) in src/lib/modules/installs/install.service.ts:647", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/modules/installs/install.service.ts:647"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3c948fcee89f6cc0", "name": "Commented-code block (6 lines) in src/lib/modules/installs/manifest-resolver.ts:135", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/modules/installs/manifest-resolver.ts:135"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-36843a5f33f8120f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/agentic-tools/tracing/opentelemetry-adapter.ts:293", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/agentic-tools/tracing/opentelemetry-adapter.ts:293"}, "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-00c7db5f5a918eda", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/agentic-tools/tracing/langsmith-adapter.ts:211", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/agentic-tools/tracing/langsmith-adapter.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-6c1e60ca1a571533", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/agentic-tools/export/agentic-tool.transformer.ts:456", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/agentic-tools/export/agentic-tool.transformer.ts:456"}, "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-ac051e838d42284f", "name": "Commented-code block (5 lines) in src/lib/modules/jobs/jobs.queue.ts:212", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/modules/jobs/jobs.queue.ts:212"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-14bc45ef6f3b61db", "name": "Commented-code block (5 lines) in src/lib/modules/jobs/jobs.worker.ts:175", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/modules/jobs/jobs.worker.ts:175"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-73a47f3a42dcb820", "name": "Commented-code block (5 lines) in src/lib/modules/credentials/credential.service.ts:429", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/modules/credentials/credential.service.ts:429"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-02105e39e99a7552", "name": "Commented-code block (7 lines) in src/lib/db/supabase.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/db/supabase.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-65df07ab4020db79", "name": "18 env vars used in code but missing from .env.example", "shortDescription": {"text": "18 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `BUGSNAP_API_PORT`, `BUGSNAP_CDP_PORT`, `DIRECT_URL`, `ENVIRONMENT`, `EXECUTION_MAX_RESPONSE_BYTES`, `GATEWAY_EXECUTION_BUDGET_MS`, `LLM_DEFAULT_MODEL`, `NEXT_PUBLIC_API_BASE_URL` + 10 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-b74ebc939472de3b", "name": "Dangling fetch: POST /api/v1/actions/${integration.slug}/${action.slug} (src/components/features/actions/ActionTester.ts", "shortDescription": {"text": "Dangling fetch: POST /api/v1/actions/${integration.slug}/${action.slug} (src/components/features/actions/ActionTester.tsx:119)"}, "fullDescription": {"text": "`src/components/features/actions/ActionTester.tsx:119` calls `POST /api/v1/actions/${integration.slug}/${action.slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/actions/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-14873b92929fc555", "name": "Dangling fetch: POST /api/v1/agentic-tools/${tool.id}/test-prompt (src/components/features/agentic-tools/AgenticToolDeta", "shortDescription": {"text": "Dangling fetch: POST /api/v1/agentic-tools/${tool.id}/test-prompt (src/components/features/agentic-tools/AgenticToolDetail.tsx:53)"}, "fullDescription": {"text": "`src/components/features/agentic-tools/AgenticToolDetail.tsx:53` calls `POST /api/v1/agentic-tools/${tool.id}/test-prompt` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/agentic-tools/<p>/test-prompt`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e2a97cb3be9e3a0", "name": "Dangling fetch: POST /api/v1/connect/authorize (src/app/connect/[token]/ConnectPageClient.tsx:41)", "shortDescription": {"text": "Dangling fetch: POST /api/v1/connect/authorize (src/app/connect/[token]/ConnectPageClient.tsx:41)"}, "fullDescription": {"text": "`src/app/connect/[token]/ConnectPageClient.tsx:41` calls `POST /api/v1/connect/authorize` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/connect/authorize`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2bcf5f77206e2646", "name": "Dangling fetch: POST /api/v1/integrations/${integrationId}/oauth/callback (src/app/(dashboard)/integrations/[id]/connect", "shortDescription": {"text": "Dangling fetch: POST /api/v1/integrations/${integrationId}/oauth/callback (src/app/(dashboard)/integrations/[id]/connect/page.tsx:57)"}, "fullDescription": {"text": "`src/app/(dashboard)/integrations/[id]/connect/page.tsx:57` calls `POST /api/v1/integrations/${integrationId}/oauth/callback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/v1/integrations/<p>/oauth/callback`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-77895f88e925a19e", "name": "Dangling fetch: POST https://api.firecrawl.dev/v1/map (src/lib/modules/ai/intelligent-crawler.ts:220)", "shortDescription": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/map (src/lib/modules/ai/intelligent-crawler.ts:220)"}, "fullDescription": {"text": "`src/lib/modules/ai/intelligent-crawler.ts:220` calls `POST https://api.firecrawl.dev/v1/map` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.firecrawl.dev/v1/map`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-240b79dde5f9607e", "name": "Dangling fetch: POST https://api.firecrawl.dev/v1/scrape (src/lib/modules/ai/doc-scraper.ts:279)", "shortDescription": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/scrape (src/lib/modules/ai/doc-scraper.ts:279)"}, "fullDescription": {"text": "`src/lib/modules/ai/doc-scraper.ts:279` calls `POST https://api.firecrawl.dev/v1/scrape` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.firecrawl.dev/v1/scrape`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e974ccc2d24747d", "name": "Unused endpoint: PATCH /settings/profile", "shortDescription": {"text": "Unused endpoint: PATCH /settings/profile"}, "fullDescription": {"text": "`src/components/features/settings/SettingsPage.tsx` declares `PATCH /settings/profile` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-64ac814caed3351b", "name": "Unused endpoint: PATCH /settings/notifications", "shortDescription": {"text": "Unused endpoint: PATCH /settings/notifications"}, "fullDescription": {"text": "`src/components/features/settings/SettingsPage.tsx` declares `PATCH /settings/notifications` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/21182"}, "properties": {"repository": "TheWizardOz3/Waygate", "repoUrl": "https://github.com/TheWizardOz3/Waygate", "branch": "main"}, "results": [{"ruleId": "scanner-e8067a8df712fb95", "level": "note", "message": {"text": "Possibly dead Python function: run_single_query"}, "properties": {"repobilityId": "1056c4dff9b57a73", "scanner": "scanner-primary", "fingerprint": "e8067a8df712fb95", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/skill-creator/scripts/run_eval.py:35"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2d1d7e070d662788", "level": "note", "message": {"text": "Possibly dead Python function: do_GET"}, "properties": {"repobilityId": "2d943bb45e4f13bd", "scanner": "scanner-primary", "fingerprint": "2d1d7e070d662788", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/skill-creator/eval-viewer/generate_review.py:332"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-986798d8be1e94d0", "level": "note", "message": {"text": "Possibly dead Python function: do_POST"}, "properties": {"repobilityId": "53357410ca9379a9", "scanner": "scanner-primary", "fingerprint": "986798d8be1e94d0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/skill-creator/eval-viewer/generate_review.py:361"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa4344d6f82f9192", "level": "note", "message": {"text": "Possibly dead Python function: log_message"}, "properties": {"repobilityId": "965f3150b4af5b2e", "scanner": "scanner-primary", "fingerprint": "aa4344d6f82f9192", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/skill-creator/eval-viewer/generate_review.py:382"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-74e0b29b98dab8be", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/update-platform-ai-defaults.ts:55"}, "properties": {"repobilityId": "b669b91a7707754c", "scanner": "scanner-primary", "fingerprint": "74e0b29b98dab8be", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-02abf6ddb5b5db26", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/generate-openapi.ts:346"}, "properties": {"repobilityId": "e17146a09e731eb1", "scanner": "scanner-primary", "fingerprint": "02abf6ddb5b5db26", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8cc539c6d64c879f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/tools/httpbin/list-tenants.ts:30"}, "properties": {"repobilityId": "b5814793d40abe80", "scanner": "scanner-primary", "fingerprint": "8cc539c6d64c879f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e6fb307be9276f63", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/tools/httpbin/import.ts:774"}, "properties": {"repobilityId": "a5a4831b8e599909", "scanner": "scanner-primary", "fingerprint": "e6fb307be9276f63", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e28d3670ddee18af", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 prisma/seed.ts:92"}, "properties": {"repobilityId": "f77d7e0fb34b08e2", "scanner": "scanner-primary", "fingerprint": "e28d3670ddee18af", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2ec7e52fde92cc29", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 tools/bugsnap/src/inject.js:7"}, "properties": {"repobilityId": "e8667890700816c7", "scanner": "scanner-primary", "fingerprint": "2ec7e52fde92cc29", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-85ecb9ac4c88f84d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/ui/list-row.tsx:73"}, "properties": {"repobilityId": "455157bff14e3cf9", "scanner": "scanner-primary", "fingerprint": "85ecb9ac4c88f84d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2653f0b9a5c78dc3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/layouts/GlobalSearch.tsx:216"}, "properties": {"repobilityId": "f03a5819064014fd", "scanner": "scanner-primary", "fingerprint": "2653f0b9a5c78dc3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9a6a981bb89e3017", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/integrations/IntegrationList.tsx:421"}, "properties": {"repobilityId": "f03204e8d1ccb4da", "scanner": "scanner-primary", "fingerprint": "9a6a981bb89e3017", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0f4c40b1b8d71a8b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/features/integrations/IntegrationHeader.tsx:89"}, "properties": {"repobilityId": "9a9e072789cbeaac", "scanner": "scanner-primary", "fingerprint": "0f4c40b1b8d71a8b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-1355ba35e747694b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/integrations/TagFilter.tsx:66"}, "properties": {"repobilityId": "002840d1832d7929", "scanner": "scanner-primary", "fingerprint": "1355ba35e747694b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ee91f45aeaa086e9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/integrations/IntegrationDocumentationTab.tsx:280"}, "properties": {"repobilityId": "0c6efc022d9b729f", "scanner": "scanner-primary", "fingerprint": "ee91f45aeaa086e9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bedf3a64fa306518", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/integrations/IntegrationCard.tsx:80"}, "properties": {"repobilityId": "a4056e9e272cdc82", "scanner": "scanner-primary", "fingerprint": "bedf3a64fa306518", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-be5a3b096219b9f9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/integrations/wizard/StepScraping.tsx:73"}, "properties": {"repobilityId": "3cab1ca804eb2bad", "scanner": "scanner-primary", "fingerprint": "be5a3b096219b9f9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bfda48a35ff72f73", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/components/features/integrations/wizard/StepConfigureAuth.tsx:564"}, "properties": {"repobilityId": "014648d8de4e94c9", "scanner": "scanner-primary", "fingerprint": "bfda48a35ff72f73", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-82c8ccb322bdebb0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/integrations/wizard/StepReviewActions.tsx:63"}, "properties": {"repobilityId": "bfd52073d9146d35", "scanner": "scanner-primary", "fingerprint": "82c8ccb322bdebb0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1a2814654768875f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/composite-tools/CompositeToolDetail.tsx:507"}, "properties": {"repobilityId": "1fe067770bbecd03", "scanner": "scanner-primary", "fingerprint": "1a2814654768875f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6eff5f896af3da7e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/composite-tools/CompositeToolList.tsx:490"}, "properties": {"repobilityId": "b2e0ac43bfabc2ab", "scanner": "scanner-primary", "fingerprint": "6eff5f896af3da7e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6678fb8dbeef35f4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/composite-tools/wizard/StepSelectOperations.tsx:271"}, "properties": {"repobilityId": "51ab836e76dec23b", "scanner": "scanner-primary", "fingerprint": "6678fb8dbeef35f4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6093bad1fd6644db", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/composite-tools/wizard/StepReview.tsx:167"}, "properties": {"repobilityId": "9abd1ba87179c1d0", "scanner": "scanner-primary", "fingerprint": "6093bad1fd6644db", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-701eaf9c71bbcfb2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/auto-maintenance/SchemaDiffViewer.tsx:225"}, "properties": {"repobilityId": "6d39eedd2e9c1dc3", "scanner": "scanner-primary", "fingerprint": "701eaf9c71bbcfb2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-954053ba75445cd4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/schema-drift/DriftReportsList.tsx:349"}, "properties": {"repobilityId": "f63867d7c9a61b12", "scanner": "scanner-primary", "fingerprint": "954053ba75445cd4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-42ff639900aa1929", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/dashboard/RecentActivity.tsx:118"}, "properties": {"repobilityId": "f0d12a4cfc2e87b3", "scanner": "scanner-primary", "fingerprint": "42ff639900aa1929", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-530be4d3aea1c18f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/pipelines/sections/StepToolSelector.tsx:180"}, "properties": {"repobilityId": "a3aab99d6d17ae91", "scanner": "scanner-primary", "fingerprint": "530be4d3aea1c18f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8038acd8265d28a2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/pipelines/sections/StepCard.tsx:181"}, "properties": {"repobilityId": "0a456eb738cc94f7", "scanner": "scanner-primary", "fingerprint": "8038acd8265d28a2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e62005513decc47d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/actions/RequestResponseViewer.tsx:62"}, "properties": {"repobilityId": "ee142e26b258c9dd", "scanner": "scanner-primary", "fingerprint": "e62005513decc47d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-94d55fab14921897", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/actions/AddActionWizard.tsx:501"}, "properties": {"repobilityId": "ba7da10abe8e7d6c", "scanner": "scanner-primary", "fingerprint": "94d55fab14921897", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-95beb4de0d8efe75", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/actions/TestHistory.tsx:122"}, "properties": {"repobilityId": "1dd5d8e1ad739145", "scanner": "scanner-primary", "fingerprint": "95beb4de0d8efe75", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-40e30b843dd351f6", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/features/actions/BulkActionBar.tsx:15"}, "properties": {"repobilityId": "94245f08ae941fe0", "scanner": "scanner-primary", "fingerprint": "40e30b843dd351f6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-039fa76fb9cc92c7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/actions/editor/VariableAutocomplete.tsx:233"}, "properties": {"repobilityId": "91ac140a5ff00edd", "scanner": "scanner-primary", "fingerprint": "039fa76fb9cc92c7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-760b99a33d9506ee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/agentic-tools/wizard/StepToolAllocation.tsx:369"}, "properties": {"repobilityId": "43d893dc6372757e", "scanner": "scanner-primary", "fingerprint": "760b99a33d9506ee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fd6636148391133c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/jobs/JobDetail.tsx:355"}, "properties": {"repobilityId": "e6669a47b99e94ca", "scanner": "scanner-primary", "fingerprint": "fd6636148391133c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6dcb699a316e29c7", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/components/features/connections/ConnectionDetail.tsx:65"}, "properties": {"repobilityId": "a0bb942b8d950018", "scanner": "scanner-primary", "fingerprint": "6dcb699a316e29c7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-ce748494a6bec2ad", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/connections/ConnectionCard.tsx:124"}, "properties": {"repobilityId": "b98df57614cade03", "scanner": "scanner-primary", "fingerprint": "ce748494a6bec2ad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-82b6a6bf219c25e1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/connections/ConnectionList.tsx:326"}, "properties": {"repobilityId": "cc1df386cfd41064", "scanner": "scanner-primary", "fingerprint": "82b6a6bf219c25e1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fdefc18cd94e3739", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/connections/mappings/ConnectionMappingCard.tsx:52"}, "properties": {"repobilityId": "07fe9f7752a2e750", "scanner": "scanner-primary", "fingerprint": "fdefc18cd94e3739", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-23a16ea8fe5123ab", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/installs/InstallList.tsx:67"}, "properties": {"repobilityId": "f3962496532bf9a6", "scanner": "scanner-primary", "fingerprint": "23a16ea8fe5123ab", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7c14aa147a7a06f0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/installs/InstallFormDialog.tsx:535"}, "properties": {"repobilityId": "1682f0f8d093dd87", "scanner": "scanner-primary", "fingerprint": "7c14aa147a7a06f0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a9117e0ccfeec422", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/installs/InstallDetail.tsx:191"}, "properties": {"repobilityId": "5ed4e62b61531df0", "scanner": "scanner-primary", "fingerprint": "a9117e0ccfeec422", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a1fd8905f313fbba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/installs/ToolPicker.tsx:244"}, "properties": {"repobilityId": "b7ac32240eb6bdd2", "scanner": "scanner-primary", "fingerprint": "a1fd8905f313fbba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-07cbef0fbf91ecb2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/tabs/AgenticIntelligence.tsx:745"}, "properties": {"repobilityId": "4c2220306869e5e7", "scanner": "scanner-primary", "fingerprint": "07cbef0fbf91ecb2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5fc2c1492140f219", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/tabs/CompositeIntelligence.tsx:467"}, "properties": {"repobilityId": "2bc046f3ec02da80", "scanner": "scanner-primary", "fingerprint": "5fc2c1492140f219", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2c85cce67173b23f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/features/ai-tools/tabs/ToolsActionsTab.tsx:546"}, "properties": {"repobilityId": "7f13c62feaedafe1", "scanner": "scanner-primary", "fingerprint": "2c85cce67173b23f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-53a7ffa2111c05c0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/v1/scrape/[jobId]/reanalyze/route.ts:34"}, "properties": {"repobilityId": "1d5454214d09d692", "scanner": "scanner-primary", "fingerprint": "53a7ffa2111c05c0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e4ccd80ba0aa7dac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/v1/agentic-tools/[id]/sub-tool-parameters/route.ts:134"}, "properties": {"repobilityId": "a041ef1d7994c50f", "scanner": "scanner-primary", "fingerprint": "e4ccd80ba0aa7dac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3227ebe50612fc01", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/integrations/integration.service.ts:168"}, "properties": {"repobilityId": "bdf4e03ab9cd784e", "scanner": "scanner-primary", "fingerprint": "3227ebe50612fc01", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2150b9b80683004f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/composite-tools/composite-tool.service.ts:1403"}, "properties": {"repobilityId": "55c0863296162c82", "scanner": "scanner-primary", "fingerprint": "2150b9b80683004f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f13348c7fc5f59b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/composite-tools/handlers/invocation-handler.ts:221"}, "properties": {"repobilityId": "69ba1b5387ab8ef7", "scanner": "scanner-primary", "fingerprint": "1f13348c7fc5f59b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5630c159ddac44b8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/parallel-scraper.ts:227"}, "properties": {"repobilityId": "0da2b3a6f99e1e9b", "scanner": "scanner-primary", "fingerprint": "5630c159ddac44b8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-27c8cbb43440f781", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/scrape-job.service.ts:185"}, "properties": {"repobilityId": "a4d344fbd5752048", "scanner": "scanner-primary", "fingerprint": "27c8cbb43440f781", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3897c219f5178191", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/triage.ts:270"}, "properties": {"repobilityId": "f114de9b674ce8c6", "scanner": "scanner-primary", "fingerprint": "3897c219f5178191", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-df6f8f99c35eff63", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/intelligent-crawler.ts:206"}, "properties": {"repobilityId": "22e2da8b981f703e", "scanner": "scanner-primary", "fingerprint": "df6f8f99c35eff63", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e1ab133d9eecd0fa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/document-parser.ts:114"}, "properties": {"repobilityId": "3e26ed234fe8e376", "scanner": "scanner-primary", "fingerprint": "e1ab133d9eecd0fa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-930795c731c4b3f5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/ai.service.ts:126"}, "properties": {"repobilityId": "a434ae81b42bd9f7", "scanner": "scanner-primary", "fingerprint": "930795c731c4b3f5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-979dfa780dead638", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/ai/doc-scraper.ts:382"}, "properties": {"repobilityId": "11dbc8889af99c3c", "scanner": "scanner-primary", "fingerprint": "979dfa780dead638", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-23eea9f8c41087ab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/execution/execution.service.ts:96"}, "properties": {"repobilityId": "93cec395640326a3", "scanner": "scanner-primary", "fingerprint": "23eea9f8c41087ab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e5edb472d2a8e413", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/modules/logging/logging.service.ts:563"}, "properties": {"repobilityId": "3bd2a20e1667460e", "scanner": "scanner-primary", "fingerprint": "e5edb472d2a8e413", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-f811a58f02810c89", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/actions/persist-from-scraper.ts:85"}, "properties": {"repobilityId": "63b77b2076cb8bf1", "scanner": "scanner-primary", "fingerprint": "f811a58f02810c89", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b9da59fb6bef6c61", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/lib/modules/gateway/gateway.service.ts:1728"}, "properties": {"repobilityId": "92168db3b4a67f5d", "scanner": "scanner-primary", "fingerprint": "b9da59fb6bef6c61", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-fc4af508cc3c48c4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/gateway/gateway.service.ts:458"}, "properties": {"repobilityId": "ad6bac6ff887b555", "scanner": "scanner-primary", "fingerprint": "fc4af508cc3c48c4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0a7178762fe73c63", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/lib/modules/credentials/encryption.ts:170"}, "properties": {"repobilityId": "aed97d364923e5b2", "scanner": "scanner-primary", "fingerprint": "0a7178762fe73c63", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-309349bd31fbc04f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in .claude/skills/skill-creator/assets/eval_review.html:69"}, "properties": {"repobilityId": "a9a33a58478fc39e", "scanner": "scanner-primary", "fingerprint": "309349bd31fbc04f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/skill-creator/assets/eval_review.html"}, "region": {"startLine": 69}}}]}, {"ruleId": "scanner-f446268a771bce9c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in .claude/skills/skill-creator/eval-viewer/viewer.html:766"}, "properties": {"repobilityId": "1a9404de264b6421", "scanner": "scanner-primary", "fingerprint": "f446268a771bce9c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/skill-creator/eval-viewer/viewer.html"}, "region": {"startLine": 766}}}]}, {"ruleId": "scanner-046f8323b0046448", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/bugsnap/src/paths.js:3"}, "properties": {"repobilityId": "1dba205393c1f3eb", "scanner": "scanner-primary", "fingerprint": "046f8323b0046448", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/bugsnap/src/paths.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-a019e54a3be35fc2", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/bugsnap/src/daemon.js:4"}, "properties": {"repobilityId": "5dd96abab6260afe", "scanner": "scanner-primary", "fingerprint": "a019e54a3be35fc2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/bugsnap/src/daemon.js"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-ad8cbfc20368a06e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/bugsnap/src/chrome.js:1"}, "properties": {"repobilityId": "6f77bb69f3398521", "scanner": "scanner-primary", "fingerprint": "ad8cbfc20368a06e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/bugsnap/src/chrome.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-688d4aaaa01fa983", "level": "error", "message": {"text": "Possible secret in src/app/(dashboard)/settings/page.tsx"}, "properties": {"repobilityId": "aa4de894e8d1cb5d", "scanner": "scanner-primary", "fingerprint": "688d4aaaa01fa983", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/app/(dashboard)/settings/page.tsx"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ae16880318b99912", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "54597edb7f5bad38", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "989a74409a402368", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "714673743ff59cef", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6b356ea53219b388", "level": "note", "message": {"text": "Very large file: src/lib/modules/mcp/tools/tool-entity-authoring.ts (1620 lines)"}, "properties": {"repobilityId": "cce989c2a2dcb1ba", "scanner": "scanner-primary", "fingerprint": "6b356ea53219b388", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-58fba0d52a6cfa62", "level": "note", "message": {"text": "Very large file: src/lib/modules/gateway/gateway.service.ts (2094 lines)"}, "properties": {"repobilityId": "a161949c255407a0", "scanner": "scanner-primary", "fingerprint": "58fba0d52a6cfa62", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "c06952a26341a984", "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": "e0c69575e352309c", "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": "32d07ad610bc6514", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "b92bf612f060b2db", "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": "b5315b939abd2490", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-cc55229a7a3c078d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .mcp.json"}, "properties": {"repobilityId": "51942fb3d5b8b5b4", "scanner": "scanner-primary", "fingerprint": "cc55229a7a3c078d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "mcp_config"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".mcp.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-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-8769bcc771831214", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/settings.json"}, "properties": {"repobilityId": "f94968d1c8aa7dc6", "scanner": "scanner-primary", "fingerprint": "8769bcc771831214", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.json"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-add09d5dbe220283", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/agents/doc-updater.md"}, "properties": {"repobilityId": "3cab8b39f07234df", "scanner": "scanner-primary", "fingerprint": "add09d5dbe220283", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/agents/doc-updater.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8e509e779d015a05", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/hooks/README.md"}, "properties": {"repobilityId": "8b2056ccb1f746fe", "scanner": "scanner-primary", "fingerprint": "8e509e779d015a05", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/hooks/README.md"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-54bc4fe9ef702490", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/skill-creator/references/schemas.md"}, "properties": {"repobilityId": "249bb5e87f34d020", "scanner": "scanner-primary", "fingerprint": "54bc4fe9ef702490", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/skill-creator/references/schemas.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-45e298e2cf0159da", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/skill-creator/agents/comparator.md"}, "properties": {"repobilityId": "2e7f91f95a4df33a", "scanner": "scanner-primary", "fingerprint": "45e298e2cf0159da", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/skill-creator/agents/comparator.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b26506acf3cc53a5", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/ux-review/SKILL.md"}, "properties": {"repobilityId": "d74765c8d6db0276", "scanner": "scanner-primary", "fingerprint": "b26506acf3cc53a5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/ux-review/SKILL.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5dd0093af1e51a78", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: .claude/skills/agent-browser/SKILL.md"}, "properties": {"repobilityId": "3c25b39195a01891", "scanner": "scanner-primary", "fingerprint": "5dd0093af1e51a78", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/agent-browser/SKILL.md"}, "region": {"startLine": 166}}}]}, {"ruleId": "scanner-85e3997353fc5369", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/agent-browser/references/snapshot-refs.md"}, "properties": {"repobilityId": "4b35833b0e38e3a3", "scanner": "scanner-primary", "fingerprint": "85e3997353fc5369", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/agent-browser/references/snapshot-refs.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c8514a3262e400fd", "level": "error", "message": {"text": "Agent instruction/config may expose a secret: .claude/skills/create-tool/references/import-script-skeleton.md"}, "properties": {"repobilityId": "7a715a6313b3f286", "scanner": "scanner-primary", "fingerprint": "c8514a3262e400fd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["agent-instructions", "secrets", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/create-tool/references/import-script-skeleton.md"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-a1ccb035c32c5ad7", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/skills/create-tool/references/prompt-templating.md"}, "properties": {"repobilityId": "4bc9a4805c6f36ef", "scanner": "scanner-primary", "fingerprint": "a1ccb035c32c5ad7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/skills/create-tool/references/prompt-templating.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2f35533f68bac166", "level": "none", "message": {"text": "Commented-code block (5 lines) in prisma.config.ts:15"}, "properties": {"repobilityId": "9ea820b1fc3740cc", "scanner": "scanner-primary", "fingerprint": "2f35533f68bac166", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5439010a84eb95aa", "level": "note", "message": {"text": "Legacy-named symbol `skippedDeprecated` in tests/unit/ai/action-generator.test.ts:546"}, "properties": {"repobilityId": "295f2341dc3d7839", "scanner": "scanner-primary", "fingerprint": "5439010a84eb95aa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-031f6f18e64da463", "level": "none", "message": {"text": "Commented-code block (6 lines) in tests/unit/ai/llm/anthropic-meta-provider.test.ts:28"}, "properties": {"repobilityId": "c0c207d8fd93973f", "scanner": "scanner-primary", "fingerprint": "031f6f18e64da463", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3341c555fb05728", "level": "note", "message": {"text": "Legacy-named symbol `api_v2` in tests/unit/variables/variable-parser.test.ts:73"}, "properties": {"repobilityId": "a3876af1dd02467d", "scanner": "scanner-primary", "fingerprint": "c3341c555fb05728", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-640a525545aa4334", "level": "note", "message": {"text": "Legacy-named symbol `get_foo_v2` in tests/unit/versions/adapter-normalize.test.ts:158"}, "properties": {"repobilityId": "8482e5e681a07447", "scanner": "scanner-primary", "fingerprint": "640a525545aa4334", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-77ede60486c43e8e", "level": "none", "message": {"text": "Commented-code block (9 lines) in tests/unit/agentic-tools/openai-provider.test.ts:16"}, "properties": {"repobilityId": "c8b11ac178915453", "scanner": "scanner-primary", "fingerprint": "77ede60486c43e8e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52c71ad754b28efc", "level": "note", "message": {"text": "Legacy-named symbol `database_schema_v2` in tests/unit/agentic-tools/prompt-processor.test.ts:84"}, "properties": {"repobilityId": "8cf3f7cd08e55626", "scanner": "scanner-primary", "fingerprint": "52c71ad754b28efc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e3d2efd5079d165f", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/helpers/setup.ts:5"}, "properties": {"repobilityId": "510aabe892552ae3", "scanner": "scanner-primary", "fingerprint": "e3d2efd5079d165f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4e286d3860cdde6", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/tools/httpbin/import.ts:324"}, "properties": {"repobilityId": "96aad56678a73804", "scanner": "scanner-primary", "fingerprint": "f4e286d3860cdde6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76e350eb8077b5bf", "level": "none", "message": {"text": "Commented-code block (5 lines) in .claude/skills/skill-creator/scripts/improve_description.py:158"}, "properties": {"repobilityId": "066556eb300d7b27", "scanner": "scanner-primary", "fingerprint": "76e350eb8077b5bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd232cae9e3f611a", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 .claude/skills/skill-creator/scripts/run_eval.py:85"}, "properties": {"repobilityId": "59ac59c16c85316c", "scanner": "scanner-primary", "fingerprint": "fd232cae9e3f611a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c221105bd2c56652", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/components/ui/side-panel.tsx:56"}, "properties": {"repobilityId": "0ad20084c6e7b6cf", "scanner": "scanner-primary", "fingerprint": "c221105bd2c56652", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-127e7cf15f82d35a", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/components/ui/modal.tsx:59"}, "properties": {"repobilityId": "3c5dac9108f36eed", "scanner": "scanner-primary", "fingerprint": "127e7cf15f82d35a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-28a1c6633a9be0dd", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/features/integrations/IntegrationFieldMappingsTab.tsx:25"}, "properties": {"repobilityId": "43e324c2bdcb3b80", "scanner": "scanner-primary", "fingerprint": "28a1c6633a9be0dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ec9e14fbc995f8a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/features/integrations/IntegrationDetail.tsx:200"}, "properties": {"repobilityId": "07c1ca7a77e02523", "scanner": "scanner-primary", "fingerprint": "0ec9e14fbc995f8a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0187a70a233cc50f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/features/integrations/wizard/StepConfigureAuth.tsx:585"}, "properties": {"repobilityId": "f3be4a3ce3785853", "scanner": "scanner-primary", "fingerprint": "0187a70a233cc50f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-85cf5aefb7479c3d", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/features/settings/MetaAiSection.tsx:6"}, "properties": {"repobilityId": "d4dcd34355c4a3d2", "scanner": "scanner-primary", "fingerprint": "85cf5aefb7479c3d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-374914c1321ad55f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/features/settings/LlmManagementSection.tsx:3"}, "properties": {"repobilityId": "3b7ebeb7ad4ffb6f", "scanner": "scanner-primary", "fingerprint": "374914c1321ad55f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4bf21ee50d64d142", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/features/settings/ToolAiSection.tsx:129"}, "properties": {"repobilityId": "48b25ea1c27f3370", "scanner": "scanner-primary", "fingerprint": "4bf21ee50d64d142", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2e6197a4e27ba567", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/features/pipelines/PipelineDashboard.tsx:113"}, "properties": {"repobilityId": "2249e537100b0ec1", "scanner": "scanner-primary", "fingerprint": "2e6197a4e27ba567", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-30a1b247b916ad48", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/components/features/actions/ActionEditor.tsx:344"}, "properties": {"repobilityId": "e7dbd494f118140b", "scanner": "scanner-primary", "fingerprint": "30a1b247b916ad48", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2791b1f299cc4d52", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/features/actions/ActionTester.tsx:114"}, "properties": {"repobilityId": "648b4d805af48c84", "scanner": "scanner-primary", "fingerprint": "2791b1f299cc4d52", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-41736804b5e7832d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/features/actions/ActionTester.tsx:119"}, "properties": {"repobilityId": "7e9e2621c890b12a", "scanner": "scanner-primary", "fingerprint": "41736804b5e7832d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-91cdb20a31e58790", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/features/actions/editor/PaginationSettings.tsx:221"}, "properties": {"repobilityId": "fb3bafb33fc3c3d0", "scanner": "scanner-primary", "fingerprint": "91cdb20a31e58790", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-85509b5de59993b3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/features/agentic-tools/AgenticToolDetail.tsx:16"}, "properties": {"repobilityId": "8584526922b68ac8", "scanner": "scanner-primary", "fingerprint": "85509b5de59993b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e3bbb7182076a32", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/features/agentic-tools/wizard/StepLLMConfig.tsx:39"}, "properties": {"repobilityId": "6d41bb0d08414617", "scanner": "scanner-primary", "fingerprint": "6e3bbb7182076a32", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-505d4440c89eeab7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/features/ai-tools/AIToolDashboard.tsx:386"}, "properties": {"repobilityId": "45870e1c5eef4bb3", "scanner": "scanner-primary", "fingerprint": "505d4440c89eeab7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-efa5168b8b780086", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/features/ai-tools/installs/InstallList.tsx:21"}, "properties": {"repobilityId": "ef34c991fbccab12", "scanner": "scanner-primary", "fingerprint": "efa5168b8b780086", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75abc9b4f5e14fee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/features/ai-tools/installs/snippets.ts:100"}, "properties": {"repobilityId": "5883ee6ac3cf3544", "scanner": "scanner-primary", "fingerprint": "75abc9b4f5e14fee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1e00744818d7f425", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/features/ai-tools/installs/InstallDetail.tsx:142"}, "properties": {"repobilityId": "cbea52ab21cd5c82", "scanner": "scanner-primary", "fingerprint": "1e00744818d7f425", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e72093cb028f19b3", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/features/ai-tools/tabs/ToolsActionsTab.tsx:188"}, "properties": {"repobilityId": "804850b274b6ee71", "scanner": "scanner-primary", "fingerprint": "e72093cb028f19b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc158c9b5ec858ad", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/features/ai-tools/tabs/ExportTab.tsx:202"}, "properties": {"repobilityId": "ca988df907321846", "scanner": "scanner-primary", "fingerprint": "bc158c9b5ec858ad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6dda48c0f6f3c551", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/docs/guides/pagination/page.tsx:48"}, "properties": {"repobilityId": "456d410b2ae03f3f", "scanner": "scanner-primary", "fingerprint": "6dda48c0f6f3c551", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1d2fff2af4dbb2cf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/api/client.ts:77"}, "properties": {"repobilityId": "fa3eea5178ccfe14", "scanner": "scanner-primary", "fingerprint": "1d2fff2af4dbb2cf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8f0b701cbfdcec4b", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/api/middleware/auth.ts:207"}, "properties": {"repobilityId": "39e7b9b60d8beefe", "scanner": "scanner-primary", "fingerprint": "8f0b701cbfdcec4b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-151bf0d603896625", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/modules/integrations/integration.service.ts:220"}, "properties": {"repobilityId": "0861fcc53a2d8844", "scanner": "scanner-primary", "fingerprint": "151bf0d603896625", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc23b511e79a383b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/modules/composite-tools/composite-tool.service.ts:334"}, "properties": {"repobilityId": "e92c94cabba1b3ce", "scanner": "scanner-primary", "fingerprint": "bc23b511e79a383b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-62cabaaad5a89913", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/modules/composite-tools/handlers/invocation-handler.ts:311"}, "properties": {"repobilityId": "24c80c1fd3cfa093", "scanner": "scanner-primary", "fingerprint": "62cabaaad5a89913", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-95a4f7448126d885", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/composite-tools/export/composite-tool.transformer.ts:522"}, "properties": {"repobilityId": "fad375c97c34387a", "scanner": "scanner-primary", "fingerprint": "95a4f7448126d885", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c3baebff2df2ea5a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/modules/auto-maintenance/description-cascade.ts:169"}, "properties": {"repobilityId": "89d2402fe9fd098c", "scanner": "scanner-primary", "fingerprint": "c3baebff2df2ea5a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-67a0d297f99d94c4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/modules/auto-maintenance/auto-maintenance.service.ts:360"}, "properties": {"repobilityId": "9ddfd348c7c4d5fa", "scanner": "scanner-primary", "fingerprint": "67a0d297f99d94c4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6726d02fd8f6778", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/modules/auto-maintenance/schema-inference.ts:521"}, "properties": {"repobilityId": "010eb3901c2b9a2f", "scanner": "scanner-primary", "fingerprint": "c6726d02fd8f6778", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5d8e4262a90db562", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/modules/ai/scrape-job.service.ts:942"}, "properties": {"repobilityId": "c73d038e6c40c0fd", "scanner": "scanner-primary", "fingerprint": "5d8e4262a90db562", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-963220ea841bce4a", "level": "note", "message": {"text": "Legacy-named symbol `includeDeprecated` in src/lib/modules/ai/action-generator.ts:180"}, "properties": {"repobilityId": "611bedbc88b360ba", "scanner": "scanner-primary", "fingerprint": "963220ea841bce4a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-60bc8199a44269b7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/ai/action-generator.ts:124"}, "properties": {"repobilityId": "391fd95e9472e031", "scanner": "scanner-primary", "fingerprint": "60bc8199a44269b7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0908cd1eab730627", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/modules/ai/llm/providers/openai.ts:119"}, "properties": {"repobilityId": "78b8c2b5de67eec2", "scanner": "scanner-primary", "fingerprint": "0908cd1eab730627", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-86c4c1e4e02f5459", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/auth/oauth-providers/generic.ts:102"}, "properties": {"repobilityId": "3ee7f22ed92f52b9", "scanner": "scanner-primary", "fingerprint": "86c4c1e4e02f5459", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3c6448d2f77938db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/auth/oauth-providers/base.ts:164"}, "properties": {"repobilityId": "7a258885bd6c8255", "scanner": "scanner-primary", "fingerprint": "3c6448d2f77938db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b6efbb6f6dea4083", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/modules/pipelines/pipeline.service.ts:337"}, "properties": {"repobilityId": "bfac42597b3af32d", "scanner": "scanner-primary", "fingerprint": "b6efbb6f6dea4083", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-746f811e4bd5808c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/pipelines/export/pipeline.transformer.ts:325"}, "properties": {"repobilityId": "92afb3854002e453", "scanner": "scanner-primary", "fingerprint": "746f811e4bd5808c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e2624e3af58ffc28", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/execution/retry.ts:207"}, "properties": {"repobilityId": "5de63b1acdfeb648", "scanner": "scanner-primary", "fingerprint": "e2624e3af58ffc28", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ca19962e870c6b14", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/execution/http-client.ts:284"}, "properties": {"repobilityId": "e009f5a9bdef2890", "scanner": "scanner-primary", "fingerprint": "ca19962e870c6b14", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b72061eaefc7e771", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/modules/execution/execution.service.ts:401"}, "properties": {"repobilityId": "60fa6058b76575fe", "scanner": "scanner-primary", "fingerprint": "b72061eaefc7e771", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fd832020bccdae6d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/execution/pagination/pagination.schemas.ts:49"}, "properties": {"repobilityId": "a3e6cf7649cb595e", "scanner": "scanner-primary", "fingerprint": "fd832020bccdae6d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b84d48e365f92f2a", "level": "note", "message": {"text": "Legacy-named symbol `includeDeprecated` in src/lib/modules/actions/persist-from-scraper.ts:32"}, "properties": {"repobilityId": "e96aea7cb2ac4083", "scanner": "scanner-primary", "fingerprint": "b84d48e365f92f2a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e7daefca12eeb28c", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/modules/actions/persist-from-scraper.ts:195"}, "properties": {"repobilityId": "e3d55236aaab6702", "scanner": "scanner-primary", "fingerprint": "e7daefca12eeb28c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d164c5dcd11fc932", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/modules/tool-export/tool-export.service.ts:689"}, "properties": {"repobilityId": "5a1064275a8cb299", "scanner": "scanner-primary", "fingerprint": "d164c5dcd11fc932", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-33ad2bb717a70a94", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/tool-export/tool-export.service.ts:1058"}, "properties": {"repobilityId": "f45f06e278a26821", "scanner": "scanner-primary", "fingerprint": "33ad2bb717a70a94", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0ee89a63aa4d2183", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/tool-export/formats/langchain.transformer.ts:257"}, "properties": {"repobilityId": "af132779dbd78b83", "scanner": "scanner-primary", "fingerprint": "0ee89a63aa4d2183", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f185df077ef4feaa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/tool-export/formats/mcp.transformer.ts:405"}, "properties": {"repobilityId": "33a0854f5dcba350", "scanner": "scanner-primary", "fingerprint": "f185df077ef4feaa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cfca1d5b6d887d97", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/modules/gateway/gateway.service.ts:289"}, "properties": {"repobilityId": "94ac0e643535cb74", "scanner": "scanner-primary", "fingerprint": "cfca1d5b6d887d97", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e5bc30f68645d043", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/modules/versions/adapters/pipeline.adapter.ts:275"}, "properties": {"repobilityId": "b79d23bc5e0f54f0", "scanner": "scanner-primary", "fingerprint": "e5bc30f68645d043", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1bcf1e19bd5899e", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/modules/installs/install.service.ts:647"}, "properties": {"repobilityId": "f268e421ac93f631", "scanner": "scanner-primary", "fingerprint": "a1bcf1e19bd5899e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3c948fcee89f6cc0", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/modules/installs/manifest-resolver.ts:135"}, "properties": {"repobilityId": "efad2433c0f30f8e", "scanner": "scanner-primary", "fingerprint": "3c948fcee89f6cc0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-36843a5f33f8120f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/agentic-tools/tracing/opentelemetry-adapter.ts:293"}, "properties": {"repobilityId": "db929217f9cacf66", "scanner": "scanner-primary", "fingerprint": "36843a5f33f8120f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-00c7db5f5a918eda", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/agentic-tools/tracing/langsmith-adapter.ts:211"}, "properties": {"repobilityId": "6d79fc3ba82a0eae", "scanner": "scanner-primary", "fingerprint": "00c7db5f5a918eda", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6c1e60ca1a571533", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/modules/agentic-tools/export/agentic-tool.transformer.ts:456"}, "properties": {"repobilityId": "e19f1958cac1132a", "scanner": "scanner-primary", "fingerprint": "6c1e60ca1a571533", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ac051e838d42284f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/modules/jobs/jobs.queue.ts:212"}, "properties": {"repobilityId": "9ff89c1114c00660", "scanner": "scanner-primary", "fingerprint": "ac051e838d42284f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-14bc45ef6f3b61db", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/modules/jobs/jobs.worker.ts:175"}, "properties": {"repobilityId": "2fb574470aee4fd1", "scanner": "scanner-primary", "fingerprint": "14bc45ef6f3b61db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73a47f3a42dcb820", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/modules/credentials/credential.service.ts:429"}, "properties": {"repobilityId": "5645888c40301df1", "scanner": "scanner-primary", "fingerprint": "73a47f3a42dcb820", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-02105e39e99a7552", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/db/supabase.ts:3"}, "properties": {"repobilityId": "1b734ee8098d0640", "scanner": "scanner-primary", "fingerprint": "02105e39e99a7552", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-65df07ab4020db79", "level": "note", "message": {"text": "18 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "5e334d56f52c02e1", "scanner": "scanner-primary", "fingerprint": "65df07ab4020db79", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-b74ebc939472de3b", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/actions/${integration.slug}/${action.slug} (src/components/features/actions/ActionTester.tsx:119)"}, "properties": {"repobilityId": "c05258e9137ed55e", "scanner": "scanner-primary", "fingerprint": "b74ebc939472de3b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-14873b92929fc555", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/agentic-tools/${tool.id}/test-prompt (src/components/features/agentic-tools/AgenticToolDetail.tsx:53)"}, "properties": {"repobilityId": "c5d73c5f40b2340f", "scanner": "scanner-primary", "fingerprint": "14873b92929fc555", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1e2a97cb3be9e3a0", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/connect/authorize (src/app/connect/[token]/ConnectPageClient.tsx:41)"}, "properties": {"repobilityId": "268a9ec86547d312", "scanner": "scanner-primary", "fingerprint": "1e2a97cb3be9e3a0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2bcf5f77206e2646", "level": "error", "message": {"text": "Dangling fetch: POST /api/v1/integrations/${integrationId}/oauth/callback (src/app/(dashboard)/integrations/[id]/connect/page.tsx:57)"}, "properties": {"repobilityId": "e2124139cde74d93", "scanner": "scanner-primary", "fingerprint": "2bcf5f77206e2646", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-77895f88e925a19e", "level": "error", "message": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/map (src/lib/modules/ai/intelligent-crawler.ts:220)"}, "properties": {"repobilityId": "cb1f59f16023d9e6", "scanner": "scanner-primary", "fingerprint": "77895f88e925a19e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-240b79dde5f9607e", "level": "error", "message": {"text": "Dangling fetch: POST https://api.firecrawl.dev/v1/scrape (src/lib/modules/ai/doc-scraper.ts:279)"}, "properties": {"repobilityId": "b69951c7bc0c6ad6", "scanner": "scanner-primary", "fingerprint": "240b79dde5f9607e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0e974ccc2d24747d", "level": "note", "message": {"text": "Unused endpoint: PATCH /settings/profile"}, "properties": {"repobilityId": "1ae44cad0e7184f9", "scanner": "scanner-primary", "fingerprint": "0e974ccc2d24747d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-64ac814caed3351b", "level": "note", "message": {"text": "Unused endpoint: PATCH /settings/notifications"}, "properties": {"repobilityId": "f10cbbbbfd79d4ac", "scanner": "scanner-primary", "fingerprint": "64ac814caed3351b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}