{"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-34e25899c4b3ebe3", "name": "Possibly dead Python function: respond", "shortDescription": {"text": "Possibly dead Python function: respond"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-092e7918c24929a5", "name": "Possibly dead Python function: find_capability", "shortDescription": {"text": "Possibly dead Python function: find_capability"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6ade0506a64e748f", "name": "Stray `console.log` in TS/JS \u2014 frontend/script.js:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/script.js:28"}, "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-835dc6d9220163f2", "name": "Stray `console.log` in TS/JS \u2014 frontend/index.js:67", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/index.js:67"}, "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-5f7ae96bf958b693", "name": "Stray `console.log` in TS/JS \u2014 frontend/login/forgot-password.js:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/login/forgot-password.js:8"}, "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-c5ce3a7f7b74597b", "name": "Stray `console.log` in TS/JS \u2014 frontend/login/login.js:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/login/login.js:47"}, "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-48ff4c2d7913e475", "name": "Stray `console.log` in TS/JS \u2014 frontend/login/reset-password.js:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/login/reset-password.js:8"}, "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-87a102d6c4c8b680", "name": "Stray `console.log` in TS/JS \u2014 frontend/login/config.js:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/login/config.js:61"}, "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-6e057d7f387529ed", "name": "Stray `console.log` in TS/JS \u2014 frontend/dashboard/js/core/auth.js:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/dashboard/js/core/auth.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-05d936f85e9e126c", "name": "Stray `console.log` in TS/JS \u2014 frontend/dashboard/js/core/api.js:99", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/dashboard/js/core/api.js:99"}, "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-dd4909e7311c3b37", "name": "Stray `console.log` in TS/JS \u2014 frontend/dashboard/js/core/signaldashboard.js:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/dashboard/js/core/signaldashboard.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-c2629c41e9980c9c", "name": "Stray `console.log` in TS/JS \u2014 frontend/dashboard/js/features/loadsignal.js:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/dashboard/js/features/loadsignal.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-7c2954b5ceef9215", "name": "Stray `console.log` in TS/JS \u2014 frontend/dashboard/js/features/analytics.js:408", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/dashboard/js/features/analytics.js:408"}, "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-a82ddc46a40dd843", "name": "Stray `console.log` in TS/JS \u2014 frontend/signup/signup.js:18", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/signup/signup.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-5581359d745cec88", "name": "Stray `console.log` in TS/JS \u2014 frontend/navbar/navbar.js:153", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/navbar/navbar.js:153"}, "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-90f7cdfa2b843b37", "name": "Stray `console.log` in TS/JS \u2014 frontend/admin/dashboard.js:12", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/admin/dashboard.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-cc94017ff0e6df61", "name": "Stray `console.log` in TS/JS \u2014 frontend/admin/login.js:8", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 frontend/admin/login.js:8"}, "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-0e65b1717def16b4", "name": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/server.js:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/server.js:50"}, "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-afdb0c8f6ef7be6b", "name": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/config/db.js:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/config/db.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-09497c5f6399fd09", "name": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/controllers/dynamicAssessmentController.js:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/controllers/dynamicAssessmentController.js:46"}, "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-1d52910cf4a56121", "name": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/controllers/assessmentController.js:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/controllers/assessmentController.js:88"}, "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-2b90fc38239bbfa3", "name": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/controllers/profileController.js:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/controllers/profileController.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-aa3b57e614aaa82e", "name": "TODO/FIXME marker in shipping code \u2014 backend/trunida-backend/controllers/authController.js:121", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 backend/trunida-backend/controllers/authController.js:121"}, "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-7358602ca803263c", "name": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/controllers/authController.js:118", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/controllers/authController.js:118"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3e710464397a8bbb", "name": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/llmService.js:205", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/llmService.js:205"}, "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-1b717dbbbdb49a9f", "name": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/kbRetrievalService.js:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/kbRetrievalService.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-f6bada397ea29dda", "name": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/discoveryService.js:95", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/discoveryService.js:95"}, "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-5204e43c1a140e96", "name": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/reportGenerationService.js:173", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/reportGenerationService.js:173"}, "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-65c59e3079475fac", "name": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/conversationService.js:165", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/conversationService.js:165"}, "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-9f2f61188bcfa5df", "name": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/questionGenerationService.js:177", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/questionGenerationService.js:177"}, "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-0e71dc1afcd76e59", "name": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/canvasEvolutionService.js:101", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/canvasEvolutionService.js:101"}, "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-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d0a094cfe329a5b3", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/index.js:27", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/index.js:27"}, "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-7d215ca8fad72080", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/assessment/assessment.js:86", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/assessment/assessment.js:86"}, "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-8f6c427de5173a9e", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/__tests__/setup.js:11", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/__tests__/setup.js:11"}, "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-0935394c6d4b96d0", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/__tests__/login.test.js:24", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/__tests__/login.test.js:24"}, "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-173c40144f4e77cb", "name": "Insecure pattern 'local_storage_auth_token' in frontend/__tests__/login.test.js:81", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/__tests__/login.test.js:81"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c6bd4fbe77d6de0f", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/__tests__/yourTransformation.test.js:33", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/__tests__/yourTransformation.test.js:33"}, "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-2aedf55518bce837", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/__tests__/navbar.test.js:25", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/__tests__/navbar.test.js:25"}, "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-64ff1b3f4050b93a", "name": "Insecure pattern 'local_storage_auth_token' in frontend/__tests__/navbar.test.js:20", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/__tests__/navbar.test.js:20"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2c545cc097098f71", "name": "Insecure pattern 'local_storage_auth_token' in frontend/__tests__/authState.test.js:14", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/__tests__/authState.test.js:14"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-52fb885e0d76c4ef", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/__tests__/platform.test.js:19", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/__tests__/platform.test.js:19"}, "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-fb472da94c096bfc", "name": "Insecure pattern 'local_storage_auth_token' in frontend/__tests__/platform.test.js:109", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/__tests__/platform.test.js:109"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-05546d8691124011", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/__tests__/profileSetup.test.js:14", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/__tests__/profileSetup.test.js:14"}, "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-0a8e1b6dd12ff57e", "name": "Insecure pattern 'local_storage_auth_token' in frontend/__tests__/profileSetup.test.js:80", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/__tests__/profileSetup.test.js:80"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3e33f2aacacd7547", "name": "Insecure pattern 'local_storage_auth_token' in frontend/__tests__/ctaRouter.test.js:48", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/__tests__/ctaRouter.test.js:48"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f1c969b64a8b60ce", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/company-strategy/company-strategy.js:102", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/company-strategy/company-strategy.js:102"}, "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-54002331b589d0db", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/results/results.js:123", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/results/results.js:123"}, "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-a686901fd4798bff", "name": "Insecure pattern 'local_storage_auth_token' in frontend/login/login.js:226", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/login/login.js:226"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1a5c9926733b4fbe", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/dashboard/js/core/signaldashboard.js:135", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/dashboard/js/core/signaldashboard.js:135"}, "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-ac4219a069bec953", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/dashboard/js/features/analytics.js:451", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/dashboard/js/features/analytics.js:451"}, "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-1a7ad93d7ab3b4ac", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/workspace/yourTransformation.js:135", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/workspace/yourTransformation.js:135"}, "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-fbaeba71790ccaf0", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/workspace/workspace.js:66", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/workspace/workspace.js:66"}, "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-67667ced7b6aa97d", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/navbar/navbar.js:28", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/navbar/navbar.js:28"}, "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-a3e6379605bc8432", "name": "Insecure pattern 'insert_adjacent_html' in frontend/navbar/navbar.js:21", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in frontend/navbar/navbar.js:21"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-79ce6416040f029f", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/admin/kpi-dashboard.html:419", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/admin/kpi-dashboard.html:419"}, "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-3b00162da9ee3a51", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/admin/dashboard.js:269", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/admin/dashboard.js:269"}, "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-133786313c20c4f1", "name": "Insecure pattern 'local_storage_auth_token' in frontend/admin/login.js:87", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/admin/login.js:87"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a42586d380d02458", "name": "Insecure pattern 'local_storage_auth_token' in frontend/dynamic-assessment/start.html:97", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/dynamic-assessment/start.html:97"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ebc9b7781616ca91", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/dynamic-assessment/scorecard.html:117", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/dynamic-assessment/scorecard.html:117"}, "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-3eddd80fb4d6d62b", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/dynamic-assessment/questions.html:121", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/dynamic-assessment/questions.html:121"}, "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-e8cb7ba10da4f138", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/domain/strategy-canvas.js:162", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/domain/strategy-canvas.js:162"}, "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-5227fd760571c72d", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/domain/canvas.js:24", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/domain/canvas.js:24"}, "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-f16fe604c4e768a9", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/domain/companyContext.js:190", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/domain/companyContext.js:190"}, "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-f5f1a4693db97cab", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/domain/chat.js:167", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/domain/chat.js:167"}, "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-2d46c28e213bdfe3", "name": "Insecure pattern 'direct_innerhtml_assignment' in frontend/domain/advisor.js:160", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/domain/advisor.js:160"}, "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-c6b36350eacc4ae8", "name": "Insecure pattern 'debug_true' in knowledge_base/conversation/intent_detector.py:210", "shortDescription": {"text": "Insecure pattern 'debug_true' in knowledge_base/conversation/intent_detector.py:210"}, "fullDescription": {"text": "Found a known-risky pattern (debug_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0812f0d2a6171f96", "name": "Insecure pattern 'debug_true' in knowledge_base/advisor/reasoning_planner.py:287", "shortDescription": {"text": "Insecure pattern 'debug_true' in knowledge_base/advisor/reasoning_planner.py:287"}, "fullDescription": {"text": "Found a known-risky pattern (debug_true). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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 404 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-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-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-746cffb694a6fc93", "name": "Commented-code block (5 lines) in frontend/__tests__/login.test.js:204", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/__tests__/login.test.js:204"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-abe9fd699bdab1c9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/__tests__/login.test.js:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/__tests__/login.test.js:18"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-10d2ef0f9111a96e", "name": "Legacy-named symbol `soorgaai_blueprint_v1` in frontend/__tests__/blueprintStorage.test.js:128", "shortDescription": {"text": "Legacy-named symbol `soorgaai_blueprint_v1` in frontend/__tests__/blueprintStorage.test.js:128"}, "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-4308fc0787f7e99e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/__tests__/platform.test.js:11", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/__tests__/platform.test.js:11"}, "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-374c828e306a790a", "name": "Legacy-named symbol `soorgaai_blueprint_v1` in frontend/company-strategy/company-strategy.js:39", "shortDescription": {"text": "Legacy-named symbol `soorgaai_blueprint_v1` in frontend/company-strategy/company-strategy.js:39"}, "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-665907fb390a01a9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/login/forgot-password.js:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/login/forgot-password.js:51"}, "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-ce1e4e3affca26c6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/login/login.js:200", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/login/login.js:200"}, "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-4ba872750246c905", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/login/reset-password.js:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/login/reset-password.js:74"}, "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-bf774c783bd00954", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/dashboard/js/core/auth.js:59", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/dashboard/js/core/auth.js:59"}, "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-69289f3ee56df531", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/dashboard/js/features/loadsignal.js:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/dashboard/js/features/loadsignal.js:45"}, "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-051d9a09be5fd19a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/signup/signup.js:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/signup/signup.js:20"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-963b0aefb90f5e49", "name": "Legacy-named symbol `soorgaai_blueprint_v1` in frontend/workspace/workspace.js:23", "shortDescription": {"text": "Legacy-named symbol `soorgaai_blueprint_v1` in frontend/workspace/workspace.js:23"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f1419ad8825922d1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/workspace/workspace.js:119", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/workspace/workspace.js:119"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ecb3feeb7b3dc5cd", "name": "Legacy-named symbol `soorgaai_blueprint_v1` in frontend/navbar/navbar.js:145", "shortDescription": {"text": "Legacy-named symbol `soorgaai_blueprint_v1` in frontend/navbar/navbar.js:145"}, "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-7423d63d1620d7c5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/admin/dashboard.js:108", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/admin/dashboard.js:108"}, "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-462fba32ee8d4c49", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/admin/login.js:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/admin/login.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-76442a9cc41591c4", "name": "Legacy-named symbol `soorgaai_blueprint_v1` in frontend/domain/blueprintStorage.js:7", "shortDescription": {"text": "Legacy-named symbol `soorgaai_blueprint_v1` in frontend/domain/blueprintStorage.js:7"}, "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-8f9008395016f627", "name": "Legacy-named symbol `soorgaai_company_context_v1` in frontend/domain/companyContext.js:17", "shortDescription": {"text": "Legacy-named symbol `soorgaai_company_context_v1` in frontend/domain/companyContext.js:17"}, "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-ff18370b78841651", "name": "Legacy-named symbol `soorgaai_executive_memory_v1` in frontend/domain/advisor.js:44", "shortDescription": {"text": "Legacy-named symbol `soorgaai_executive_memory_v1` in frontend/domain/advisor.js:44"}, "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-ceb613f5ba4a9ce2", "name": "Commented-code block (5 lines) in frontend/domain/advisor.js:138", "shortDescription": {"text": "Commented-code block (5 lines) in frontend/domain/advisor.js:138"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3d6a8504b821fa68", "name": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/domain/advisor.js:671", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/domain/advisor.js:671"}, "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-ad18ebc422185be5", "name": "Legacy-named symbol `soorgaai_executive_memory_v1` in frontend/domain/executiveMemory.js:10", "shortDescription": {"text": "Legacy-named symbol `soorgaai_executive_memory_v1` in frontend/domain/executiveMemory.js:10"}, "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-bc43ca64ad5d552a", "name": "Commented-code block (5 lines) in integration-tests/e2e/command-center.spec.js:118", "shortDescription": {"text": "Commented-code block (5 lines) in integration-tests/e2e/command-center.spec.js:118"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d154b39621340a6", "name": "Commented-code block (5 lines) in backend/trunida-backend/services/blueprintSuggestService.js:346", "shortDescription": {"text": "Commented-code block (5 lines) in backend/trunida-backend/services/blueprintSuggestService.js:346"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-af022f937dd5b7fd", "name": "9 env vars used in code but missing from .env.example", "shortDescription": {"text": "9 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADVISOR_MODEL`, `CLAUDE_MODEL`, `GEMINI_API_KEY`, `GEMINI_MODEL`, `GOOGLE_API_KEY`, `LLM_PROVIDER`, `OPENAI_API_KEY`, `OPENAI_MODEL` + 1 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nknowledge_base/context_builder.py:build, knowledge_base/context_builder.py:build\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nknowledge_base/context_builder.py:main, knowledge_base/hybrid_retrieval.py:main, knowledge_base/vector_store.py:main, knowledge_base/semantic_search.py:main\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nknowledge_base/loader.py:print_summary, knowledge_base/loader.py:print_summary, knowledge_base/loader.py:print_summary\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4ff40cb10f7c8519", "name": "Unused endpoint: USE /api/users", "shortDescription": {"text": "Unused endpoint: USE /api/users"}, "fullDescription": {"text": "`backend/trunida-backend/server.js` declares `USE /api/users` 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-e2711b3899e95028", "name": "Unused endpoint: USE /api/assessment/dynamic", "shortDescription": {"text": "Unused endpoint: USE /api/assessment/dynamic"}, "fullDescription": {"text": "`backend/trunida-backend/server.js` declares `USE /api/assessment/dynamic` 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-c46b83706a4786e2", "name": "Unused endpoint: USE /api/assessment", "shortDescription": {"text": "Unused endpoint: USE /api/assessment"}, "fullDescription": {"text": "`backend/trunida-backend/server.js` declares `USE /api/assessment` 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-1849ed4960b3a79e", "name": "Unused endpoint: USE /api/kb", "shortDescription": {"text": "Unused endpoint: USE /api/kb"}, "fullDescription": {"text": "`backend/trunida-backend/server.js` declares `USE /api/kb` 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-2eeaf8c5695bbc33", "name": "Unused endpoint: USE /api/profile", "shortDescription": {"text": "Unused endpoint: USE /api/profile"}, "fullDescription": {"text": "`backend/trunida-backend/server.js` declares `USE /api/profile` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f29e8d5ce947efbb", "name": "Unused endpoint: USE /api/workspace", "shortDescription": {"text": "Unused endpoint: USE /api/workspace"}, "fullDescription": {"text": "`backend/trunida-backend/server.js` declares `USE /api/workspace` 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-2b92dc87a4256298", "name": "Unused endpoint: USE /api/chat", "shortDescription": {"text": "Unused endpoint: USE /api/chat"}, "fullDescription": {"text": "`backend/trunida-backend/server.js` declares `USE /api/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-47e3b5de0c7df69a", "name": "Unused endpoint: USE /api/strategy-canvas", "shortDescription": {"text": "Unused endpoint: USE /api/strategy-canvas"}, "fullDescription": {"text": "`backend/trunida-backend/server.js` declares `USE /api/strategy-canvas` 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-3aad4a972cc9b4db", "name": "Unused endpoint: USE /api/company-context", "shortDescription": {"text": "Unused endpoint: USE /api/company-context"}, "fullDescription": {"text": "`backend/trunida-backend/server.js` declares `USE /api/company-context` 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": "`backend/trunida-backend/server.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-50c4a3a37e89b9d0", "name": "Unused endpoint: GET /api/llm-status", "shortDescription": {"text": "Unused endpoint: GET /api/llm-status"}, "fullDescription": {"text": "`backend/trunida-backend/server.js` declares `GET /api/llm-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-d10e5c556d4bcff6", "name": "Unused endpoint: GET /capabilities", "shortDescription": {"text": "Unused endpoint: GET /capabilities"}, "fullDescription": {"text": "`backend/trunida-backend/routes/strategyCanvasRoutes.js` declares `GET /capabilities` 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-42bb2492a4b0e33c", "name": "Unused endpoint: GET /blueprint/:capabilityId", "shortDescription": {"text": "Unused endpoint: GET /blueprint/:capabilityId"}, "fullDescription": {"text": "`backend/trunida-backend/routes/strategyCanvasRoutes.js` declares `GET /blueprint/:capabilityId` 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-c482bd37efb08e2f", "name": "Unused endpoint: POST /advisor/ask", "shortDescription": {"text": "Unused endpoint: POST /advisor/ask"}, "fullDescription": {"text": "`backend/trunida-backend/routes/strategyCanvasRoutes.js` declares `POST /advisor/ask` 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-9e1bdf359579d51f", "name": "Unused endpoint: POST /blueprint-suggest", "shortDescription": {"text": "Unused endpoint: POST /blueprint-suggest"}, "fullDescription": {"text": "`backend/trunida-backend/routes/strategyCanvasRoutes.js` declares `POST /blueprint-suggest` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d16b1bb2723f51e", "name": "Unused endpoint: POST /signup", "shortDescription": {"text": "Unused endpoint: POST /signup"}, "fullDescription": {"text": "`backend/trunida-backend/routes/userRoutes.js` declares `POST /signup` 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-618721b912bad1c2", "name": "Unused endpoint: POST /login", "shortDescription": {"text": "Unused endpoint: POST /login"}, "fullDescription": {"text": "`backend/trunida-backend/routes/userRoutes.js` declares `POST /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-fd1dc91abf32142d", "name": "Unused endpoint: GET /me", "shortDescription": {"text": "Unused endpoint: GET /me"}, "fullDescription": {"text": "`backend/trunida-backend/routes/userRoutes.js` declares `GET /me` 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-4257ec01219aa99a", "name": "Unused endpoint: POST /forgot-password", "shortDescription": {"text": "Unused endpoint: POST /forgot-password"}, "fullDescription": {"text": "`backend/trunida-backend/routes/userRoutes.js` declares `POST /forgot-password` 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-68a5d356c0cac9e3", "name": "Unused endpoint: POST /reset-password", "shortDescription": {"text": "Unused endpoint: POST /reset-password"}, "fullDescription": {"text": "`backend/trunida-backend/routes/userRoutes.js` declares `POST /reset-password` 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-970eb92d6ec2bfaa", "name": "Unused endpoint: POST /generate", "shortDescription": {"text": "Unused endpoint: POST /generate"}, "fullDescription": {"text": "`backend/trunida-backend/routes/companyContextRoutes.js` declares `POST /generate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b78488ca426bf6de", "name": "Unused endpoint: POST /approve", "shortDescription": {"text": "Unused endpoint: POST /approve"}, "fullDescription": {"text": "`backend/trunida-backend/routes/companyContextRoutes.js` declares `POST /approve` 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-3b30f4c0994a30b4", "name": "Unused endpoint: DELETE /", "shortDescription": {"text": "Unused endpoint: DELETE /"}, "fullDescription": {"text": "`backend/trunida-backend/routes/companyContextRoutes.js` declares `DELETE /` 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": "`backend/trunida-backend/routes/profileRoutes.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-6d05b1f5adfd3eac", "name": "Unused endpoint: PATCH /", "shortDescription": {"text": "Unused endpoint: PATCH /"}, "fullDescription": {"text": "`backend/trunida-backend/routes/profileRoutes.js` declares `PATCH /` 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-92efb2dc9205e7a4", "name": "Unused endpoint: POST /sessions", "shortDescription": {"text": "Unused endpoint: POST /sessions"}, "fullDescription": {"text": "`backend/trunida-backend/routes/dynamicAssessmentRoutes.js` declares `POST /sessions` 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-3b4e8fad68f55af4", "name": "Unused endpoint: POST /sessions/:id/discover", "shortDescription": {"text": "Unused endpoint: POST /sessions/:id/discover"}, "fullDescription": {"text": "`backend/trunida-backend/routes/dynamicAssessmentRoutes.js` declares `POST /sessions/:id/discover` 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-8244a0baa0a3a577", "name": "Unused endpoint: POST /sessions/:id/questions", "shortDescription": {"text": "Unused endpoint: POST /sessions/:id/questions"}, "fullDescription": {"text": "`backend/trunida-backend/routes/dynamicAssessmentRoutes.js` declares `POST /sessions/:id/questions` 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-3fe19966033c62be", "name": "Unused endpoint: POST /sessions/:id/answers", "shortDescription": {"text": "Unused endpoint: POST /sessions/:id/answers"}, "fullDescription": {"text": "`backend/trunida-backend/routes/dynamicAssessmentRoutes.js` declares `POST /sessions/:id/answers` 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-705591b11ba78b85", "name": "Unused endpoint: GET /sessions/:id", "shortDescription": {"text": "Unused endpoint: GET /sessions/:id"}, "fullDescription": {"text": "`backend/trunida-backend/routes/dynamicAssessmentRoutes.js` declares `GET /sessions/: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}}, {"id": "scanner-bff5cf1d32e524d5", "name": "Unused endpoint: POST /sessions/:id/score", "shortDescription": {"text": "Unused endpoint: POST /sessions/:id/score"}, "fullDescription": {"text": "`backend/trunida-backend/routes/dynamicAssessmentRoutes.js` declares `POST /sessions/:id/score` 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-24127e99f5c184fb", "name": "Unused endpoint: GET /state", "shortDescription": {"text": "Unused endpoint: GET /state"}, "fullDescription": {"text": "`backend/trunida-backend/routes/workspaceRoutes.js` declares `GET /state` 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-6ad2194d377bd37e", "name": "Unused endpoint: GET /domains", "shortDescription": {"text": "Unused endpoint: GET /domains"}, "fullDescription": {"text": "`backend/trunida-backend/routes/workspaceRoutes.js` declares `GET /domains` 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-7b01f85b4855fe2a", "name": "Unused endpoint: GET /questions", "shortDescription": {"text": "Unused endpoint: GET /questions"}, "fullDescription": {"text": "`backend/trunida-backend/routes/assessmentRoutes.js` declares `GET /questions` 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-81dd947d0ca809c7", "name": "Unused endpoint: POST /submit", "shortDescription": {"text": "Unused endpoint: POST /submit"}, "fullDescription": {"text": "`backend/trunida-backend/routes/assessmentRoutes.js` declares `POST /submit` 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-88d8b3004a39cf4b", "name": "Unused endpoint: GET /my-assessments", "shortDescription": {"text": "Unused endpoint: GET /my-assessments"}, "fullDescription": {"text": "`backend/trunida-backend/routes/assessmentRoutes.js` declares `GET /my-assessments` 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-abdc56add267ebde", "name": "Unused endpoint: GET /results/:id", "shortDescription": {"text": "Unused endpoint: GET /results/:id"}, "fullDescription": {"text": "`backend/trunida-backend/routes/assessmentRoutes.js` declares `GET /results/: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}}, {"id": "scanner-1f94c41822799d31", "name": "Unused endpoint: POST /report/:id", "shortDescription": {"text": "Unused endpoint: POST /report/:id"}, "fullDescription": {"text": "`backend/trunida-backend/routes/assessmentRoutes.js` declares `POST /report/: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}}, {"id": "scanner-dc755150645271b5", "name": "Unused endpoint: GET /report/:id", "shortDescription": {"text": "Unused endpoint: GET /report/:id"}, "fullDescription": {"text": "`backend/trunida-backend/routes/assessmentRoutes.js` declares `GET /report/: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}}, {"id": "scanner-b63da4853e3e9d15", "name": "Unused endpoint: GET /admin/all", "shortDescription": {"text": "Unused endpoint: GET /admin/all"}, "fullDescription": {"text": "`backend/trunida-backend/routes/assessmentRoutes.js` declares `GET /admin/all` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-391730ec7f93251e", "name": "Unused endpoint: GET /maturity-stages", "shortDescription": {"text": "Unused endpoint: GET /maturity-stages"}, "fullDescription": {"text": "`backend/trunida-backend/routes/kbRoutes.js` declares `GET /maturity-stages` 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-28c6bedcd32e51d0", "name": "Unused endpoint: GET /focus-areas", "shortDescription": {"text": "Unused endpoint: GET /focus-areas"}, "fullDescription": {"text": "`backend/trunida-backend/routes/kbRoutes.js` declares `GET /focus-areas` 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-e7483c83fcdb8da9", "name": "Unused endpoint: GET /domain-studies/:domain", "shortDescription": {"text": "Unused endpoint: GET /domain-studies/:domain"}, "fullDescription": {"text": "`backend/trunida-backend/routes/kbRoutes.js` declares `GET /domain-studies/:domain` 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-afa4034361159a8a", "name": "Unused endpoint: POST /:domainId/message", "shortDescription": {"text": "Unused endpoint: POST /:domainId/message"}, "fullDescription": {"text": "`backend/trunida-backend/routes/chatRoutes.js` declares `POST /:domainId/message` 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-0ad9879c5c71fd9c", "name": "Unused endpoint: GET /:domainId/history", "shortDescription": {"text": "Unused endpoint: GET /:domainId/history"}, "fullDescription": {"text": "`backend/trunida-backend/routes/chatRoutes.js` declares `GET /:domainId/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-c604ab40799e940e", "name": "Unused endpoint: GET /:domainId/canvas", "shortDescription": {"text": "Unused endpoint: GET /:domainId/canvas"}, "fullDescription": {"text": "`backend/trunida-backend/routes/chatRoutes.js` declares `GET /:domainId/canvas` 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-77aad223bf47e7b9", "name": "Unused endpoint: GET /:domainId/suggested-prompts", "shortDescription": {"text": "Unused endpoint: GET /:domainId/suggested-prompts"}, "fullDescription": {"text": "`backend/trunida-backend/routes/chatRoutes.js` declares `GET /:domainId/suggested-prompts` 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/21665"}, "properties": {"repository": "TrueNidaGitCode/soorgaai-transformation", "repoUrl": "https://github.com/TrueNidaGitCode/soorgaai-transformation", "branch": "main"}, "results": [{"ruleId": "scanner-34e25899c4b3ebe3", "level": "note", "message": {"text": "Possibly dead Python function: respond"}, "properties": {"repobilityId": "fdb128d991099665", "scanner": "scanner-primary", "fingerprint": "34e25899c4b3ebe3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "knowledge_base/strategy_response_engine.py:192"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-092e7918c24929a5", "level": "note", "message": {"text": "Possibly dead Python function: find_capability"}, "properties": {"repobilityId": "07b64e15f9219ec5", "scanner": "scanner-primary", "fingerprint": "092e7918c24929a5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "knowledge_base/loader.py:280"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6ade0506a64e748f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/script.js:28"}, "properties": {"repobilityId": "ad5f9c38871bcbbf", "scanner": "scanner-primary", "fingerprint": "6ade0506a64e748f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-835dc6d9220163f2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/index.js:67"}, "properties": {"repobilityId": "0384dd5b3b264200", "scanner": "scanner-primary", "fingerprint": "835dc6d9220163f2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5f7ae96bf958b693", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/login/forgot-password.js:8"}, "properties": {"repobilityId": "4e30f7924a52e7e5", "scanner": "scanner-primary", "fingerprint": "5f7ae96bf958b693", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c5ce3a7f7b74597b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/login/login.js:47"}, "properties": {"repobilityId": "3214808d5cc8ae30", "scanner": "scanner-primary", "fingerprint": "c5ce3a7f7b74597b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-48ff4c2d7913e475", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/login/reset-password.js:8"}, "properties": {"repobilityId": "451117e285069464", "scanner": "scanner-primary", "fingerprint": "48ff4c2d7913e475", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-87a102d6c4c8b680", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/login/config.js:61"}, "properties": {"repobilityId": "a5c8686cb25b036f", "scanner": "scanner-primary", "fingerprint": "87a102d6c4c8b680", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6e057d7f387529ed", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/dashboard/js/core/auth.js:57"}, "properties": {"repobilityId": "4b81bbeef47dd4bb", "scanner": "scanner-primary", "fingerprint": "6e057d7f387529ed", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-05d936f85e9e126c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/dashboard/js/core/api.js:99"}, "properties": {"repobilityId": "e0299e63c44119ff", "scanner": "scanner-primary", "fingerprint": "05d936f85e9e126c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dd4909e7311c3b37", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/dashboard/js/core/signaldashboard.js:25"}, "properties": {"repobilityId": "c98e2f6b9de453ab", "scanner": "scanner-primary", "fingerprint": "dd4909e7311c3b37", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c2629c41e9980c9c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/dashboard/js/features/loadsignal.js:25"}, "properties": {"repobilityId": "7f0d7122e91c81de", "scanner": "scanner-primary", "fingerprint": "c2629c41e9980c9c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7c2954b5ceef9215", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/dashboard/js/features/analytics.js:408"}, "properties": {"repobilityId": "60d975e9bd537e61", "scanner": "scanner-primary", "fingerprint": "7c2954b5ceef9215", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a82ddc46a40dd843", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/signup/signup.js:18"}, "properties": {"repobilityId": "7fb0ac3d6d82534f", "scanner": "scanner-primary", "fingerprint": "a82ddc46a40dd843", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5581359d745cec88", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/navbar/navbar.js:153"}, "properties": {"repobilityId": "5bc4cd24e73081b6", "scanner": "scanner-primary", "fingerprint": "5581359d745cec88", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-90f7cdfa2b843b37", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/admin/dashboard.js:12"}, "properties": {"repobilityId": "ad71ad144fe902a4", "scanner": "scanner-primary", "fingerprint": "90f7cdfa2b843b37", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cc94017ff0e6df61", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 frontend/admin/login.js:8"}, "properties": {"repobilityId": "a85f98b8eb1ca615", "scanner": "scanner-primary", "fingerprint": "cc94017ff0e6df61", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0e65b1717def16b4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/server.js:50"}, "properties": {"repobilityId": "4e261f3b4941e55e", "scanner": "scanner-primary", "fingerprint": "0e65b1717def16b4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-afdb0c8f6ef7be6b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/config/db.js:10"}, "properties": {"repobilityId": "8fe9c055db444313", "scanner": "scanner-primary", "fingerprint": "afdb0c8f6ef7be6b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-09497c5f6399fd09", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/controllers/dynamicAssessmentController.js:46"}, "properties": {"repobilityId": "056d341dc9f321db", "scanner": "scanner-primary", "fingerprint": "09497c5f6399fd09", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1d52910cf4a56121", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/controllers/assessmentController.js:88"}, "properties": {"repobilityId": "fcf698b2e674948f", "scanner": "scanner-primary", "fingerprint": "1d52910cf4a56121", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2b90fc38239bbfa3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/controllers/profileController.js:57"}, "properties": {"repobilityId": "af462c5d75a4e5d1", "scanner": "scanner-primary", "fingerprint": "2b90fc38239bbfa3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-aa3b57e614aaa82e", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 backend/trunida-backend/controllers/authController.js:121"}, "properties": {"repobilityId": "2a2506d1c1fc6203", "scanner": "scanner-primary", "fingerprint": "aa3b57e614aaa82e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-7358602ca803263c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/controllers/authController.js:118"}, "properties": {"repobilityId": "54dc934a79aa88e5", "scanner": "scanner-primary", "fingerprint": "7358602ca803263c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3e710464397a8bbb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/llmService.js:205"}, "properties": {"repobilityId": "100531513585a9bf", "scanner": "scanner-primary", "fingerprint": "3e710464397a8bbb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1b717dbbbdb49a9f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/kbRetrievalService.js:39"}, "properties": {"repobilityId": "94eec6c3f2acc53b", "scanner": "scanner-primary", "fingerprint": "1b717dbbbdb49a9f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f6bada397ea29dda", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/discoveryService.js:95"}, "properties": {"repobilityId": "01704cbb049cc4e7", "scanner": "scanner-primary", "fingerprint": "f6bada397ea29dda", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5204e43c1a140e96", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/reportGenerationService.js:173"}, "properties": {"repobilityId": "0c276bd4bcd55f87", "scanner": "scanner-primary", "fingerprint": "5204e43c1a140e96", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-65c59e3079475fac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/conversationService.js:165"}, "properties": {"repobilityId": "a123cd24a284ba95", "scanner": "scanner-primary", "fingerprint": "65c59e3079475fac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9f2f61188bcfa5df", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/questionGenerationService.js:177"}, "properties": {"repobilityId": "af6196b76cd74f3e", "scanner": "scanner-primary", "fingerprint": "9f2f61188bcfa5df", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0e71dc1afcd76e59", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 backend/trunida-backend/services/canvasEvolutionService.js:101"}, "properties": {"repobilityId": "0e0f394e3e7702e3", "scanner": "scanner-primary", "fingerprint": "0e71dc1afcd76e59", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-d0a094cfe329a5b3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/index.js:27"}, "properties": {"repobilityId": "d68500457ee37c6b", "scanner": "scanner-primary", "fingerprint": "d0a094cfe329a5b3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/index.js"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-7d215ca8fad72080", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/assessment/assessment.js:86"}, "properties": {"repobilityId": "3cc39112aa5c4497", "scanner": "scanner-primary", "fingerprint": "7d215ca8fad72080", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/assessment/assessment.js"}, "region": {"startLine": 86}}}]}, {"ruleId": "scanner-8f6c427de5173a9e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/__tests__/setup.js:11"}, "properties": {"repobilityId": "7c145a89bfa86a1d", "scanner": "scanner-primary", "fingerprint": "8f6c427de5173a9e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/__tests__/setup.js"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-0935394c6d4b96d0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/__tests__/login.test.js:24"}, "properties": {"repobilityId": "956bef88d72b5e31", "scanner": "scanner-primary", "fingerprint": "0935394c6d4b96d0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/__tests__/login.test.js"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-173c40144f4e77cb", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/__tests__/login.test.js:81"}, "properties": {"repobilityId": "59f29e69b2d9a171", "scanner": "scanner-primary", "fingerprint": "173c40144f4e77cb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/__tests__/login.test.js"}, "region": {"startLine": 81}}}]}, {"ruleId": "scanner-c6bd4fbe77d6de0f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/__tests__/yourTransformation.test.js:33"}, "properties": {"repobilityId": "2c8ecbeaa44095be", "scanner": "scanner-primary", "fingerprint": "c6bd4fbe77d6de0f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/__tests__/yourTransformation.test.js"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-2aedf55518bce837", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/__tests__/navbar.test.js:25"}, "properties": {"repobilityId": "1238bb7e983ab26c", "scanner": "scanner-primary", "fingerprint": "2aedf55518bce837", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/__tests__/navbar.test.js"}, "region": {"startLine": 25}}}]}, {"ruleId": "scanner-64ff1b3f4050b93a", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/__tests__/navbar.test.js:20"}, "properties": {"repobilityId": "ceabca53c48cd287", "scanner": "scanner-primary", "fingerprint": "64ff1b3f4050b93a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/__tests__/navbar.test.js"}, "region": {"startLine": 20}}}]}, {"ruleId": "scanner-2c545cc097098f71", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/__tests__/authState.test.js:14"}, "properties": {"repobilityId": "38b0a3dce1cc263d", "scanner": "scanner-primary", "fingerprint": "2c545cc097098f71", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/__tests__/authState.test.js"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-52fb885e0d76c4ef", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/__tests__/platform.test.js:19"}, "properties": {"repobilityId": "5a5014f47592fd84", "scanner": "scanner-primary", "fingerprint": "52fb885e0d76c4ef", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/__tests__/platform.test.js"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-fb472da94c096bfc", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/__tests__/platform.test.js:109"}, "properties": {"repobilityId": "01ae59236359578e", "scanner": "scanner-primary", "fingerprint": "fb472da94c096bfc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/__tests__/platform.test.js"}, "region": {"startLine": 109}}}]}, {"ruleId": "scanner-05546d8691124011", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/__tests__/profileSetup.test.js:14"}, "properties": {"repobilityId": "6f0a6f1efbe984c7", "scanner": "scanner-primary", "fingerprint": "05546d8691124011", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/__tests__/profileSetup.test.js"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-0a8e1b6dd12ff57e", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/__tests__/profileSetup.test.js:80"}, "properties": {"repobilityId": "98b453dbd9bf5c9c", "scanner": "scanner-primary", "fingerprint": "0a8e1b6dd12ff57e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/__tests__/profileSetup.test.js"}, "region": {"startLine": 80}}}]}, {"ruleId": "scanner-3e33f2aacacd7547", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/__tests__/ctaRouter.test.js:48"}, "properties": {"repobilityId": "b06a563597e9c603", "scanner": "scanner-primary", "fingerprint": "3e33f2aacacd7547", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/__tests__/ctaRouter.test.js"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-f1c969b64a8b60ce", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/company-strategy/company-strategy.js:102"}, "properties": {"repobilityId": "fe835f7b6cf5a950", "scanner": "scanner-primary", "fingerprint": "f1c969b64a8b60ce", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/company-strategy/company-strategy.js"}, "region": {"startLine": 102}}}]}, {"ruleId": "scanner-54002331b589d0db", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/results/results.js:123"}, "properties": {"repobilityId": "d505d60b72cdd443", "scanner": "scanner-primary", "fingerprint": "54002331b589d0db", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/results/results.js"}, "region": {"startLine": 123}}}]}, {"ruleId": "scanner-a686901fd4798bff", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/login/login.js:226"}, "properties": {"repobilityId": "39c1b3e415438adf", "scanner": "scanner-primary", "fingerprint": "a686901fd4798bff", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/login/login.js"}, "region": {"startLine": 226}}}]}, {"ruleId": "scanner-1a5c9926733b4fbe", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/dashboard/js/core/signaldashboard.js:135"}, "properties": {"repobilityId": "10265c2adfd85a29", "scanner": "scanner-primary", "fingerprint": "1a5c9926733b4fbe", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/dashboard/js/core/signaldashboard.js"}, "region": {"startLine": 135}}}]}, {"ruleId": "scanner-ac4219a069bec953", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/dashboard/js/features/analytics.js:451"}, "properties": {"repobilityId": "b3629c04ad684d97", "scanner": "scanner-primary", "fingerprint": "ac4219a069bec953", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/dashboard/js/features/analytics.js"}, "region": {"startLine": 451}}}]}, {"ruleId": "scanner-1a7ad93d7ab3b4ac", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/workspace/yourTransformation.js:135"}, "properties": {"repobilityId": "2813f3c6817cfb50", "scanner": "scanner-primary", "fingerprint": "1a7ad93d7ab3b4ac", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/workspace/yourTransformation.js"}, "region": {"startLine": 135}}}]}, {"ruleId": "scanner-fbaeba71790ccaf0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/workspace/workspace.js:66"}, "properties": {"repobilityId": "7cc3c00e859322f5", "scanner": "scanner-primary", "fingerprint": "fbaeba71790ccaf0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/workspace/workspace.js"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-67667ced7b6aa97d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/navbar/navbar.js:28"}, "properties": {"repobilityId": "91fc21ec314fe0d2", "scanner": "scanner-primary", "fingerprint": "67667ced7b6aa97d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/navbar/navbar.js"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-a3e6379605bc8432", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in frontend/navbar/navbar.js:21"}, "properties": {"repobilityId": "66c81886bdd48dc1", "scanner": "scanner-primary", "fingerprint": "a3e6379605bc8432", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/navbar/navbar.js"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-79ce6416040f029f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/admin/kpi-dashboard.html:419"}, "properties": {"repobilityId": "4cd7b7a058c0c0be", "scanner": "scanner-primary", "fingerprint": "79ce6416040f029f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/admin/kpi-dashboard.html"}, "region": {"startLine": 419}}}]}, {"ruleId": "scanner-3b00162da9ee3a51", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/admin/dashboard.js:269"}, "properties": {"repobilityId": "9c45387360e63985", "scanner": "scanner-primary", "fingerprint": "3b00162da9ee3a51", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/admin/dashboard.js"}, "region": {"startLine": 269}}}]}, {"ruleId": "scanner-133786313c20c4f1", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/admin/login.js:87"}, "properties": {"repobilityId": "16034ebfdfff822f", "scanner": "scanner-primary", "fingerprint": "133786313c20c4f1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/admin/login.js"}, "region": {"startLine": 87}}}]}, {"ruleId": "scanner-a42586d380d02458", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in frontend/dynamic-assessment/start.html:97"}, "properties": {"repobilityId": "4da31559c856c288", "scanner": "scanner-primary", "fingerprint": "a42586d380d02458", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/dynamic-assessment/start.html"}, "region": {"startLine": 97}}}]}, {"ruleId": "scanner-ebc9b7781616ca91", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/dynamic-assessment/scorecard.html:117"}, "properties": {"repobilityId": "2f8dc927a3f6bab1", "scanner": "scanner-primary", "fingerprint": "ebc9b7781616ca91", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/dynamic-assessment/scorecard.html"}, "region": {"startLine": 117}}}]}, {"ruleId": "scanner-3eddd80fb4d6d62b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/dynamic-assessment/questions.html:121"}, "properties": {"repobilityId": "ecd49b8f54a173c9", "scanner": "scanner-primary", "fingerprint": "3eddd80fb4d6d62b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/dynamic-assessment/questions.html"}, "region": {"startLine": 121}}}]}, {"ruleId": "scanner-e8cb7ba10da4f138", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/domain/strategy-canvas.js:162"}, "properties": {"repobilityId": "0338bcb2532a0466", "scanner": "scanner-primary", "fingerprint": "e8cb7ba10da4f138", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/domain/strategy-canvas.js"}, "region": {"startLine": 162}}}]}, {"ruleId": "scanner-5227fd760571c72d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/domain/canvas.js:24"}, "properties": {"repobilityId": "87e0df3ee2933020", "scanner": "scanner-primary", "fingerprint": "5227fd760571c72d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/domain/canvas.js"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-f16fe604c4e768a9", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/domain/companyContext.js:190"}, "properties": {"repobilityId": "373df3470d65bcf4", "scanner": "scanner-primary", "fingerprint": "f16fe604c4e768a9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/domain/companyContext.js"}, "region": {"startLine": 190}}}]}, {"ruleId": "scanner-f5f1a4693db97cab", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/domain/chat.js:167"}, "properties": {"repobilityId": "35268a2e6949466c", "scanner": "scanner-primary", "fingerprint": "f5f1a4693db97cab", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/domain/chat.js"}, "region": {"startLine": 167}}}]}, {"ruleId": "scanner-2d46c28e213bdfe3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in frontend/domain/advisor.js:160"}, "properties": {"repobilityId": "c2ca0b61b1a5fcf1", "scanner": "scanner-primary", "fingerprint": "2d46c28e213bdfe3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "frontend/domain/advisor.js"}, "region": {"startLine": 160}}}]}, {"ruleId": "scanner-c6b36350eacc4ae8", "level": "note", "message": {"text": "Insecure pattern 'debug_true' in knowledge_base/conversation/intent_detector.py:210"}, "properties": {"repobilityId": "8906c4f2c42546bd", "scanner": "scanner-primary", "fingerprint": "c6b36350eacc4ae8", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "debug_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "knowledge_base/conversation/intent_detector.py"}, "region": {"startLine": 210}}}]}, {"ruleId": "scanner-0812f0d2a6171f96", "level": "note", "message": {"text": "Insecure pattern 'debug_true' in knowledge_base/advisor/reasoning_planner.py:287"}, "properties": {"repobilityId": "e98752e04958a048", "scanner": "scanner-primary", "fingerprint": "0812f0d2a6171f96", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "debug_true"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "knowledge_base/advisor/reasoning_planner.py"}, "region": {"startLine": 287}}}]}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "7515359d47e209c1", "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": "771983e6b51e9850", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "411e5ed0d52ede4f", "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": "1afc2e44b95cc261", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "ce51d083dbb40c00", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "91e5e38a55d38a26", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-746cffb694a6fc93", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/__tests__/login.test.js:204"}, "properties": {"repobilityId": "08f5100e116de4ad", "scanner": "scanner-primary", "fingerprint": "746cffb694a6fc93", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-abe9fd699bdab1c9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/__tests__/login.test.js:18"}, "properties": {"repobilityId": "0b532127a0684051", "scanner": "scanner-primary", "fingerprint": "abe9fd699bdab1c9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-10d2ef0f9111a96e", "level": "note", "message": {"text": "Legacy-named symbol `soorgaai_blueprint_v1` in frontend/__tests__/blueprintStorage.test.js:128"}, "properties": {"repobilityId": "a8f2aabc8261af50", "scanner": "scanner-primary", "fingerprint": "10d2ef0f9111a96e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4308fc0787f7e99e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/__tests__/platform.test.js:11"}, "properties": {"repobilityId": "938ea9c024fec1bf", "scanner": "scanner-primary", "fingerprint": "4308fc0787f7e99e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-374c828e306a790a", "level": "note", "message": {"text": "Legacy-named symbol `soorgaai_blueprint_v1` in frontend/company-strategy/company-strategy.js:39"}, "properties": {"repobilityId": "4869f8140e2338ae", "scanner": "scanner-primary", "fingerprint": "374c828e306a790a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-665907fb390a01a9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/login/forgot-password.js:51"}, "properties": {"repobilityId": "1f6109eb73151601", "scanner": "scanner-primary", "fingerprint": "665907fb390a01a9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ce1e4e3affca26c6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/login/login.js:200"}, "properties": {"repobilityId": "e5d3a2ed4dc8ccc1", "scanner": "scanner-primary", "fingerprint": "ce1e4e3affca26c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4ba872750246c905", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/login/reset-password.js:74"}, "properties": {"repobilityId": "25e3415a807f7d6c", "scanner": "scanner-primary", "fingerprint": "4ba872750246c905", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bf774c783bd00954", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/dashboard/js/core/auth.js:59"}, "properties": {"repobilityId": "8e577489d4b5b475", "scanner": "scanner-primary", "fingerprint": "bf774c783bd00954", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-69289f3ee56df531", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/dashboard/js/features/loadsignal.js:45"}, "properties": {"repobilityId": "19599847f1b1b55d", "scanner": "scanner-primary", "fingerprint": "69289f3ee56df531", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-051d9a09be5fd19a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/signup/signup.js:20"}, "properties": {"repobilityId": "a92bd42c89e484af", "scanner": "scanner-primary", "fingerprint": "051d9a09be5fd19a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-963b0aefb90f5e49", "level": "note", "message": {"text": "Legacy-named symbol `soorgaai_blueprint_v1` in frontend/workspace/workspace.js:23"}, "properties": {"repobilityId": "c746c46efee60b58", "scanner": "scanner-primary", "fingerprint": "963b0aefb90f5e49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f1419ad8825922d1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/workspace/workspace.js:119"}, "properties": {"repobilityId": "fe564ac940e51d4e", "scanner": "scanner-primary", "fingerprint": "f1419ad8825922d1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ecb3feeb7b3dc5cd", "level": "note", "message": {"text": "Legacy-named symbol `soorgaai_blueprint_v1` in frontend/navbar/navbar.js:145"}, "properties": {"repobilityId": "17d20c063e8b299d", "scanner": "scanner-primary", "fingerprint": "ecb3feeb7b3dc5cd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7423d63d1620d7c5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/admin/dashboard.js:108"}, "properties": {"repobilityId": "accb5280364259c1", "scanner": "scanner-primary", "fingerprint": "7423d63d1620d7c5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-462fba32ee8d4c49", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/admin/login.js:65"}, "properties": {"repobilityId": "9048baa1dcb8f858", "scanner": "scanner-primary", "fingerprint": "462fba32ee8d4c49", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-76442a9cc41591c4", "level": "note", "message": {"text": "Legacy-named symbol `soorgaai_blueprint_v1` in frontend/domain/blueprintStorage.js:7"}, "properties": {"repobilityId": "270fd21af8be9128", "scanner": "scanner-primary", "fingerprint": "76442a9cc41591c4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8f9008395016f627", "level": "note", "message": {"text": "Legacy-named symbol `soorgaai_company_context_v1` in frontend/domain/companyContext.js:17"}, "properties": {"repobilityId": "5091da41c08933c3", "scanner": "scanner-primary", "fingerprint": "8f9008395016f627", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ff18370b78841651", "level": "note", "message": {"text": "Legacy-named symbol `soorgaai_executive_memory_v1` in frontend/domain/advisor.js:44"}, "properties": {"repobilityId": "5f62364027e6a61d", "scanner": "scanner-primary", "fingerprint": "ff18370b78841651", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ceb613f5ba4a9ce2", "level": "none", "message": {"text": "Commented-code block (5 lines) in frontend/domain/advisor.js:138"}, "properties": {"repobilityId": "6276c5ace38c03df", "scanner": "scanner-primary", "fingerprint": "ceb613f5ba4a9ce2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d6a8504b821fa68", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 frontend/domain/advisor.js:671"}, "properties": {"repobilityId": "89514838f21ca595", "scanner": "scanner-primary", "fingerprint": "3d6a8504b821fa68", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ad18ebc422185be5", "level": "note", "message": {"text": "Legacy-named symbol `soorgaai_executive_memory_v1` in frontend/domain/executiveMemory.js:10"}, "properties": {"repobilityId": "0ee6b48c2237c2dc", "scanner": "scanner-primary", "fingerprint": "ad18ebc422185be5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bc43ca64ad5d552a", "level": "none", "message": {"text": "Commented-code block (5 lines) in integration-tests/e2e/command-center.spec.js:118"}, "properties": {"repobilityId": "64e814bd7d414bd0", "scanner": "scanner-primary", "fingerprint": "bc43ca64ad5d552a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d154b39621340a6", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/trunida-backend/services/blueprintSuggestService.js:346"}, "properties": {"repobilityId": "ee717bad26b0967b", "scanner": "scanner-primary", "fingerprint": "7d154b39621340a6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-af022f937dd5b7fd", "level": "note", "message": {"text": "9 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "5597384795dea7a4", "scanner": "scanner-primary", "fingerprint": "af022f937dd5b7fd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "f3cb4a484f10d19d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "d30111cd98938b48", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "78a2ea87b30ec1cd", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "900cf0dba3c52df3", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "4001fad0e063f944", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "9862f5bc79901ae7", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "f3a4dde48e214354", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "fd649d97a88a8ccd", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "4ab0ecacfc1b4cdc", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "191ee202bd778c02", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "46bac16fbc553df7", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "b2abeed30e884234", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-4ff40cb10f7c8519", "level": "note", "message": {"text": "Unused endpoint: USE /api/users"}, "properties": {"repobilityId": "7d87b2ea32cfcbaa", "scanner": "scanner-primary", "fingerprint": "4ff40cb10f7c8519", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e2711b3899e95028", "level": "note", "message": {"text": "Unused endpoint: USE /api/assessment/dynamic"}, "properties": {"repobilityId": "db80b32f2b80b011", "scanner": "scanner-primary", "fingerprint": "e2711b3899e95028", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c46b83706a4786e2", "level": "note", "message": {"text": "Unused endpoint: USE /api/assessment"}, "properties": {"repobilityId": "0578782206bdb092", "scanner": "scanner-primary", "fingerprint": "c46b83706a4786e2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1849ed4960b3a79e", "level": "note", "message": {"text": "Unused endpoint: USE /api/kb"}, "properties": {"repobilityId": "d5a17e3ee57f22bd", "scanner": "scanner-primary", "fingerprint": "1849ed4960b3a79e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2eeaf8c5695bbc33", "level": "note", "message": {"text": "Unused endpoint: USE /api/profile"}, "properties": {"repobilityId": "fab6f298183e48ba", "scanner": "scanner-primary", "fingerprint": "2eeaf8c5695bbc33", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f29e8d5ce947efbb", "level": "note", "message": {"text": "Unused endpoint: USE /api/workspace"}, "properties": {"repobilityId": "22b15fd68966e0d4", "scanner": "scanner-primary", "fingerprint": "f29e8d5ce947efbb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2b92dc87a4256298", "level": "note", "message": {"text": "Unused endpoint: USE /api/chat"}, "properties": {"repobilityId": "50149b2bc8123023", "scanner": "scanner-primary", "fingerprint": "2b92dc87a4256298", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-47e3b5de0c7df69a", "level": "note", "message": {"text": "Unused endpoint: USE /api/strategy-canvas"}, "properties": {"repobilityId": "79f4281e7c2da797", "scanner": "scanner-primary", "fingerprint": "47e3b5de0c7df69a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3aad4a972cc9b4db", "level": "note", "message": {"text": "Unused endpoint: USE /api/company-context"}, "properties": {"repobilityId": "3af6f12baa09b774", "scanner": "scanner-primary", "fingerprint": "3aad4a972cc9b4db", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "f8f149c4e9e58419", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-50c4a3a37e89b9d0", "level": "note", "message": {"text": "Unused endpoint: GET /api/llm-status"}, "properties": {"repobilityId": "c383a4565d149bf5", "scanner": "scanner-primary", "fingerprint": "50c4a3a37e89b9d0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d10e5c556d4bcff6", "level": "note", "message": {"text": "Unused endpoint: GET /capabilities"}, "properties": {"repobilityId": "df10b26e2c0ce452", "scanner": "scanner-primary", "fingerprint": "d10e5c556d4bcff6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-42bb2492a4b0e33c", "level": "note", "message": {"text": "Unused endpoint: GET /blueprint/:capabilityId"}, "properties": {"repobilityId": "6d9824d8323549d8", "scanner": "scanner-primary", "fingerprint": "42bb2492a4b0e33c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c482bd37efb08e2f", "level": "note", "message": {"text": "Unused endpoint: POST /advisor/ask"}, "properties": {"repobilityId": "5f88e9f53c9dd8ea", "scanner": "scanner-primary", "fingerprint": "c482bd37efb08e2f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9e1bdf359579d51f", "level": "note", "message": {"text": "Unused endpoint: POST /blueprint-suggest"}, "properties": {"repobilityId": "06eb668d4d7ce220", "scanner": "scanner-primary", "fingerprint": "9e1bdf359579d51f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d16b1bb2723f51e", "level": "note", "message": {"text": "Unused endpoint: POST /signup"}, "properties": {"repobilityId": "f1499dc88ec79cf1", "scanner": "scanner-primary", "fingerprint": "8d16b1bb2723f51e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-618721b912bad1c2", "level": "note", "message": {"text": "Unused endpoint: POST /login"}, "properties": {"repobilityId": "fe2c1e1abed08dac", "scanner": "scanner-primary", "fingerprint": "618721b912bad1c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fd1dc91abf32142d", "level": "note", "message": {"text": "Unused endpoint: GET /me"}, "properties": {"repobilityId": "2a103e8664bf1c61", "scanner": "scanner-primary", "fingerprint": "fd1dc91abf32142d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4257ec01219aa99a", "level": "note", "message": {"text": "Unused endpoint: POST /forgot-password"}, "properties": {"repobilityId": "b39b238b7503ece3", "scanner": "scanner-primary", "fingerprint": "4257ec01219aa99a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-68a5d356c0cac9e3", "level": "note", "message": {"text": "Unused endpoint: POST /reset-password"}, "properties": {"repobilityId": "1148f21979890cb2", "scanner": "scanner-primary", "fingerprint": "68a5d356c0cac9e3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-970eb92d6ec2bfaa", "level": "note", "message": {"text": "Unused endpoint: POST /generate"}, "properties": {"repobilityId": "eed4dfebe69558d5", "scanner": "scanner-primary", "fingerprint": "970eb92d6ec2bfaa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b78488ca426bf6de", "level": "note", "message": {"text": "Unused endpoint: POST /approve"}, "properties": {"repobilityId": "1da9c24ff2b42440", "scanner": "scanner-primary", "fingerprint": "b78488ca426bf6de", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3b30f4c0994a30b4", "level": "note", "message": {"text": "Unused endpoint: DELETE /"}, "properties": {"repobilityId": "8b1ea7745839bcd4", "scanner": "scanner-primary", "fingerprint": "3b30f4c0994a30b4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "0d490a5608bc2e7a", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6d05b1f5adfd3eac", "level": "note", "message": {"text": "Unused endpoint: PATCH /"}, "properties": {"repobilityId": "71cf942aa8a0b86a", "scanner": "scanner-primary", "fingerprint": "6d05b1f5adfd3eac", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-92efb2dc9205e7a4", "level": "note", "message": {"text": "Unused endpoint: POST /sessions"}, "properties": {"repobilityId": "a9dca7592cd38971", "scanner": "scanner-primary", "fingerprint": "92efb2dc9205e7a4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3b4e8fad68f55af4", "level": "note", "message": {"text": "Unused endpoint: POST /sessions/:id/discover"}, "properties": {"repobilityId": "4684306486c74f39", "scanner": "scanner-primary", "fingerprint": "3b4e8fad68f55af4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8244a0baa0a3a577", "level": "note", "message": {"text": "Unused endpoint: POST /sessions/:id/questions"}, "properties": {"repobilityId": "e6d6b6b25db8f135", "scanner": "scanner-primary", "fingerprint": "8244a0baa0a3a577", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3fe19966033c62be", "level": "note", "message": {"text": "Unused endpoint: POST /sessions/:id/answers"}, "properties": {"repobilityId": "2621b90b6e729f35", "scanner": "scanner-primary", "fingerprint": "3fe19966033c62be", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-705591b11ba78b85", "level": "note", "message": {"text": "Unused endpoint: GET /sessions/:id"}, "properties": {"repobilityId": "3e2fa23750ac8fc9", "scanner": "scanner-primary", "fingerprint": "705591b11ba78b85", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bff5cf1d32e524d5", "level": "note", "message": {"text": "Unused endpoint: POST /sessions/:id/score"}, "properties": {"repobilityId": "7430815ba03c81ca", "scanner": "scanner-primary", "fingerprint": "bff5cf1d32e524d5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-24127e99f5c184fb", "level": "note", "message": {"text": "Unused endpoint: GET /state"}, "properties": {"repobilityId": "ad41b1f7ee2c5e7a", "scanner": "scanner-primary", "fingerprint": "24127e99f5c184fb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6ad2194d377bd37e", "level": "note", "message": {"text": "Unused endpoint: GET /domains"}, "properties": {"repobilityId": "b0e193b89b974d46", "scanner": "scanner-primary", "fingerprint": "6ad2194d377bd37e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7b01f85b4855fe2a", "level": "note", "message": {"text": "Unused endpoint: GET /questions"}, "properties": {"repobilityId": "39e95bb96040f0fd", "scanner": "scanner-primary", "fingerprint": "7b01f85b4855fe2a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-81dd947d0ca809c7", "level": "note", "message": {"text": "Unused endpoint: POST /submit"}, "properties": {"repobilityId": "8b1da2c6cb9a94a7", "scanner": "scanner-primary", "fingerprint": "81dd947d0ca809c7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-88d8b3004a39cf4b", "level": "note", "message": {"text": "Unused endpoint: GET /my-assessments"}, "properties": {"repobilityId": "0832de02d2e3679e", "scanner": "scanner-primary", "fingerprint": "88d8b3004a39cf4b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-abdc56add267ebde", "level": "note", "message": {"text": "Unused endpoint: GET /results/:id"}, "properties": {"repobilityId": "c08e3f46fbc5943b", "scanner": "scanner-primary", "fingerprint": "abdc56add267ebde", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1f94c41822799d31", "level": "note", "message": {"text": "Unused endpoint: POST /report/:id"}, "properties": {"repobilityId": "1556e120e58a4dd8", "scanner": "scanner-primary", "fingerprint": "1f94c41822799d31", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dc755150645271b5", "level": "note", "message": {"text": "Unused endpoint: GET /report/:id"}, "properties": {"repobilityId": "d2f9b0006db6a2b5", "scanner": "scanner-primary", "fingerprint": "dc755150645271b5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b63da4853e3e9d15", "level": "note", "message": {"text": "Unused endpoint: GET /admin/all"}, "properties": {"repobilityId": "65ecd9ed4b8e5b10", "scanner": "scanner-primary", "fingerprint": "b63da4853e3e9d15", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-391730ec7f93251e", "level": "note", "message": {"text": "Unused endpoint: GET /maturity-stages"}, "properties": {"repobilityId": "e6b3310d8e5592b3", "scanner": "scanner-primary", "fingerprint": "391730ec7f93251e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-28c6bedcd32e51d0", "level": "note", "message": {"text": "Unused endpoint: GET /focus-areas"}, "properties": {"repobilityId": "2eefc531b813ca3e", "scanner": "scanner-primary", "fingerprint": "28c6bedcd32e51d0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e7483c83fcdb8da9", "level": "note", "message": {"text": "Unused endpoint: GET /domain-studies/:domain"}, "properties": {"repobilityId": "bf18443efc3a56b8", "scanner": "scanner-primary", "fingerprint": "e7483c83fcdb8da9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-afa4034361159a8a", "level": "note", "message": {"text": "Unused endpoint: POST /:domainId/message"}, "properties": {"repobilityId": "ba76ead218932f88", "scanner": "scanner-primary", "fingerprint": "afa4034361159a8a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0ad9879c5c71fd9c", "level": "note", "message": {"text": "Unused endpoint: GET /:domainId/history"}, "properties": {"repobilityId": "c4ba7d06f7b75b0c", "scanner": "scanner-primary", "fingerprint": "0ad9879c5c71fd9c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c604ab40799e940e", "level": "note", "message": {"text": "Unused endpoint: GET /:domainId/canvas"}, "properties": {"repobilityId": "17eccabef5d21fdf", "scanner": "scanner-primary", "fingerprint": "c604ab40799e940e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-77aad223bf47e7b9", "level": "note", "message": {"text": "Unused endpoint: GET /:domainId/suggested-prompts"}, "properties": {"repobilityId": "73d16047618324db", "scanner": "scanner-primary", "fingerprint": "77aad223bf47e7b9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}