{"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-7dd2eaa9b9d3d3c9", "name": "Stray `console.log` in TS/JS \u2014 test_scheduling_v2.js:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test_scheduling_v2.js:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d6d4516a11794f8f", "name": "Stray `console.log` in TS/JS \u2014 check-latest-bot.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 check-latest-bot.js:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e0321fdc65d36838", "name": "Stray `console.log` in TS/JS \u2014 generate_embeddings_v2.js:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 generate_embeddings_v2.js:23"}, "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-f40c6e559d56231c", "name": "Stray `console.log` in TS/JS \u2014 add_stock.js:19", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 add_stock.js:19"}, "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-2cb82193d9d55afe", "name": "Stray `console.log` in TS/JS \u2014 verify_bots.js:15", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 verify_bots.js:15"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2ad353069b47ce60", "name": "Stray `console.log` in TS/JS \u2014 check_recarga.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 check_recarga.js:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7d80738e381f6cfd", "name": "Stray `console.log` in TS/JS \u2014 check_boter_detailed.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 check_boter_detailed.js:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5a16946f8e6d8f75", "name": "Stray `console.log` in TS/JS \u2014 test_chat_integration.js:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test_chat_integration.js:21"}, "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-c6069d5728c1e97a", "name": "Stray `console.log` in TS/JS \u2014 initialize-indexes.js:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 initialize-indexes.js:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-70636cc2a77176ae", "name": "Stray `console.log` in TS/JS \u2014 delete_dupes.js:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 delete_dupes.js:27"}, "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-0e98758ad95d2d13", "name": "Stray `console.log` in TS/JS \u2014 test-openai-api.js:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test-openai-api.js:24"}, "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-d9c5c45938f3297b", "name": "Stray `console.log` in TS/JS \u2014 check-chatbot-openai.js:6", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 check-chatbot-openai.js:6"}, "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-5e4fbd5613e1887e", "name": "Stray `console.log` in TS/JS \u2014 check-conversations.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 check-conversations.js:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b50243ac8e8aa4bb", "name": "Stray `console.log` in TS/JS \u2014 test_product_search.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test_product_search.js:16"}, "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-69492c769072dc88", "name": "Stray `console.log` in TS/JS \u2014 generate_embeddings_v3.js:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 generate_embeddings_v3.js:25"}, "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-1b693ba4a685aad0", "name": "Stray `console.log` in TS/JS \u2014 load_products.js:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 load_products.js: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-1a0ee707daeddf54", "name": "Stray `console.log` in TS/JS \u2014 server.js:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server.js:38"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d66788c6905e1de6", "name": "Stray `console.log` in TS/JS \u2014 check_embeddings.js:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 check_embeddings.js:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c1bf4c067c5b4250", "name": "Stray `console.log` in TS/JS \u2014 test-api-direct.js:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test-api-direct.js:32"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4706f1ef497bf82b", "name": "Stray `console.log` in TS/JS \u2014 test-auth.js:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test-auth.js:17"}, "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-3a88d794a0f80b05", "name": "Stray `console.log` in TS/JS \u2014 check-chatbot.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 check-chatbot.js:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0df6566dca59181d", "name": "Stray `console.log` in TS/JS \u2014 test_scheduling.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test_scheduling.js:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fcd3d9ea40491842", "name": "Stray `console.log` in TS/JS \u2014 test_chat_complete.js:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test_chat_complete.js:21"}, "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-fed8ad97c46e7b1c", "name": "Stray `console.log` in TS/JS \u2014 generate_embeddings.js:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 generate_embeddings.js:23"}, "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-8df51fe73cc17d3e", "name": "Stray `console.log` in TS/JS \u2014 check_boter.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 check_boter.js:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b7106ea980c85c49", "name": "Stray `console.log` in TS/JS \u2014 debug_days.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 debug_days.js:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f1c5fceb28959f4f", "name": "Stray `console.log` in TS/JS \u2014 test_fulltext_search.js:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test_fulltext_search.js:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cde52392c20b2a7e", "name": "Stray `console.log` in TS/JS \u2014 test_conversations.js:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test_conversations.js:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-afec7d951d187a80", "name": "Stray `console.log` in TS/JS \u2014 check_products.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 check_products.js:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e5bb80426611ccba", "name": "Stray `console.log` in TS/JS \u2014 find_chatbot.js:14", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 find_chatbot.js:14"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eab232981f80d0bf", "name": "Stray `console.log` in TS/JS \u2014 load_products_to_chatbot.js:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 load_products_to_chatbot.js: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-b523eb4d2369eec5", "name": "Stray `console.log` in TS/JS \u2014 test_chat_debug.js:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test_chat_debug.js:10"}, "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-074636e51ad03e68", "name": "Stray `console.log` in TS/JS \u2014 test_specific_conversation.js:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test_specific_conversation.js:12"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-726080634cf7a559", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed.js:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3dc965c97a789083", "name": "Stray `console.log` in TS/JS \u2014 utils/logger.js:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 utils/logger.js:69"}, "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-d124835ab0af7458", "name": "Stray `console.log` in TS/JS \u2014 controllers/auth/auth.controller.js:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 controllers/auth/auth.controller.js:57"}, "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-ede397c05444c964", "name": "TODO/FIXME marker in shipping code \u2014 controllers/quotes/quote.controller.js:149", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 controllers/quotes/quote.controller.js:149"}, "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-a232c5fe43eccbe5", "name": "Stray `console.log` in TS/JS \u2014 controllers/quotes/quote.controller.js:117", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 controllers/quotes/quote.controller.js:117"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-df8366ac2b0429d9", "name": "Stray `console.log` in TS/JS \u2014 controllers/documents/document.controller.js:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 controllers/documents/document.controller.js:24"}, "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-d9a92b1ad8c549e3", "name": "Stray `console.log` in TS/JS \u2014 controllers/chatbots/chatbot.controller.js:182", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 controllers/chatbots/chatbot.controller.js:182"}, "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-51f95733f3fad1ac", "name": "Stray `console.log` in TS/JS \u2014 libs/mongoose.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 libs/mongoose.js:16"}, "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-778d90f9a2ef7c88", "name": "Stray `console.log` in TS/JS \u2014 services/rag/advanced-rag.service.js:198", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/rag/advanced-rag.service.js:198"}, "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-4a8ea4cc10ec79d3", "name": "Stray `console.log` in TS/JS \u2014 services/messaging/social.service.js:154", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/messaging/social.service.js:154"}, "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-963d265282016c10", "name": "Stray `console.log` in TS/JS \u2014 services/integrations/integration.service.js:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/integrations/integration.service.js:25"}, "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-d0bdf37ccb201743", "name": "Stray `console.log` in TS/JS \u2014 services/integrations/shopify-webhook.service.js:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/integrations/shopify-webhook.service.js:49"}, "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-cac71b0ace6b7edb", "name": "TODO/FIXME marker in shipping code \u2014 services/leads/lead.service.js:151", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 services/leads/lead.service.js:151"}, "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-eead1bc600582df4", "name": "TODO/FIXME marker in shipping code \u2014 services/webhooks/webhook.service.js:93", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 services/webhooks/webhook.service.js:93"}, "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-0416a8e4071655f1", "name": "Stray `console.log` in TS/JS \u2014 services/appointments/appointment.service.js:156", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/appointments/appointment.service.js:156"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-76e085ff19cb2851", "name": "Stray `console.log` in TS/JS \u2014 services/queue/sync-processor.js:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/queue/sync-processor.js:9"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bbdbd59700d9a01c", "name": "Stray `console.log` in TS/JS \u2014 services/queue/queue.service.js:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/queue/queue.service.js:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-378fb625918e03af", "name": "TODO/FIXME marker in shipping code \u2014 services/quotes/quote.service.js:95", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 services/quotes/quote.service.js:95"}, "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-a65a615d4cd5c376", "name": "TODO/FIXME marker in shipping code \u2014 services/embed/embed.service.js:308", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 services/embed/embed.service.js:308"}, "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-3247a6543899a998", "name": "Stray `console.log` in TS/JS \u2014 services/embed/embed.service.js:346", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/embed/embed.service.js: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-7f59f60727d4e7f4", "name": "Stray `console.log` in TS/JS \u2014 services/calendar/calendar.service.js:128", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/calendar/calendar.service.js:128"}, "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-1abd0d00cd93f1aa", "name": "Stray `console.log` in TS/JS \u2014 services/notifications/email.service.js:23", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/notifications/email.service.js:23"}, "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-25339cd3696c409f", "name": "Stray `console.log` in TS/JS \u2014 services/products/product.service.js:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/products/product.service.js:33"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6cbcf73e94dbe609", "name": "Stray `console.log` in TS/JS \u2014 services/documents/document.processor.js:142", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/documents/document.processor.js:142"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1f120ddcdb7133d2", "name": "TODO/FIXME marker in shipping code \u2014 services/documents/auto-processing.service.js:123", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 services/documents/auto-processing.service.js:123"}, "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-0081432c7afd9d56", "name": "Stray `console.log` in TS/JS \u2014 services/chatbots/chatbot.service.js:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 services/chatbots/chatbot.service.js:18"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-927d3d9ee15b6434", "name": "Stray `console.log` in TS/JS \u2014 config/container.js:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 config/container.js:39"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e8396887bf476867", "name": "TODO/FIXME marker in shipping code \u2014 routes/auth/authRoutes.js:26", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 routes/auth/authRoutes.js:26"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-11772faa5985c659", "name": "Insecure pattern 'cors_wildcard' in server.js:49", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in server.js:49"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7d81ce6f6acedf5a", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/chat-larufina.html:734", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/chat-larufina.html:734"}, "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-c3cf556326d26d8b", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/gpt-imfluid.html:636", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/gpt-imfluid.html:636"}, "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-eff366177d644789", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/chat-imfluid.html:734", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/chat-imfluid.html:734"}, "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-00ed4a495b97c6a0", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/gpt-larufina.html:636", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/gpt-larufina.html:636"}, "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-b1a7cf6d1372fe0d", "name": "Very large file: services/embed/embed.service.js (1990 lines)", "shortDescription": {"text": "Very large file: services/embed/embed.service.js (1990 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": "36 tests / 170 src (ratio 0.21)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 469 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 13 placeholder/mock markers across 5 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-182307a87c3fa399", "name": "`fetch()` without try/.catch or AbortSignal \u2014 final-comprehensive-test.mjs:60", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 final-comprehensive-test.mjs:60"}, "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-4303e14c0e94129e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 controllers/auth/google-oauth.controller.js:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 controllers/auth/google-oauth.controller.js:62"}, "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-7fd507541f43fdbb", "name": "Legacy-named symbol `daysOld` in services/rag/ranking.service.js:107", "shortDescription": {"text": "Legacy-named symbol `daysOld` in services/rag/ranking.service.js:107"}, "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-e310395b096b98e8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 services/integrations/woocommerce-sync.service.js:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/integrations/woocommerce-sync.service.js:65"}, "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-269acd438c23f3c2", "name": "Commented-code block (16 lines) in services/embed/embed.service.js:307", "shortDescription": {"text": "Commented-code block (16 lines) in services/embed/embed.service.js:307"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ffa37e79dd5b23c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 services/embed/embed.service.js:1933", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/embed/embed.service.js:1933"}, "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-d93c7f4f5f3a1f54", "name": "Commented-code block (6 lines) in services/documents/auto-processing.service.js:123", "shortDescription": {"text": "Commented-code block (6 lines) in services/documents/auto-processing.service.js:123"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d6ffa20a9f1093b", "name": "24 env vars used in code but missing from .env.example", "shortDescription": {"text": "24 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `API_URL`, `BACKEND_URL`, `ENCRYPTION_KEY`, `FRONTEND_URL`, `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET`, `INSTAGRAM_VERIFY_TOKEN`, `JWT_REFRESH_SECRET` + 16 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-1aeca5acd42cfca3", "name": "Dangling fetch: GET /api/workspaces/${wsId}/chatbots/${botId}/openai-config (final-comprehensive-test.mjs:60)", "shortDescription": {"text": "Dangling fetch: GET /api/workspaces/${wsId}/chatbots/${botId}/openai-config (final-comprehensive-test.mjs:60)"}, "fullDescription": {"text": "`final-comprehensive-test.mjs:60` calls `GET /api/workspaces/${wsId}/chatbots/${botId}/openai-config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/workspaces/<p>/chatbots/<p>/openai-config`\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-7d0b8ee4d79d63ec", "name": "Dangling fetch: POST https://${shop}/admin/oauth/access_token (controllers/auth/shopify-oauth.controller.js:57)", "shortDescription": {"text": "Dangling fetch: POST https://${shop}/admin/oauth/access_token (controllers/auth/shopify-oauth.controller.js:57)"}, "fullDescription": {"text": "`controllers/auth/shopify-oauth.controller.js:57` calls `POST https://${shop}/admin/oauth/access_token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/<p>/admin/oauth/access_token`\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-3bac6b43d15fcbc4", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (controllers/auth/google-oauth.controller.js:43)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (controllers/auth/google-oauth.controller.js:43)"}, "fullDescription": {"text": "`controllers/auth/google-oauth.controller.js:43` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\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-0edf1b13c2bf3a59", "name": "Dangling fetch: GET https://www.googleapis.com/oauth2/v3/userinfo (controllers/auth/google-oauth.controller.js:62)", "shortDescription": {"text": "Dangling fetch: GET https://www.googleapis.com/oauth2/v3/userinfo (controllers/auth/google-oauth.controller.js:62)"}, "fullDescription": {"text": "`controllers/auth/google-oauth.controller.js:62` calls `GET https://www.googleapis.com/oauth2/v3/userinfo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.googleapis.com/oauth2/v3/userinfo`\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-f7f9b75bda0e5c86", "name": "Dangling fetch: POST https://graph.instagram.com/v18.0/${instagramBusinessAccountId}/messages (services/messaging/social", "shortDescription": {"text": "Dangling fetch: POST https://graph.instagram.com/v18.0/${instagramBusinessAccountId}/messages (services/messaging/social.service.js:186)"}, "fullDescription": {"text": "`services/messaging/social.service.js:186` calls `POST https://graph.instagram.com/v18.0/${instagramBusinessAccountId}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/graph.instagram.com/v18.0/<p>/messages`\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-01593bb39e83f72e", "name": "Dangling fetch: POST https://${shopifyStore}/admin/api/2024-01/graphql.json (services/integrations/shopify-webhook.servi", "shortDescription": {"text": "Dangling fetch: POST https://${shopifyStore}/admin/api/2024-01/graphql.json (services/integrations/shopify-webhook.service.js:16)"}, "fullDescription": {"text": "`services/integrations/shopify-webhook.service.js:16` calls `POST https://${shopifyStore}/admin/api/2024-01/graphql.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: axios\nNormalized path used for matching: `/https:/<p>/admin/api/2024-01/graphql.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0205899c45bd0514", "name": "Dangling fetch: POST https://api.openai.com/v1/realtime/sessions (services/embed/embed.service.js:1933)", "shortDescription": {"text": "Dangling fetch: POST https://api.openai.com/v1/realtime/sessions (services/embed/embed.service.js:1933)"}, "fullDescription": {"text": "`services/embed/embed.service.js:1933` calls `POST https://api.openai.com/v1/realtime/sessions` 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.openai.com/v1/realtime/sessions`\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-fd55aa0818a7c897", "name": "Unused endpoint: POST /api/auth/login", "shortDescription": {"text": "Unused endpoint: POST /api/auth/login"}, "fullDescription": {"text": "`test-openai-api.js` declares `POST /api/auth/login` 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-a53dc2f6188e2f64", "name": "Unused endpoint: USE /api/embed", "shortDescription": {"text": "Unused endpoint: USE /api/embed"}, "fullDescription": {"text": "`server.js` declares `USE /api/embed` 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-1bc898b3b7565990", "name": "Unused endpoint: USE /uploads", "shortDescription": {"text": "Unused endpoint: USE /uploads"}, "fullDescription": {"text": "`server.js` declares `USE /uploads` 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-ed523761442e1550", "name": "Unused endpoint: USE /chat", "shortDescription": {"text": "Unused endpoint: USE /chat"}, "fullDescription": {"text": "`server.js` declares `USE /chat` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6eb452fbfb454d20", "name": "Unused endpoint: USE /api/auth", "shortDescription": {"text": "Unused endpoint: USE /api/auth"}, "fullDescription": {"text": "`server.js` declares `USE /api/auth` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-203ec659ed8ada77", "name": "Unused endpoint: USE /api/webhooks", "shortDescription": {"text": "Unused endpoint: USE /api/webhooks"}, "fullDescription": {"text": "`server.js` declares `USE /api/webhooks` 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-8b34dbe0f2b33813", "name": "Unused endpoint: USE /api/messaging", "shortDescription": {"text": "Unused endpoint: USE /api/messaging"}, "fullDescription": {"text": "`server.js` declares `USE /api/messaging` 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-aebdad2655c302c7", "name": "Unused endpoint: USE /api/calendar", "shortDescription": {"text": "Unused endpoint: USE /api/calendar"}, "fullDescription": {"text": "`server.js` declares `USE /api/calendar` 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-1f1af875ae07230b", "name": "Unused endpoint: USE /api/quotes", "shortDescription": {"text": "Unused endpoint: USE /api/quotes"}, "fullDescription": {"text": "`server.js` declares `USE /api/quotes` 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-5a5888717dcee7dc", "name": "Unused endpoint: USE /api/workspaces", "shortDescription": {"text": "Unused endpoint: USE /api/workspaces"}, "fullDescription": {"text": "`server.js` declares `USE /api/workspaces` 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-151cc2768378c7e0", "name": "Unused endpoint: USE /api/workspaces/:workspaceId/chatbots/:chatbotId/resources", "shortDescription": {"text": "Unused endpoint: USE /api/workspaces/:workspaceId/chatbots/:chatbotId/resources"}, "fullDescription": {"text": "`server.js` declares `USE /api/workspaces/:workspaceId/chatbots/:chatbotId/resources` 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-640ef5bcda674a98", "name": "Unused endpoint: USE /api/workspaces/:wsId/appointments", "shortDescription": {"text": "Unused endpoint: USE /api/workspaces/:wsId/appointments"}, "fullDescription": {"text": "`server.js` declares `USE /api/workspaces/:wsId/appointments` 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-c420ad749d22da4c", "name": "Unused endpoint: USE /api/invitations", "shortDescription": {"text": "Unused endpoint: USE /api/invitations"}, "fullDescription": {"text": "`server.js` declares `USE /api/invitations` 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-1439b969fda59272", "name": "Unused endpoint: USE /api/workspaces/:workspaceId/orders", "shortDescription": {"text": "Unused endpoint: USE /api/workspaces/:workspaceId/orders"}, "fullDescription": {"text": "`server.js` declares `USE /api/workspaces/:workspaceId/orders` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d93a530ce10d47d9", "name": "Unused endpoint: USE /api/admin", "shortDescription": {"text": "Unused endpoint: USE /api/admin"}, "fullDescription": {"text": "`server.js` declares `USE /api/admin` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c73e8bea8e1d1368", "name": "Unused endpoint: USE /api/conversations", "shortDescription": {"text": "Unused endpoint: USE /api/conversations"}, "fullDescription": {"text": "`server.js` declares `USE /api/conversations` 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-b90a25f6d5f27707", "name": "Unused endpoint: USE /api/documents", "shortDescription": {"text": "Unused endpoint: USE /api/documents"}, "fullDescription": {"text": "`server.js` declares `USE /api/documents` 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-946dc627de4f272d", "name": "Unused endpoint: USE /api/billing", "shortDescription": {"text": "Unused endpoint: USE /api/billing"}, "fullDescription": {"text": "`server.js` declares `USE /api/billing` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`middlewares/requireFeature.middleware.js` declares `POST /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`routes/config.routes.js` declares `GET /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3298f7335f888758", "name": "Unused endpoint: GET /system-prompt", "shortDescription": {"text": "Unused endpoint: GET /system-prompt"}, "fullDescription": {"text": "`routes/config.routes.js` declares `GET /system-prompt` 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-d467299d5c174fc0", "name": "Unused endpoint: GET /usage", "shortDescription": {"text": "Unused endpoint: GET /usage"}, "fullDescription": {"text": "`routes/billing/billingRoutes.js` declares `GET /usage` 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-f5cae3068724f9d3", "name": "Unused endpoint: GET /plans", "shortDescription": {"text": "Unused endpoint: GET /plans"}, "fullDescription": {"text": "`routes/billing/billingRoutes.js` declares `GET /plans` 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-54d65e3c70a9a584", "name": "Unused endpoint: GET /invoices", "shortDescription": {"text": "Unused endpoint: GET /invoices"}, "fullDescription": {"text": "`routes/billing/billingRoutes.js` declares `GET /invoices` 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-fd2c2c5804f1a2ed", "name": "Unused endpoint: POST /change-plan", "shortDescription": {"text": "Unused endpoint: POST /change-plan"}, "fullDescription": {"text": "`routes/billing/billingRoutes.js` declares `POST /change-plan` 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-c67ddea3c17528d6", "name": "Unused endpoint: GET /subscription", "shortDescription": {"text": "Unused endpoint: GET /subscription"}, "fullDescription": {"text": "`routes/billing/billingRoutes.js` declares `GET /subscription` 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-365f0986d17746b8", "name": "Unused endpoint: POST /subscribe", "shortDescription": {"text": "Unused endpoint: POST /subscribe"}, "fullDescription": {"text": "`routes/billing/billingRoutes.js` declares `POST /subscribe` 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-6b4d3a1c30158c0e", "name": "Unused endpoint: POST /cancel", "shortDescription": {"text": "Unused endpoint: POST /cancel"}, "fullDescription": {"text": "`routes/billing/billingRoutes.js` declares `POST /cancel` 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-23d211e64518ed42", "name": "Unused endpoint: POST /whatsapp/webhook", "shortDescription": {"text": "Unused endpoint: POST /whatsapp/webhook"}, "fullDescription": {"text": "`routes/messaging/socialRoutes.js` declares `POST /whatsapp/webhook` 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-7b8f0a1fa14a5a8c", "name": "Unused endpoint: POST /instagram/webhook", "shortDescription": {"text": "Unused endpoint: POST /instagram/webhook"}, "fullDescription": {"text": "`routes/messaging/socialRoutes.js` declares `POST /instagram/webhook` 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-5fda21a55a32c9b4", "name": "Unused endpoint: GET /instagram/webhook", "shortDescription": {"text": "Unused endpoint: GET /instagram/webhook"}, "fullDescription": {"text": "`routes/messaging/socialRoutes.js` declares `GET /instagram/webhook` 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-408098308bd79c72", "name": "Unused endpoint: GET /chatbots/:chatbotId/integrations/status", "shortDescription": {"text": "Unused endpoint: GET /chatbots/:chatbotId/integrations/status"}, "fullDescription": {"text": "`routes/messaging/socialRoutes.js` declares `GET /chatbots/:chatbotId/integrations/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b63b09f2451699e5", "name": "Unused endpoint: POST /generate-embeddings/:chatbotId", "shortDescription": {"text": "Unused endpoint: POST /generate-embeddings/:chatbotId"}, "fullDescription": {"text": "`routes/admin/adminRoutes.js` declares `POST /generate-embeddings/:chatbotId` 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-361a03ee4318d2c7", "name": "Unused endpoint: GET /top-queries", "shortDescription": {"text": "Unused endpoint: GET /top-queries"}, "fullDescription": {"text": "`routes/admin/rag-metrics.routes.js` declares `GET /top-queries` 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-af12fb64ffb6a158", "name": "Unused endpoint: GET /unanswered", "shortDescription": {"text": "Unused endpoint: GET /unanswered"}, "fullDescription": {"text": "`routes/admin/rag-metrics.routes.js` declares `GET /unanswered` 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-955005a6da85f786", "name": "Unused endpoint: GET /recent", "shortDescription": {"text": "Unused endpoint: GET /recent"}, "fullDescription": {"text": "`routes/admin/rag-metrics.routes.js` declares `GET /recent` 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-ee28295efe247587", "name": "Unused endpoint: GET /global", "shortDescription": {"text": "Unused endpoint: GET /global"}, "fullDescription": {"text": "`routes/admin/rag-metrics.routes.js` declares `GET /global` 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-e686634beeea0bb8", "name": "Unused endpoint: GET /export", "shortDescription": {"text": "Unused endpoint: GET /export"}, "fullDescription": {"text": "`routes/admin/rag-metrics.routes.js` declares `GET /export` 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-a7a776760f85a3e7", "name": "Unused endpoint: POST /reset", "shortDescription": {"text": "Unused endpoint: POST /reset"}, "fullDescription": {"text": "`routes/admin/rag-metrics.routes.js` declares `POST /reset` 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-67d28fa8cd6bb12f", "name": "Unused endpoint: PUT /", "shortDescription": {"text": "Unused endpoint: PUT /"}, "fullDescription": {"text": "`routes/integrations/woocommerceRoutes.js` declares `PUT /` 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-731c57f59aaca553", "name": "Unused endpoint: POST /test", "shortDescription": {"text": "Unused endpoint: POST /test"}, "fullDescription": {"text": "`routes/integrations/woocommerceRoutes.js` declares `POST /test` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fa413208496243a5", "name": "Unused endpoint: POST /sync", "shortDescription": {"text": "Unused endpoint: POST /sync"}, "fullDescription": {"text": "`routes/integrations/woocommerceRoutes.js` declares `POST /sync` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ed261bfa6f398b59", "name": "Unused endpoint: GET /:chatbotId/active", "shortDescription": {"text": "Unused endpoint: GET /:chatbotId/active"}, "fullDescription": {"text": "`routes/integrations/integrationRoutes.js` declares `GET /:chatbotId/active` 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-0c8f22aa4c1cc3a0", "name": "Unused endpoint: POST /chatbots/:chatbotId", "shortDescription": {"text": "Unused endpoint: POST /chatbots/:chatbotId"}, "fullDescription": {"text": "`routes/integrations/integrationRoutes.js` declares `POST /chatbots/:chatbotId` 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-d3d84c0977ddd6d6", "name": "Unused endpoint: DELETE /chatbots/:chatbotId", "shortDescription": {"text": "Unused endpoint: DELETE /chatbots/:chatbotId"}, "fullDescription": {"text": "`routes/integrations/integrationRoutes.js` declares `DELETE /chatbots/:chatbotId` 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-f67ec2d66d92d8a6", "name": "Unused endpoint: POST /:integrationId/sync", "shortDescription": {"text": "Unused endpoint: POST /:integrationId/sync"}, "fullDescription": {"text": "`routes/integrations/integrationRoutes.js` declares `POST /:integrationId/sync` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3300a4de0573e3f4", "name": "Unused endpoint: GET /:integrationId/status", "shortDescription": {"text": "Unused endpoint: GET /:integrationId/status"}, "fullDescription": {"text": "`routes/integrations/integrationRoutes.js` declares `GET /:integrationId/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6bd19678600a66ab", "name": "Unused endpoint: GET /:integrationId/history", "shortDescription": {"text": "Unused endpoint: GET /:integrationId/history"}, "fullDescription": {"text": "`routes/integrations/integrationRoutes.js` declares `GET /:integrationId/history` 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-b674629a15c22251", "name": "Unused endpoint: POST /test-connection", "shortDescription": {"text": "Unused endpoint: POST /test-connection"}, "fullDescription": {"text": "`routes/integrations/integrationRoutes.js` declares `POST /test-connection` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ca5756175765b49d", "name": "Unused endpoint: GET /:id", "shortDescription": {"text": "Unused endpoint: GET /:id"}, "fullDescription": {"text": "`routes/leads/leadRoutes.js` declares `GET /:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/24573"}, "properties": {"repository": "bezpiania/bezpian-backend", "repoUrl": "https://github.com/bezpiania/bezpian-backend", "branch": "main"}, "results": [{"ruleId": "scanner-7dd2eaa9b9d3d3c9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test_scheduling_v2.js:12"}, "properties": {"repobilityId": "318c4a046986263c", "scanner": "scanner-primary", "fingerprint": "7dd2eaa9b9d3d3c9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d6d4516a11794f8f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 check-latest-bot.js:11"}, "properties": {"repobilityId": "863db2e033feceae", "scanner": "scanner-primary", "fingerprint": "d6d4516a11794f8f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e0321fdc65d36838", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 generate_embeddings_v2.js:23"}, "properties": {"repobilityId": "c29359ebc1570e3b", "scanner": "scanner-primary", "fingerprint": "e0321fdc65d36838", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f40c6e559d56231c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 add_stock.js:19"}, "properties": {"repobilityId": "69c66a651a335e29", "scanner": "scanner-primary", "fingerprint": "f40c6e559d56231c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2cb82193d9d55afe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 verify_bots.js:15"}, "properties": {"repobilityId": "04185a1cfae0e71e", "scanner": "scanner-primary", "fingerprint": "2cb82193d9d55afe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2ad353069b47ce60", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 check_recarga.js:11"}, "properties": {"repobilityId": "0a7dd0227cefab9c", "scanner": "scanner-primary", "fingerprint": "2ad353069b47ce60", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7d80738e381f6cfd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 check_boter_detailed.js:13"}, "properties": {"repobilityId": "b6be864702d01f1e", "scanner": "scanner-primary", "fingerprint": "7d80738e381f6cfd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5a16946f8e6d8f75", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test_chat_integration.js:21"}, "properties": {"repobilityId": "12eb22de66403c29", "scanner": "scanner-primary", "fingerprint": "5a16946f8e6d8f75", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c6069d5728c1e97a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 initialize-indexes.js:12"}, "properties": {"repobilityId": "66a163a7582932e4", "scanner": "scanner-primary", "fingerprint": "c6069d5728c1e97a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-70636cc2a77176ae", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 delete_dupes.js:27"}, "properties": {"repobilityId": "c31ef307cd60399a", "scanner": "scanner-primary", "fingerprint": "70636cc2a77176ae", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0e98758ad95d2d13", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test-openai-api.js:24"}, "properties": {"repobilityId": "24b0f2e4ed41cb7d", "scanner": "scanner-primary", "fingerprint": "0e98758ad95d2d13", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d9c5c45938f3297b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 check-chatbot-openai.js:6"}, "properties": {"repobilityId": "6d4393764afd87a8", "scanner": "scanner-primary", "fingerprint": "d9c5c45938f3297b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5e4fbd5613e1887e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 check-conversations.js:9"}, "properties": {"repobilityId": "bb684569d5c19c29", "scanner": "scanner-primary", "fingerprint": "5e4fbd5613e1887e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b50243ac8e8aa4bb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test_product_search.js:16"}, "properties": {"repobilityId": "fd29de14d2e5e483", "scanner": "scanner-primary", "fingerprint": "b50243ac8e8aa4bb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-69492c769072dc88", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 generate_embeddings_v3.js:25"}, "properties": {"repobilityId": "c6b3007c7dfd0eb1", "scanner": "scanner-primary", "fingerprint": "69492c769072dc88", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1b693ba4a685aad0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 load_products.js:30"}, "properties": {"repobilityId": "cb32e8fafd8f252e", "scanner": "scanner-primary", "fingerprint": "1b693ba4a685aad0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1a0ee707daeddf54", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server.js:38"}, "properties": {"repobilityId": "a9deebb5fdc93edc", "scanner": "scanner-primary", "fingerprint": "1a0ee707daeddf54", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d66788c6905e1de6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 check_embeddings.js:18"}, "properties": {"repobilityId": "c2c39a9caa77c763", "scanner": "scanner-primary", "fingerprint": "d66788c6905e1de6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c1bf4c067c5b4250", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test-api-direct.js:32"}, "properties": {"repobilityId": "a19413f5038705b8", "scanner": "scanner-primary", "fingerprint": "c1bf4c067c5b4250", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4706f1ef497bf82b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test-auth.js:17"}, "properties": {"repobilityId": "47b1754582f757b9", "scanner": "scanner-primary", "fingerprint": "4706f1ef497bf82b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3a88d794a0f80b05", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 check-chatbot.js:11"}, "properties": {"repobilityId": "384d0ba84b18b6ee", "scanner": "scanner-primary", "fingerprint": "3a88d794a0f80b05", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0df6566dca59181d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test_scheduling.js:13"}, "properties": {"repobilityId": "3526077d2b72c60a", "scanner": "scanner-primary", "fingerprint": "0df6566dca59181d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fcd3d9ea40491842", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test_chat_complete.js:21"}, "properties": {"repobilityId": "850f16fe942bbfe9", "scanner": "scanner-primary", "fingerprint": "fcd3d9ea40491842", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fed8ad97c46e7b1c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 generate_embeddings.js:23"}, "properties": {"repobilityId": "59a087a24f9b37bd", "scanner": "scanner-primary", "fingerprint": "fed8ad97c46e7b1c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8df51fe73cc17d3e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 check_boter.js:13"}, "properties": {"repobilityId": "fa4994b9031b3a12", "scanner": "scanner-primary", "fingerprint": "8df51fe73cc17d3e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b7106ea980c85c49", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 debug_days.js:11"}, "properties": {"repobilityId": "4763ebc7a2f6013b", "scanner": "scanner-primary", "fingerprint": "b7106ea980c85c49", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f1c5fceb28959f4f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test_fulltext_search.js:12"}, "properties": {"repobilityId": "1909128ac62d894d", "scanner": "scanner-primary", "fingerprint": "f1c5fceb28959f4f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cde52392c20b2a7e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test_conversations.js:12"}, "properties": {"repobilityId": "766434a3bc8736e4", "scanner": "scanner-primary", "fingerprint": "cde52392c20b2a7e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-afec7d951d187a80", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 check_products.js:14"}, "properties": {"repobilityId": "dad12cad09994138", "scanner": "scanner-primary", "fingerprint": "afec7d951d187a80", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e5bb80426611ccba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 find_chatbot.js:14"}, "properties": {"repobilityId": "ae76c211d1a6253f", "scanner": "scanner-primary", "fingerprint": "e5bb80426611ccba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-eab232981f80d0bf", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 load_products_to_chatbot.js:30"}, "properties": {"repobilityId": "d48ec467801bea06", "scanner": "scanner-primary", "fingerprint": "eab232981f80d0bf", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b523eb4d2369eec5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test_chat_debug.js:10"}, "properties": {"repobilityId": "f3aaff8f64c32ac0", "scanner": "scanner-primary", "fingerprint": "b523eb4d2369eec5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-074636e51ad03e68", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test_specific_conversation.js:12"}, "properties": {"repobilityId": "ea001a7012228306", "scanner": "scanner-primary", "fingerprint": "074636e51ad03e68", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-726080634cf7a559", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed.js:11"}, "properties": {"repobilityId": "3da926698a899c06", "scanner": "scanner-primary", "fingerprint": "726080634cf7a559", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3dc965c97a789083", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 utils/logger.js:69"}, "properties": {"repobilityId": "3dae8894bc84e8f9", "scanner": "scanner-primary", "fingerprint": "3dc965c97a789083", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d124835ab0af7458", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 controllers/auth/auth.controller.js:57"}, "properties": {"repobilityId": "2abd81177fd6c17a", "scanner": "scanner-primary", "fingerprint": "d124835ab0af7458", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ede397c05444c964", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 controllers/quotes/quote.controller.js:149"}, "properties": {"repobilityId": "4bd1882d050f084e", "scanner": "scanner-primary", "fingerprint": "ede397c05444c964", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-a232c5fe43eccbe5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 controllers/quotes/quote.controller.js:117"}, "properties": {"repobilityId": "9f48731d1e3daf94", "scanner": "scanner-primary", "fingerprint": "a232c5fe43eccbe5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-df8366ac2b0429d9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 controllers/documents/document.controller.js:24"}, "properties": {"repobilityId": "2a136f364447bd64", "scanner": "scanner-primary", "fingerprint": "df8366ac2b0429d9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d9a92b1ad8c549e3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 controllers/chatbots/chatbot.controller.js:182"}, "properties": {"repobilityId": "4616a4b2dcd34cac", "scanner": "scanner-primary", "fingerprint": "d9a92b1ad8c549e3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-51f95733f3fad1ac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 libs/mongoose.js:16"}, "properties": {"repobilityId": "982d61c4cfcf9fc9", "scanner": "scanner-primary", "fingerprint": "51f95733f3fad1ac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-778d90f9a2ef7c88", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/rag/advanced-rag.service.js:198"}, "properties": {"repobilityId": "e033280bf4d0f446", "scanner": "scanner-primary", "fingerprint": "778d90f9a2ef7c88", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a8ea4cc10ec79d3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/messaging/social.service.js:154"}, "properties": {"repobilityId": "c6c0df7b7b54a252", "scanner": "scanner-primary", "fingerprint": "4a8ea4cc10ec79d3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-963d265282016c10", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/integrations/integration.service.js:25"}, "properties": {"repobilityId": "301462cdcef09733", "scanner": "scanner-primary", "fingerprint": "963d265282016c10", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d0bdf37ccb201743", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/integrations/shopify-webhook.service.js:49"}, "properties": {"repobilityId": "f7f633fc9af2ebd3", "scanner": "scanner-primary", "fingerprint": "d0bdf37ccb201743", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cac71b0ace6b7edb", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 services/leads/lead.service.js:151"}, "properties": {"repobilityId": "abd3e9755015f7d1", "scanner": "scanner-primary", "fingerprint": "cac71b0ace6b7edb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-eead1bc600582df4", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 services/webhooks/webhook.service.js:93"}, "properties": {"repobilityId": "1123839f3f4d216c", "scanner": "scanner-primary", "fingerprint": "eead1bc600582df4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-0416a8e4071655f1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/appointments/appointment.service.js:156"}, "properties": {"repobilityId": "3bffe94887064f25", "scanner": "scanner-primary", "fingerprint": "0416a8e4071655f1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-76e085ff19cb2851", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/queue/sync-processor.js:9"}, "properties": {"repobilityId": "09e0e333cb4d89ae", "scanner": "scanner-primary", "fingerprint": "76e085ff19cb2851", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bbdbd59700d9a01c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/queue/queue.service.js:39"}, "properties": {"repobilityId": "927aabc93a3d0586", "scanner": "scanner-primary", "fingerprint": "bbdbd59700d9a01c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-378fb625918e03af", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 services/quotes/quote.service.js:95"}, "properties": {"repobilityId": "51d129055fbb2a46", "scanner": "scanner-primary", "fingerprint": "378fb625918e03af", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-a65a615d4cd5c376", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 services/embed/embed.service.js:308"}, "properties": {"repobilityId": "739b36981c7979b5", "scanner": "scanner-primary", "fingerprint": "a65a615d4cd5c376", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-3247a6543899a998", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/embed/embed.service.js:346"}, "properties": {"repobilityId": "3e8a0bf8f24aeae7", "scanner": "scanner-primary", "fingerprint": "3247a6543899a998", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7f59f60727d4e7f4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/calendar/calendar.service.js:128"}, "properties": {"repobilityId": "a316c87c2a13eb78", "scanner": "scanner-primary", "fingerprint": "7f59f60727d4e7f4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1abd0d00cd93f1aa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/notifications/email.service.js:23"}, "properties": {"repobilityId": "63b2fd3b86b9df8f", "scanner": "scanner-primary", "fingerprint": "1abd0d00cd93f1aa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-25339cd3696c409f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/products/product.service.js:33"}, "properties": {"repobilityId": "3b9c339bcfebff64", "scanner": "scanner-primary", "fingerprint": "25339cd3696c409f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6cbcf73e94dbe609", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/documents/document.processor.js:142"}, "properties": {"repobilityId": "5c6e7aa550709ba6", "scanner": "scanner-primary", "fingerprint": "6cbcf73e94dbe609", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1f120ddcdb7133d2", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 services/documents/auto-processing.service.js:123"}, "properties": {"repobilityId": "c83276ef3eee533c", "scanner": "scanner-primary", "fingerprint": "1f120ddcdb7133d2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-0081432c7afd9d56", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 services/chatbots/chatbot.service.js:18"}, "properties": {"repobilityId": "f69aec17c91aaf9a", "scanner": "scanner-primary", "fingerprint": "0081432c7afd9d56", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-927d3d9ee15b6434", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 config/container.js:39"}, "properties": {"repobilityId": "a1f2c1431cc11188", "scanner": "scanner-primary", "fingerprint": "927d3d9ee15b6434", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e8396887bf476867", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 routes/auth/authRoutes.js:26"}, "properties": {"repobilityId": "f3b0c30c19333aa5", "scanner": "scanner-primary", "fingerprint": "e8396887bf476867", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-11772faa5985c659", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in server.js:49"}, "properties": {"repobilityId": "0d9bca6c0839725e", "scanner": "scanner-primary", "fingerprint": "11772faa5985c659", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server.js"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-7d81ce6f6acedf5a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/chat-larufina.html:734"}, "properties": {"repobilityId": "ba5697242fd4e5ad", "scanner": "scanner-primary", "fingerprint": "7d81ce6f6acedf5a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/chat-larufina.html"}, "region": {"startLine": 734}}}]}, {"ruleId": "scanner-c3cf556326d26d8b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/gpt-imfluid.html:636"}, "properties": {"repobilityId": "6a76c9f98f6118dd", "scanner": "scanner-primary", "fingerprint": "c3cf556326d26d8b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/gpt-imfluid.html"}, "region": {"startLine": 636}}}]}, {"ruleId": "scanner-eff366177d644789", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/chat-imfluid.html:734"}, "properties": {"repobilityId": "2c9de378c26d8fd7", "scanner": "scanner-primary", "fingerprint": "eff366177d644789", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/chat-imfluid.html"}, "region": {"startLine": 734}}}]}, {"ruleId": "scanner-00ed4a495b97c6a0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/gpt-larufina.html:636"}, "properties": {"repobilityId": "0ee431f4db15b64a", "scanner": "scanner-primary", "fingerprint": "00ed4a495b97c6a0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/gpt-larufina.html"}, "region": {"startLine": 636}}}]}, {"ruleId": "scanner-b1a7cf6d1372fe0d", "level": "note", "message": {"text": "Very large file: services/embed/embed.service.js (1990 lines)"}, "properties": {"repobilityId": "3d6d1d45b50838f9", "scanner": "scanner-primary", "fingerprint": "b1a7cf6d1372fe0d", "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-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "6681afc92ba9d2d6", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "6fe67dec95828963", "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": "475caabdf342d454", "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": "22e922aab09a7157", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "9022577371939063", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-182307a87c3fa399", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 final-comprehensive-test.mjs:60"}, "properties": {"repobilityId": "3fae8c8e1311d176", "scanner": "scanner-primary", "fingerprint": "182307a87c3fa399", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4303e14c0e94129e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 controllers/auth/google-oauth.controller.js:62"}, "properties": {"repobilityId": "2d7e95c2e7ed93a3", "scanner": "scanner-primary", "fingerprint": "4303e14c0e94129e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7fd507541f43fdbb", "level": "note", "message": {"text": "Legacy-named symbol `daysOld` in services/rag/ranking.service.js:107"}, "properties": {"repobilityId": "b17c02a3e58745ef", "scanner": "scanner-primary", "fingerprint": "7fd507541f43fdbb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e310395b096b98e8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/integrations/woocommerce-sync.service.js:65"}, "properties": {"repobilityId": "7f8bb1d2d3019cab", "scanner": "scanner-primary", "fingerprint": "e310395b096b98e8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-269acd438c23f3c2", "level": "none", "message": {"text": "Commented-code block (16 lines) in services/embed/embed.service.js:307"}, "properties": {"repobilityId": "6766f88ace38b6bd", "scanner": "scanner-primary", "fingerprint": "269acd438c23f3c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ffa37e79dd5b23c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 services/embed/embed.service.js:1933"}, "properties": {"repobilityId": "655e47f52337c384", "scanner": "scanner-primary", "fingerprint": "8ffa37e79dd5b23c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d93c7f4f5f3a1f54", "level": "none", "message": {"text": "Commented-code block (6 lines) in services/documents/auto-processing.service.js:123"}, "properties": {"repobilityId": "43729ffe54dc2891", "scanner": "scanner-primary", "fingerprint": "d93c7f4f5f3a1f54", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d6ffa20a9f1093b", "level": "note", "message": {"text": "24 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "880bbf29bf1f87e1", "scanner": "scanner-primary", "fingerprint": "2d6ffa20a9f1093b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-1aeca5acd42cfca3", "level": "error", "message": {"text": "Dangling fetch: GET /api/workspaces/${wsId}/chatbots/${botId}/openai-config (final-comprehensive-test.mjs:60)"}, "properties": {"repobilityId": "9d24cef4bf5816ff", "scanner": "scanner-primary", "fingerprint": "1aeca5acd42cfca3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7d0b8ee4d79d63ec", "level": "error", "message": {"text": "Dangling fetch: POST https://${shop}/admin/oauth/access_token (controllers/auth/shopify-oauth.controller.js:57)"}, "properties": {"repobilityId": "caa431a1084f0424", "scanner": "scanner-primary", "fingerprint": "7d0b8ee4d79d63ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-3bac6b43d15fcbc4", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (controllers/auth/google-oauth.controller.js:43)"}, "properties": {"repobilityId": "b6e8c8adae42eb28", "scanner": "scanner-primary", "fingerprint": "3bac6b43d15fcbc4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0edf1b13c2bf3a59", "level": "error", "message": {"text": "Dangling fetch: GET https://www.googleapis.com/oauth2/v3/userinfo (controllers/auth/google-oauth.controller.js:62)"}, "properties": {"repobilityId": "e3a09f434fab5213", "scanner": "scanner-primary", "fingerprint": "0edf1b13c2bf3a59", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f7f9b75bda0e5c86", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.instagram.com/v18.0/${instagramBusinessAccountId}/messages (services/messaging/social.service.js:186)"}, "properties": {"repobilityId": "fe43260ea661da9b", "scanner": "scanner-primary", "fingerprint": "f7f9b75bda0e5c86", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-01593bb39e83f72e", "level": "error", "message": {"text": "Dangling fetch: POST https://${shopifyStore}/admin/api/2024-01/graphql.json (services/integrations/shopify-webhook.service.js:16)"}, "properties": {"repobilityId": "35c4484f31d1a9f3", "scanner": "scanner-primary", "fingerprint": "01593bb39e83f72e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "axios"]}}, {"ruleId": "scanner-0205899c45bd0514", "level": "error", "message": {"text": "Dangling fetch: POST https://api.openai.com/v1/realtime/sessions (services/embed/embed.service.js:1933)"}, "properties": {"repobilityId": "60b50341a834603e", "scanner": "scanner-primary", "fingerprint": "0205899c45bd0514", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fd55aa0818a7c897", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/login"}, "properties": {"repobilityId": "b9f8fca1370997b8", "scanner": "scanner-primary", "fingerprint": "fd55aa0818a7c897", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a53dc2f6188e2f64", "level": "note", "message": {"text": "Unused endpoint: USE /api/embed"}, "properties": {"repobilityId": "6f4db8c400c2c4b3", "scanner": "scanner-primary", "fingerprint": "a53dc2f6188e2f64", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1bc898b3b7565990", "level": "note", "message": {"text": "Unused endpoint: USE /uploads"}, "properties": {"repobilityId": "ff548f29fd0f83df", "scanner": "scanner-primary", "fingerprint": "1bc898b3b7565990", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ed523761442e1550", "level": "note", "message": {"text": "Unused endpoint: USE /chat"}, "properties": {"repobilityId": "53ef47b0cd0e5efa", "scanner": "scanner-primary", "fingerprint": "ed523761442e1550", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6eb452fbfb454d20", "level": "note", "message": {"text": "Unused endpoint: USE /api/auth"}, "properties": {"repobilityId": "166e9dd94854ec87", "scanner": "scanner-primary", "fingerprint": "6eb452fbfb454d20", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-203ec659ed8ada77", "level": "note", "message": {"text": "Unused endpoint: USE /api/webhooks"}, "properties": {"repobilityId": "92f6518584c2cfb7", "scanner": "scanner-primary", "fingerprint": "203ec659ed8ada77", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8b34dbe0f2b33813", "level": "note", "message": {"text": "Unused endpoint: USE /api/messaging"}, "properties": {"repobilityId": "e1cc2b30978d723f", "scanner": "scanner-primary", "fingerprint": "8b34dbe0f2b33813", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aebdad2655c302c7", "level": "note", "message": {"text": "Unused endpoint: USE /api/calendar"}, "properties": {"repobilityId": "7810c412088a8734", "scanner": "scanner-primary", "fingerprint": "aebdad2655c302c7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1f1af875ae07230b", "level": "note", "message": {"text": "Unused endpoint: USE /api/quotes"}, "properties": {"repobilityId": "9c9982d586a2630b", "scanner": "scanner-primary", "fingerprint": "1f1af875ae07230b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5a5888717dcee7dc", "level": "note", "message": {"text": "Unused endpoint: USE /api/workspaces"}, "properties": {"repobilityId": "6c307bbf461d535e", "scanner": "scanner-primary", "fingerprint": "5a5888717dcee7dc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-151cc2768378c7e0", "level": "note", "message": {"text": "Unused endpoint: USE /api/workspaces/:workspaceId/chatbots/:chatbotId/resources"}, "properties": {"repobilityId": "3ef75a90e685ada2", "scanner": "scanner-primary", "fingerprint": "151cc2768378c7e0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-640ef5bcda674a98", "level": "note", "message": {"text": "Unused endpoint: USE /api/workspaces/:wsId/appointments"}, "properties": {"repobilityId": "b18c7138ed7157a2", "scanner": "scanner-primary", "fingerprint": "640ef5bcda674a98", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c420ad749d22da4c", "level": "note", "message": {"text": "Unused endpoint: USE /api/invitations"}, "properties": {"repobilityId": "39506edc062d1c43", "scanner": "scanner-primary", "fingerprint": "c420ad749d22da4c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1439b969fda59272", "level": "note", "message": {"text": "Unused endpoint: USE /api/workspaces/:workspaceId/orders"}, "properties": {"repobilityId": "66ee33c801a4f772", "scanner": "scanner-primary", "fingerprint": "1439b969fda59272", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d93a530ce10d47d9", "level": "note", "message": {"text": "Unused endpoint: USE /api/admin"}, "properties": {"repobilityId": "7cf1ce4709c13e8a", "scanner": "scanner-primary", "fingerprint": "d93a530ce10d47d9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c73e8bea8e1d1368", "level": "note", "message": {"text": "Unused endpoint: USE /api/conversations"}, "properties": {"repobilityId": "316f5c5797711aac", "scanner": "scanner-primary", "fingerprint": "c73e8bea8e1d1368", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b90a25f6d5f27707", "level": "note", "message": {"text": "Unused endpoint: USE /api/documents"}, "properties": {"repobilityId": "6ff22fa85935ee7e", "scanner": "scanner-primary", "fingerprint": "b90a25f6d5f27707", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-946dc627de4f272d", "level": "note", "message": {"text": "Unused endpoint: USE /api/billing"}, "properties": {"repobilityId": "997ce84de1c75dfb", "scanner": "scanner-primary", "fingerprint": "946dc627de4f272d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "4cd1092f2e249b11", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "0b52a69e04ba0897", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3298f7335f888758", "level": "note", "message": {"text": "Unused endpoint: GET /system-prompt"}, "properties": {"repobilityId": "90ba94c01b7475d4", "scanner": "scanner-primary", "fingerprint": "3298f7335f888758", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d467299d5c174fc0", "level": "note", "message": {"text": "Unused endpoint: GET /usage"}, "properties": {"repobilityId": "988764e8e9462077", "scanner": "scanner-primary", "fingerprint": "d467299d5c174fc0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f5cae3068724f9d3", "level": "note", "message": {"text": "Unused endpoint: GET /plans"}, "properties": {"repobilityId": "fe2f21d0cde3a31f", "scanner": "scanner-primary", "fingerprint": "f5cae3068724f9d3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-54d65e3c70a9a584", "level": "note", "message": {"text": "Unused endpoint: GET /invoices"}, "properties": {"repobilityId": "6cc58cb1f15f334f", "scanner": "scanner-primary", "fingerprint": "54d65e3c70a9a584", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd2c2c5804f1a2ed", "level": "note", "message": {"text": "Unused endpoint: POST /change-plan"}, "properties": {"repobilityId": "fe5b6bfaffc7bb3d", "scanner": "scanner-primary", "fingerprint": "fd2c2c5804f1a2ed", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c67ddea3c17528d6", "level": "note", "message": {"text": "Unused endpoint: GET /subscription"}, "properties": {"repobilityId": "ae4f3f69bd799af2", "scanner": "scanner-primary", "fingerprint": "c67ddea3c17528d6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-365f0986d17746b8", "level": "note", "message": {"text": "Unused endpoint: POST /subscribe"}, "properties": {"repobilityId": "1a0995bb6d8a2d61", "scanner": "scanner-primary", "fingerprint": "365f0986d17746b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6b4d3a1c30158c0e", "level": "note", "message": {"text": "Unused endpoint: POST /cancel"}, "properties": {"repobilityId": "616a3446ebe8e78d", "scanner": "scanner-primary", "fingerprint": "6b4d3a1c30158c0e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-23d211e64518ed42", "level": "note", "message": {"text": "Unused endpoint: POST /whatsapp/webhook"}, "properties": {"repobilityId": "0d52ce66375ef76b", "scanner": "scanner-primary", "fingerprint": "23d211e64518ed42", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7b8f0a1fa14a5a8c", "level": "note", "message": {"text": "Unused endpoint: POST /instagram/webhook"}, "properties": {"repobilityId": "becdf3dbf75bc19c", "scanner": "scanner-primary", "fingerprint": "7b8f0a1fa14a5a8c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5fda21a55a32c9b4", "level": "note", "message": {"text": "Unused endpoint: GET /instagram/webhook"}, "properties": {"repobilityId": "1f9f03aba82881b2", "scanner": "scanner-primary", "fingerprint": "5fda21a55a32c9b4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-408098308bd79c72", "level": "note", "message": {"text": "Unused endpoint: GET /chatbots/:chatbotId/integrations/status"}, "properties": {"repobilityId": "e6c303f4f583c7d4", "scanner": "scanner-primary", "fingerprint": "408098308bd79c72", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b63b09f2451699e5", "level": "note", "message": {"text": "Unused endpoint: POST /generate-embeddings/:chatbotId"}, "properties": {"repobilityId": "68f3d7813bf8e745", "scanner": "scanner-primary", "fingerprint": "b63b09f2451699e5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-361a03ee4318d2c7", "level": "note", "message": {"text": "Unused endpoint: GET /top-queries"}, "properties": {"repobilityId": "436d2e82a1b84856", "scanner": "scanner-primary", "fingerprint": "361a03ee4318d2c7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-af12fb64ffb6a158", "level": "note", "message": {"text": "Unused endpoint: GET /unanswered"}, "properties": {"repobilityId": "9c36743b22fbb5e9", "scanner": "scanner-primary", "fingerprint": "af12fb64ffb6a158", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-955005a6da85f786", "level": "note", "message": {"text": "Unused endpoint: GET /recent"}, "properties": {"repobilityId": "00240d280829dcd4", "scanner": "scanner-primary", "fingerprint": "955005a6da85f786", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ee28295efe247587", "level": "note", "message": {"text": "Unused endpoint: GET /global"}, "properties": {"repobilityId": "304ea0026d52880a", "scanner": "scanner-primary", "fingerprint": "ee28295efe247587", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e686634beeea0bb8", "level": "note", "message": {"text": "Unused endpoint: GET /export"}, "properties": {"repobilityId": "a64f2cf29ec07705", "scanner": "scanner-primary", "fingerprint": "e686634beeea0bb8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a7a776760f85a3e7", "level": "note", "message": {"text": "Unused endpoint: POST /reset"}, "properties": {"repobilityId": "64cc264c43c8d958", "scanner": "scanner-primary", "fingerprint": "a7a776760f85a3e7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-67d28fa8cd6bb12f", "level": "note", "message": {"text": "Unused endpoint: PUT /"}, "properties": {"repobilityId": "4859e14dcd28f120", "scanner": "scanner-primary", "fingerprint": "67d28fa8cd6bb12f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-731c57f59aaca553", "level": "note", "message": {"text": "Unused endpoint: POST /test"}, "properties": {"repobilityId": "3e611cb8ee025e67", "scanner": "scanner-primary", "fingerprint": "731c57f59aaca553", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fa413208496243a5", "level": "note", "message": {"text": "Unused endpoint: POST /sync"}, "properties": {"repobilityId": "6d936a23d60b337b", "scanner": "scanner-primary", "fingerprint": "fa413208496243a5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ed261bfa6f398b59", "level": "note", "message": {"text": "Unused endpoint: GET /:chatbotId/active"}, "properties": {"repobilityId": "b7b38943cbb20e3a", "scanner": "scanner-primary", "fingerprint": "ed261bfa6f398b59", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0c8f22aa4c1cc3a0", "level": "note", "message": {"text": "Unused endpoint: POST /chatbots/:chatbotId"}, "properties": {"repobilityId": "e1d45b205c8679ff", "scanner": "scanner-primary", "fingerprint": "0c8f22aa4c1cc3a0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d3d84c0977ddd6d6", "level": "note", "message": {"text": "Unused endpoint: DELETE /chatbots/:chatbotId"}, "properties": {"repobilityId": "459d4e3fcff8d6c2", "scanner": "scanner-primary", "fingerprint": "d3d84c0977ddd6d6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f67ec2d66d92d8a6", "level": "note", "message": {"text": "Unused endpoint: POST /:integrationId/sync"}, "properties": {"repobilityId": "cae670968cf6a098", "scanner": "scanner-primary", "fingerprint": "f67ec2d66d92d8a6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3300a4de0573e3f4", "level": "note", "message": {"text": "Unused endpoint: GET /:integrationId/status"}, "properties": {"repobilityId": "19f1cbe69e15d598", "scanner": "scanner-primary", "fingerprint": "3300a4de0573e3f4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6bd19678600a66ab", "level": "note", "message": {"text": "Unused endpoint: GET /:integrationId/history"}, "properties": {"repobilityId": "87e1512d2cc58a5b", "scanner": "scanner-primary", "fingerprint": "6bd19678600a66ab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b674629a15c22251", "level": "note", "message": {"text": "Unused endpoint: POST /test-connection"}, "properties": {"repobilityId": "324a482f3097a61d", "scanner": "scanner-primary", "fingerprint": "b674629a15c22251", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ca5756175765b49d", "level": "note", "message": {"text": "Unused endpoint: GET /:id"}, "properties": {"repobilityId": "09d565b9c0242f24", "scanner": "scanner-primary", "fingerprint": "ca5756175765b49d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}