{"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-487270f530b1de19", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/VaultGraph3D.tsx:503", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/VaultGraph3D.tsx:503"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4caa90d9df083cc6", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/HermesMCPCatalog.tsx:182", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/HermesMCPCatalog.tsx:182"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ced2b5f94332a555", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/ActivityStream.tsx:63", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/ActivityStream.tsx:63"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4da6dc2c40bd616d", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/SEOView.tsx:585", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/SEOView.tsx:585"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-39c5a0aa09febc29", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/VideoStudio.tsx:238", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/VideoStudio.tsx:238"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2bcf3d0736fa6008", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/Vitals.tsx:45", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/Vitals.tsx:45"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b1216b251dcbc473", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/MemoryPanel.tsx:140", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/MemoryPanel.tsx:140"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c12b0f91a2a7ead4", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/ClaudeWorkspace.tsx:114", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/ClaudeWorkspace.tsx:114"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aae6d38dbc58610c", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/OpenClawPanel.tsx:62", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/OpenClawPanel.tsx:62"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c423a772483c2b8", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/SpeakBuild.tsx:224", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/SpeakBuild.tsx:224"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-24a657532812cd03", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/PipelineView.tsx:233", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/PipelineView.tsx:233"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5b9a3fa542f758e9", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/AntigravityView.tsx:147", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/AntigravityView.tsx:147"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-24d0e7db42c13e0a", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/KanbanView.tsx:408", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/KanbanView.tsx:408"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8a383ee0d3bbcd68", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/GoalLogStream.tsx:241", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/GoalLogStream.tsx:241"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4bd646d192bf15a9", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/OpenClawWorkspace.tsx:235", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/OpenClawWorkspace.tsx:235"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5ad4c9dbd8e8f786", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/JarvisBuilds.tsx:91", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/JarvisBuilds.tsx:91"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a6bbcf491b284a97", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/HermesGoals.tsx:271", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/HermesGoals.tsx:271"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed407c758b73b8a7", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/GroupChatView.tsx:136", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/GroupChatView.tsx:136"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8a87b9ded3fffec6", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/CodexView.tsx:547", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/CodexView.tsx:547"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-da2dde1a29724fbe", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/UltracodeView.tsx:282", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/UltracodeView.tsx:282"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-30ad7a4942f1b67d", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/NotebookView.tsx:425", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/NotebookView.tsx:425"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-80ded9463547361f", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/FreeClaudePanel.tsx:463", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/FreeClaudePanel.tsx:463"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ce1c9202663a7cd8", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/HermesWorkspace.tsx:184", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/HermesWorkspace.tsx:184"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7362746e500ce7f8", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/JarvisView.tsx:306", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/JarvisView.tsx:306"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8b6df1aa0a75e868", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/HermesPanel.tsx:54", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/HermesPanel.tsx:54"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d8995018d22284da", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/MemoryGalaxy.tsx:325", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/MemoryGalaxy.tsx:325"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e06f3f5322002713", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/OpenClawStudio.tsx:440", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/OpenClawStudio.tsx:440"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-338cca61949bff52", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/AgentPortal.tsx:73", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/AgentPortal.tsx:73"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dad15c1aac65808e", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/app/hermes/page.tsx:127", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/app/hermes/page.tsx:127"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-81ac31879fd17d41", "name": "`truncate` class without `title=` for hover reveal \u2014 source/src/app/paperclip/page.tsx:103", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/app/paperclip/page.tsx:103"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0bab591c2aae66f0", "name": "Insecure pattern 'node_child_process' in source/README.md:152", "shortDescription": {"text": "Insecure pattern 'node_child_process' in source/README.md:152"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b486c7de80362dbd", "name": "Insecure pattern 'exec_used' in source/src/app/api/thumbnails/generate/route.ts:71", "shortDescription": {"text": "Insecure pattern 'exec_used' in source/src/app/api/thumbnails/generate/route.ts:71"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3df2ccbe33d5f894", "name": "Insecure pattern 'node_child_process' in source/src/app/api/thumbnails/generate/route.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/thumbnails/generate/route.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bbf177a5c38447af", "name": "Insecure pattern 'node_child_process' in source/src/app/api/openclaw/studio/stt/route.ts:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/openclaw/studio/stt/route.ts:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5ba04970561b7318", "name": "Insecure pattern 'node_child_process' in source/src/app/api/hermes/goals/route.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/hermes/goals/route.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0b6b8dfaed96e371", "name": "Insecure pattern 'node_child_process' in source/src/app/api/hermes/mcp/install/route.ts:16", "shortDescription": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/hermes/mcp/install/route.ts:16"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fe47ec31e830e83b", "name": "Insecure pattern 'node_child_process' in source/src/app/api/hermes/dashboard/route.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/hermes/dashboard/route.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-966122a77ae2c49f", "name": "Insecure pattern 'node_child_process' in source/src/app/api/codex/goals/route.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/codex/goals/route.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-399b92b395a35fe8", "name": "Insecure pattern 'node_child_process' in source/src/app/api/notebooklm/artifact/download/route.ts:7", "shortDescription": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/notebooklm/artifact/download/route.ts:7"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7f626369ae2953d6", "name": "Insecure pattern 'node_child_process' in source/src/app/api/video/hyperframes/init/route.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/video/hyperframes/init/route.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8e39e081c119a94a", "name": "Insecure pattern 'node_child_process' in source/src/app/api/video/hyperframes/render/route.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/video/hyperframes/render/route.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ed54ce2b477b85bf", "name": "Insecure pattern 'node_child_process' in source/src/app/api/seo/deploy/route.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/seo/deploy/route.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d41e53c87fd66f19", "name": "Insecure pattern 'node_child_process' in source/src/lib/config.ts:12", "shortDescription": {"text": "Insecure pattern 'node_child_process' in source/src/lib/config.ts:12"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-63ef9fee7101078e", "name": "Insecure pattern 'node_child_process' in source/src/lib/hermesPhone.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in source/src/lib/hermesPhone.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d30cf9bf5def2c16", "name": "Insecure pattern 'node_child_process' in source/src/lib/ultracodeProcs.ts:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in source/src/lib/ultracodeProcs.ts:13"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1124b2831bcb109c", "name": "Insecure pattern 'node_child_process' in source/src/lib/hermesJarvis.ts:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in source/src/lib/hermesJarvis.ts:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e650e1542e8ad50d", "name": "Insecure pattern 'node_child_process' in source/src/lib/runner.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in source/src/lib/runner.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e2cbc939572dd16b", "name": "Insecure pattern 'node_child_process' in source/src/lib/pipeline.ts:8", "shortDescription": {"text": "Insecure pattern 'node_child_process' in source/src/lib/pipeline.ts:8"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-d460d3db79cadad0", "name": "Very large file: source/src/components/HermesMCPCatalog.tsx (1245 lines)", "shortDescription": {"text": "Very large file: source/src/components/HermesMCPCatalog.tsx (1245 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b58f344610a224f8", "name": "Very large file: source/src/components/CodexView.tsx (1025 lines)", "shortDescription": {"text": "Very large file: source/src/components/CodexView.tsx (1025 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7f6476f608027557", "name": "Very large file: source/src/components/JarvisView.tsx (958 lines)", "shortDescription": {"text": "Very large file: source/src/components/JarvisView.tsx (958 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-086a5a7d15696a37", "name": "Very large file: source/src/components/OpenClawStudio.tsx (1643 lines)", "shortDescription": {"text": "Very large file: source/src/components/OpenClawStudio.tsx (1643 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 259 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 31 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 75 placeholder/mock markers across 29 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. 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": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci, tests. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3c9741738a87857", "name": "Agent authority lacks a verifier contract: source/.claude/launch.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: source/.claude/launch.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-30cf857ad8d96f31", "name": "Blocking `urllib.request.urlopen(...)` inside `async def run` \u2014 source/scripts/verify_build.py:47", "shortDescription": {"text": "Blocking `urllib.request.urlopen(...)` inside `async def run` \u2014 source/scripts/verify_build.py:47"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `urllib.request.urlopen(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-271429fa701fd717", "name": "Blocking `time.sleep(...)` inside `async def run` \u2014 source/scripts/verify_build.py:50", "shortDescription": {"text": "Blocking `time.sleep(...)` inside `async def run` \u2014 source/scripts/verify_build.py:50"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `time.sleep(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-628897ff0d97091c", "name": "Commented-code block (6 lines) in source/src/components/HermesMCPCatalog.tsx:5", "shortDescription": {"text": "Commented-code block (6 lines) in source/src/components/HermesMCPCatalog.tsx:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-60bd159cf08e8881", "name": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/HermesManage.tsx:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/HermesManage.tsx:26"}, "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-8f1cfd63e95656ce", "name": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/SEOView.tsx:148", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/SEOView.tsx:148"}, "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-531f96e5365a0495", "name": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/VideoStudio.tsx:174", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/VideoStudio.tsx:174"}, "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-96d01638de3859dc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/MemoryPanel.tsx:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/MemoryPanel.tsx:58"}, "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-e322ee3dc8b70cee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/GoalsView.tsx:45", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/GoalsView.tsx: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-01c9fe5bbf547200", "name": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/UnifiedChat.tsx:126", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/UnifiedChat.tsx:126"}, "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-25f46dfa13539174", "name": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/HermesGoals.tsx:152", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/HermesGoals.tsx:152"}, "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-00db05ed8917b680", "name": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/GroupChatView.tsx:36", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/GroupChatView.tsx:36"}, "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-0d3462bbfba92cfe", "name": "Commented-code block (5 lines) in source/src/components/CodexView.tsx:12", "shortDescription": {"text": "Commented-code block (5 lines) in source/src/components/CodexView.tsx:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4087aa721cb334e4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/CodexView.tsx:307", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/CodexView.tsx:307"}, "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-bd9de17922a1d53e", "name": "Commented-code block (8 lines) in source/src/components/FreeClaudePanel.tsx:34", "shortDescription": {"text": "Commented-code block (8 lines) in source/src/components/FreeClaudePanel.tsx:34"}, "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-6db049b7d3af6665", "name": "Commented-code block (5 lines) in source/src/components/MemoryGalaxy.tsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in source/src/components/MemoryGalaxy.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6d6e12cd8ce6252d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/HermesPhone.tsx:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/HermesPhone.tsx:58"}, "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-ed23fbf33fb183e4", "name": "Commented-code block (6 lines) in source/src/components/OpenClawStudio.tsx:12", "shortDescription": {"text": "Commented-code block (6 lines) in source/src/components/OpenClawStudio.tsx:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-09942a7eafc5d5ce", "name": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/OpenClawStudio.tsx:332", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/OpenClawStudio.tsx:332"}, "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-806e0328a18905fe", "name": "Commented-code block (7 lines) in source/src/components/MiniMaxVoiceAgent.tsx:6", "shortDescription": {"text": "Commented-code block (7 lines) in source/src/components/MiniMaxVoiceAgent.tsx:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dcaf162685c71f3d", "name": "Commented-code block (6 lines) in source/src/app/api/openclaw/studio/image/route.ts:11", "shortDescription": {"text": "Commented-code block (6 lines) in source/src/app/api/openclaw/studio/image/route.ts:11"}, "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-853d98cb8ca9dae6", "name": "Commented-code block (5 lines) in source/src/app/api/openclaw/studio/xsearch/route.ts:35", "shortDescription": {"text": "Commented-code block (5 lines) in source/src/app/api/openclaw/studio/xsearch/route.ts:35"}, "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-b68d25fa074203f6", "name": "Commented-code block (6 lines) in source/src/app/api/hermes/goals/route.ts:13", "shortDescription": {"text": "Commented-code block (6 lines) in source/src/app/api/hermes/goals/route.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d967c9856972e824", "name": "Commented-code block (5 lines) in source/src/app/api/hermes/goals/preview/[...path]/route.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in source/src/app/api/hermes/goals/preview/[...path]/route.ts:11"}, "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-e261a27e538c4aca", "name": "Legacy-named symbol `t2a_v2` in source/src/app/api/hermes/tts/route.ts:53", "shortDescription": {"text": "Legacy-named symbol `t2a_v2` in source/src/app/api/hermes/tts/route.ts:53"}, "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-623ea0bfb2482ec6", "name": "Commented-code block (6 lines) in source/src/app/api/hermes/tts/route.ts:8", "shortDescription": {"text": "Commented-code block (6 lines) in source/src/app/api/hermes/tts/route.ts:8"}, "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-2daeeed59cd24349", "name": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/app/api/hermes/tts/route.ts:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/app/api/hermes/tts/route.ts:32"}, "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-e6d28293bacd0b8b", "name": "Commented-code block (5 lines) in source/src/app/api/hermes/mcp/install/route.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in source/src/app/api/hermes/mcp/install/route.ts:8"}, "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-e93fea5faaa3a3ce", "name": "Commented-code block (5 lines) in source/src/app/api/hermes/kanban/board/route.ts:13", "shortDescription": {"text": "Commented-code block (5 lines) in source/src/app/api/hermes/kanban/board/route.ts:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-87cc32b5561f33d3", "name": "Commented-code block (7 lines) in source/src/app/api/hermes/chat/route.ts:22", "shortDescription": {"text": "Commented-code block (7 lines) in source/src/app/api/hermes/chat/route.ts:22"}, "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-e9b033cf143807f4", "name": "Legacy-named symbol `t2a_v2` in source/src/app/api/hermes/studio/generate/route.ts:97", "shortDescription": {"text": "Legacy-named symbol `t2a_v2` in source/src/app/api/hermes/studio/generate/route.ts:97"}, "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-4d4cc28749503c81", "name": "Commented-code block (5 lines) in source/src/app/api/hermes/studio/generate/route.ts:14", "shortDescription": {"text": "Commented-code block (5 lines) in source/src/app/api/hermes/studio/generate/route.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fef738a5d96f40d4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/app/api/hermes/studio/generate/route.ts:89", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/app/api/hermes/studio/generate/route.ts:89"}, "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-4169111e61391e7f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/app/api/hermes/studio/video-status/route.ts:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/app/api/hermes/studio/video-status/route.ts:26"}, "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-0f62b79758402492", "name": "Legacy-named symbol `t2a_v2` in source/src/app/api/hermes/talk/route.ts:57", "shortDescription": {"text": "Legacy-named symbol `t2a_v2` in source/src/app/api/hermes/talk/route.ts:57"}, "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-1dc9bd63f87fee10", "name": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/app/api/hermes/talk/route.ts:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/app/api/hermes/talk/route.ts:40"}, "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-98576e1d55e55543", "name": "Commented-code block (8 lines) in source/src/app/api/antigravity/preview/[...path]/route.ts:14", "shortDescription": {"text": "Commented-code block (8 lines) in source/src/app/api/antigravity/preview/[...path]/route.ts:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-071a0c7efda55811", "name": "Commented-code block (5 lines) in source/src/app/api/freeclaude/chat/route.ts:56", "shortDescription": {"text": "Commented-code block (5 lines) in source/src/app/api/freeclaude/chat/route.ts:56"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a81722edbd2fe40b", "name": "Commented-code block (5 lines) in source/src/app/api/codex/goals/route.ts:12", "shortDescription": {"text": "Commented-code block (5 lines) in source/src/app/api/codex/goals/route.ts:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d7985aae06fcb5b4", "name": "Commented-code block (5 lines) in source/src/app/api/codex/preview/[...path]/route.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in source/src/app/api/codex/preview/[...path]/route.ts:11"}, "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-2150f83058e45a75", "name": "Commented-code block (7 lines) in source/src/app/api/gemini/chat/route.ts:6", "shortDescription": {"text": "Commented-code block (7 lines) in source/src/app/api/gemini/chat/route.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2ed43921184e50cb", "name": "Commented-code block (5 lines) in source/src/app/api/claude/chat/route.ts:20", "shortDescription": {"text": "Commented-code block (5 lines) in source/src/app/api/claude/chat/route.ts:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8630d7886866fa3a", "name": "Commented-code block (5 lines) in source/src/app/api/seo/index/route.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in source/src/app/api/seo/index/route.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-097f612768ca516e", "name": "Commented-code block (6 lines) in source/src/lib/config.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in source/src/lib/config.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f0ef0946f6b0ae1", "name": "Commented-code block (5 lines) in source/src/lib/claudeWorkspace.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in source/src/lib/claudeWorkspace.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fa9646a9863add7e", "name": "Commented-code block (8 lines) in source/src/lib/codexGoals.ts:3", "shortDescription": {"text": "Commented-code block (8 lines) in source/src/lib/codexGoals.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c654227f737cfff", "name": "Commented-code block (5 lines) in source/src/lib/ultracodeProcs.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in source/src/lib/ultracodeProcs.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6ee8450cc826a502", "name": "Commented-code block (7 lines) in source/src/lib/videoWorkspace.ts:4", "shortDescription": {"text": "Commented-code block (7 lines) in source/src/lib/videoWorkspace.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04fb96b06f30082a", "name": "Commented-code block (9 lines) in source/src/lib/ultracodeRuns.ts:8", "shortDescription": {"text": "Commented-code block (9 lines) in source/src/lib/ultracodeRuns.ts:8"}, "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-66991d1ed64c344c", "name": "Commented-code block (5 lines) in source/src/lib/jarvisLog.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in source/src/lib/jarvisLog.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-175a592fe6e5bc16", "name": "Commented-code block (6 lines) in source/src/lib/ruflo.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in source/src/lib/ruflo.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4fd48d99719d6c59", "name": "Commented-code block (5 lines) in source/src/lib/codexWorkspace.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in source/src/lib/codexWorkspace.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-745bd7e0342492b1", "name": "Commented-code block (10 lines) in source/src/lib/openclawWorkspace.ts:5", "shortDescription": {"text": "Commented-code block (10 lines) in source/src/lib/openclawWorkspace.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-17e317fbd34c7c9f", "name": "Commented-code block (5 lines) in source/src/lib/hermesMcp.ts:105", "shortDescription": {"text": "Commented-code block (5 lines) in source/src/lib/hermesMcp.ts:105"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-85341515b58a76c8", "name": "Legacy-named symbol `chatcompletion_v2` in source/src/lib/hermesJarvis.ts:185", "shortDescription": {"text": "Legacy-named symbol `chatcompletion_v2` in source/src/lib/hermesJarvis.ts:185"}, "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-992d9574ae3f6c23", "name": "Commented-code block (6 lines) in source/src/lib/hermesJarvis.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in source/src/lib/hermesJarvis.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-55c9f580446b7334", "name": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/lib/heygen.ts:101", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/lib/heygen.ts:101"}, "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}}]}}, "automationDetails": {"id": "repobility/23428"}, "properties": {"repository": "yuriiss/maven-os", "repoUrl": "https://github.com/yuriiss/maven-os", "branch": "main"}, "results": [{"ruleId": "scanner-487270f530b1de19", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/VaultGraph3D.tsx:503"}, "properties": {"repobilityId": "ac53426137607ee6", "scanner": "scanner-primary", "fingerprint": "487270f530b1de19", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4caa90d9df083cc6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/HermesMCPCatalog.tsx:182"}, "properties": {"repobilityId": "8feb9f4430731b9f", "scanner": "scanner-primary", "fingerprint": "4caa90d9df083cc6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ced2b5f94332a555", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/ActivityStream.tsx:63"}, "properties": {"repobilityId": "5900b476adb82e0c", "scanner": "scanner-primary", "fingerprint": "ced2b5f94332a555", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4da6dc2c40bd616d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/SEOView.tsx:585"}, "properties": {"repobilityId": "42d7831bf2fd5f43", "scanner": "scanner-primary", "fingerprint": "4da6dc2c40bd616d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-39c5a0aa09febc29", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/VideoStudio.tsx:238"}, "properties": {"repobilityId": "2f7f8dccf41b0515", "scanner": "scanner-primary", "fingerprint": "39c5a0aa09febc29", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2bcf3d0736fa6008", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/Vitals.tsx:45"}, "properties": {"repobilityId": "39d0620a5873bcc3", "scanner": "scanner-primary", "fingerprint": "2bcf3d0736fa6008", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b1216b251dcbc473", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/MemoryPanel.tsx:140"}, "properties": {"repobilityId": "b27ffbf3ffb7b84d", "scanner": "scanner-primary", "fingerprint": "b1216b251dcbc473", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c12b0f91a2a7ead4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/ClaudeWorkspace.tsx:114"}, "properties": {"repobilityId": "7da7a032f170d63e", "scanner": "scanner-primary", "fingerprint": "c12b0f91a2a7ead4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aae6d38dbc58610c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/OpenClawPanel.tsx:62"}, "properties": {"repobilityId": "cf2eb4f957d2aa30", "scanner": "scanner-primary", "fingerprint": "aae6d38dbc58610c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5c423a772483c2b8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/SpeakBuild.tsx:224"}, "properties": {"repobilityId": "492093b2f56aad9e", "scanner": "scanner-primary", "fingerprint": "5c423a772483c2b8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-24a657532812cd03", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/PipelineView.tsx:233"}, "properties": {"repobilityId": "11fd043884e33b95", "scanner": "scanner-primary", "fingerprint": "24a657532812cd03", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5b9a3fa542f758e9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/AntigravityView.tsx:147"}, "properties": {"repobilityId": "cfe9a55ddfbf399d", "scanner": "scanner-primary", "fingerprint": "5b9a3fa542f758e9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-24d0e7db42c13e0a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/KanbanView.tsx:408"}, "properties": {"repobilityId": "384dbbcedcd8033f", "scanner": "scanner-primary", "fingerprint": "24d0e7db42c13e0a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8a383ee0d3bbcd68", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/GoalLogStream.tsx:241"}, "properties": {"repobilityId": "0897ab2f86b1b07b", "scanner": "scanner-primary", "fingerprint": "8a383ee0d3bbcd68", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4bd646d192bf15a9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/OpenClawWorkspace.tsx:235"}, "properties": {"repobilityId": "df63ce35b873f871", "scanner": "scanner-primary", "fingerprint": "4bd646d192bf15a9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5ad4c9dbd8e8f786", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/JarvisBuilds.tsx:91"}, "properties": {"repobilityId": "6431debf45eaef5b", "scanner": "scanner-primary", "fingerprint": "5ad4c9dbd8e8f786", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a6bbcf491b284a97", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/HermesGoals.tsx:271"}, "properties": {"repobilityId": "9f085e71e5ee9c26", "scanner": "scanner-primary", "fingerprint": "a6bbcf491b284a97", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ed407c758b73b8a7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/GroupChatView.tsx:136"}, "properties": {"repobilityId": "60150c46c0c9e4ec", "scanner": "scanner-primary", "fingerprint": "ed407c758b73b8a7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8a87b9ded3fffec6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/CodexView.tsx:547"}, "properties": {"repobilityId": "63e402c1d168d428", "scanner": "scanner-primary", "fingerprint": "8a87b9ded3fffec6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-da2dde1a29724fbe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/UltracodeView.tsx:282"}, "properties": {"repobilityId": "9bbd7568b455b897", "scanner": "scanner-primary", "fingerprint": "da2dde1a29724fbe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-30ad7a4942f1b67d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/NotebookView.tsx:425"}, "properties": {"repobilityId": "b9d74bb735090513", "scanner": "scanner-primary", "fingerprint": "30ad7a4942f1b67d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-80ded9463547361f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/FreeClaudePanel.tsx:463"}, "properties": {"repobilityId": "3303fd9ac4e1f23d", "scanner": "scanner-primary", "fingerprint": "80ded9463547361f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ce1c9202663a7cd8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/HermesWorkspace.tsx:184"}, "properties": {"repobilityId": "6626bd7efba77481", "scanner": "scanner-primary", "fingerprint": "ce1c9202663a7cd8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7362746e500ce7f8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/JarvisView.tsx:306"}, "properties": {"repobilityId": "0fa4163beddb32c8", "scanner": "scanner-primary", "fingerprint": "7362746e500ce7f8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8b6df1aa0a75e868", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/HermesPanel.tsx:54"}, "properties": {"repobilityId": "0f28b869614f60e5", "scanner": "scanner-primary", "fingerprint": "8b6df1aa0a75e868", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d8995018d22284da", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/MemoryGalaxy.tsx:325"}, "properties": {"repobilityId": "9329a953bdf2e4f7", "scanner": "scanner-primary", "fingerprint": "d8995018d22284da", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e06f3f5322002713", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/OpenClawStudio.tsx:440"}, "properties": {"repobilityId": "74b7ba6df302170c", "scanner": "scanner-primary", "fingerprint": "e06f3f5322002713", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-338cca61949bff52", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/components/AgentPortal.tsx:73"}, "properties": {"repobilityId": "4fc6f580d44b2511", "scanner": "scanner-primary", "fingerprint": "338cca61949bff52", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dad15c1aac65808e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/app/hermes/page.tsx:127"}, "properties": {"repobilityId": "664eeced1f3f479b", "scanner": "scanner-primary", "fingerprint": "dad15c1aac65808e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-81ac31879fd17d41", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 source/src/app/paperclip/page.tsx:103"}, "properties": {"repobilityId": "dee9c60c9bddbdff", "scanner": "scanner-primary", "fingerprint": "81ac31879fd17d41", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0bab591c2aae66f0", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in source/README.md:152"}, "properties": {"repobilityId": "d8507e18e17627f3", "scanner": "scanner-primary", "fingerprint": "0bab591c2aae66f0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/README.md"}, "region": {"startLine": 152}}}]}, {"ruleId": "scanner-b486c7de80362dbd", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in source/src/app/api/thumbnails/generate/route.ts:71"}, "properties": {"repobilityId": "184bb19f9e429fa5", "scanner": "scanner-primary", "fingerprint": "b486c7de80362dbd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/src/app/api/thumbnails/generate/route.ts"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-3df2ccbe33d5f894", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/thumbnails/generate/route.ts:2"}, "properties": {"repobilityId": "d1a30abd7b674a28", "scanner": "scanner-primary", "fingerprint": "3df2ccbe33d5f894", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/src/app/api/thumbnails/generate/route.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-bbf177a5c38447af", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/openclaw/studio/stt/route.ts:3"}, "properties": {"repobilityId": "f04a0c110e9fd2ab", "scanner": "scanner-primary", "fingerprint": "bbf177a5c38447af", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/src/app/api/openclaw/studio/stt/route.ts"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-5ba04970561b7318", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/hermes/goals/route.ts:2"}, "properties": {"repobilityId": "1ef874494520e95b", "scanner": "scanner-primary", "fingerprint": "5ba04970561b7318", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/src/app/api/hermes/goals/route.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-0b6b8dfaed96e371", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/hermes/mcp/install/route.ts:16"}, "properties": {"repobilityId": "6b1ea3a2a3a0a719", "scanner": "scanner-primary", "fingerprint": "0b6b8dfaed96e371", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/src/app/api/hermes/mcp/install/route.ts"}, "region": {"startLine": 16}}}]}, {"ruleId": "scanner-fe47ec31e830e83b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/hermes/dashboard/route.ts:2"}, "properties": {"repobilityId": "084ed3800c0cb9a0", "scanner": "scanner-primary", "fingerprint": "fe47ec31e830e83b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/src/app/api/hermes/dashboard/route.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-966122a77ae2c49f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/codex/goals/route.ts:2"}, "properties": {"repobilityId": "69f162b817712e4f", "scanner": "scanner-primary", "fingerprint": "966122a77ae2c49f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/src/app/api/codex/goals/route.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-399b92b395a35fe8", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/notebooklm/artifact/download/route.ts:7"}, "properties": {"repobilityId": "c39e5edf194d0d21", "scanner": "scanner-primary", "fingerprint": "399b92b395a35fe8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/src/app/api/notebooklm/artifact/download/route.ts"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-7f626369ae2953d6", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/video/hyperframes/init/route.ts:2"}, "properties": {"repobilityId": "49ff13709f4c6992", "scanner": "scanner-primary", "fingerprint": "7f626369ae2953d6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/src/app/api/video/hyperframes/init/route.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-8e39e081c119a94a", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/video/hyperframes/render/route.ts:2"}, "properties": {"repobilityId": "2656fd9ab845f657", "scanner": "scanner-primary", "fingerprint": "8e39e081c119a94a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/src/app/api/video/hyperframes/render/route.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-ed54ce2b477b85bf", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in source/src/app/api/seo/deploy/route.ts:1"}, "properties": {"repobilityId": "67eb5f539455e529", "scanner": "scanner-primary", "fingerprint": "ed54ce2b477b85bf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/src/app/api/seo/deploy/route.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d41e53c87fd66f19", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in source/src/lib/config.ts:12"}, "properties": {"repobilityId": "e85f7279b869ce97", "scanner": "scanner-primary", "fingerprint": "d41e53c87fd66f19", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/src/lib/config.ts"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-63ef9fee7101078e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in source/src/lib/hermesPhone.ts:2"}, "properties": {"repobilityId": "eddf7c0cf36bc112", "scanner": "scanner-primary", "fingerprint": "63ef9fee7101078e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/src/lib/hermesPhone.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-d30cf9bf5def2c16", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in source/src/lib/ultracodeProcs.ts:13"}, "properties": {"repobilityId": "6415841cd6a17822", "scanner": "scanner-primary", "fingerprint": "d30cf9bf5def2c16", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/src/lib/ultracodeProcs.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-1124b2831bcb109c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in source/src/lib/hermesJarvis.ts:14"}, "properties": {"repobilityId": "fab9373e57e4acd7", "scanner": "scanner-primary", "fingerprint": "1124b2831bcb109c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/src/lib/hermesJarvis.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-e650e1542e8ad50d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in source/src/lib/runner.ts:1"}, "properties": {"repobilityId": "b554ef5ae00cb051", "scanner": "scanner-primary", "fingerprint": "e650e1542e8ad50d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/src/lib/runner.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e2cbc939572dd16b", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in source/src/lib/pipeline.ts:8"}, "properties": {"repobilityId": "473a98b20a17b5a9", "scanner": "scanner-primary", "fingerprint": "e2cbc939572dd16b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/src/lib/pipeline.ts"}, "region": {"startLine": 8}}}]}, {"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-d460d3db79cadad0", "level": "note", "message": {"text": "Very large file: source/src/components/HermesMCPCatalog.tsx (1245 lines)"}, "properties": {"repobilityId": "12ebd171881f0e9b", "scanner": "scanner-primary", "fingerprint": "d460d3db79cadad0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b58f344610a224f8", "level": "note", "message": {"text": "Very large file: source/src/components/CodexView.tsx (1025 lines)"}, "properties": {"repobilityId": "4493cc39a99c76e4", "scanner": "scanner-primary", "fingerprint": "b58f344610a224f8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7f6476f608027557", "level": "note", "message": {"text": "Very large file: source/src/components/JarvisView.tsx (958 lines)"}, "properties": {"repobilityId": "f33efef744d1b93f", "scanner": "scanner-primary", "fingerprint": "7f6476f608027557", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-086a5a7d15696a37", "level": "note", "message": {"text": "Very large file: source/src/components/OpenClawStudio.tsx (1643 lines)"}, "properties": {"repobilityId": "0f0141d0794577f7", "scanner": "scanner-primary", "fingerprint": "086a5a7d15696a37", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "16fdb72026701742", "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": "36d56cd00d8e5e68", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "bff9854843812923", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "08464d504b114ba4", "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": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "f991d48e842f1ebb", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "e11e1c939df58e72", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "5b289ecbf741b607", "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": "703815756706d0b6", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-c3c9741738a87857", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: source/.claude/launch.json"}, "properties": {"repobilityId": "5f626ae8e92dc4a4", "scanner": "scanner-primary", "fingerprint": "c3c9741738a87857", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/.claude/launch.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-30cf857ad8d96f31", "level": "error", "message": {"text": "Blocking `urllib.request.urlopen(...)` inside `async def run` \u2014 source/scripts/verify_build.py:47"}, "properties": {"repobilityId": "96667158388a4955", "scanner": "scanner-primary", "fingerprint": "30cf857ad8d96f31", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/scripts/verify_build.py"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-271429fa701fd717", "level": "error", "message": {"text": "Blocking `time.sleep(...)` inside `async def run` \u2014 source/scripts/verify_build.py:50"}, "properties": {"repobilityId": "81ca32347b691197", "scanner": "scanner-primary", "fingerprint": "271429fa701fd717", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "source/scripts/verify_build.py"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-628897ff0d97091c", "level": "none", "message": {"text": "Commented-code block (6 lines) in source/src/components/HermesMCPCatalog.tsx:5"}, "properties": {"repobilityId": "fccc3717b7d79fc2", "scanner": "scanner-primary", "fingerprint": "628897ff0d97091c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60bd159cf08e8881", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/HermesManage.tsx:26"}, "properties": {"repobilityId": "5e72c4dc52b5170a", "scanner": "scanner-primary", "fingerprint": "60bd159cf08e8881", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8f1cfd63e95656ce", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/SEOView.tsx:148"}, "properties": {"repobilityId": "34f6f1ee0266de9a", "scanner": "scanner-primary", "fingerprint": "8f1cfd63e95656ce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-531f96e5365a0495", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/VideoStudio.tsx:174"}, "properties": {"repobilityId": "d92822023e4d862e", "scanner": "scanner-primary", "fingerprint": "531f96e5365a0495", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-96d01638de3859dc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/MemoryPanel.tsx:58"}, "properties": {"repobilityId": "a474ee5d41477781", "scanner": "scanner-primary", "fingerprint": "96d01638de3859dc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e322ee3dc8b70cee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/GoalsView.tsx:45"}, "properties": {"repobilityId": "b881fa845c4e152a", "scanner": "scanner-primary", "fingerprint": "e322ee3dc8b70cee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-01c9fe5bbf547200", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/UnifiedChat.tsx:126"}, "properties": {"repobilityId": "87949cee286c08cf", "scanner": "scanner-primary", "fingerprint": "01c9fe5bbf547200", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-25f46dfa13539174", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/HermesGoals.tsx:152"}, "properties": {"repobilityId": "734a10c82d324846", "scanner": "scanner-primary", "fingerprint": "25f46dfa13539174", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-00db05ed8917b680", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/GroupChatView.tsx:36"}, "properties": {"repobilityId": "2cf771f4d5350d2a", "scanner": "scanner-primary", "fingerprint": "00db05ed8917b680", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0d3462bbfba92cfe", "level": "none", "message": {"text": "Commented-code block (5 lines) in source/src/components/CodexView.tsx:12"}, "properties": {"repobilityId": "eaf419cc4b803212", "scanner": "scanner-primary", "fingerprint": "0d3462bbfba92cfe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4087aa721cb334e4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/CodexView.tsx:307"}, "properties": {"repobilityId": "b0ae4a3830955eca", "scanner": "scanner-primary", "fingerprint": "4087aa721cb334e4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bd9de17922a1d53e", "level": "none", "message": {"text": "Commented-code block (8 lines) in source/src/components/FreeClaudePanel.tsx:34"}, "properties": {"repobilityId": "98654318ecdc5c37", "scanner": "scanner-primary", "fingerprint": "bd9de17922a1d53e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6db049b7d3af6665", "level": "none", "message": {"text": "Commented-code block (5 lines) in source/src/components/MemoryGalaxy.tsx:6"}, "properties": {"repobilityId": "dcbb448db31b8bc7", "scanner": "scanner-primary", "fingerprint": "6db049b7d3af6665", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6d6e12cd8ce6252d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/HermesPhone.tsx:58"}, "properties": {"repobilityId": "0971cf9e10677617", "scanner": "scanner-primary", "fingerprint": "6d6e12cd8ce6252d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ed23fbf33fb183e4", "level": "none", "message": {"text": "Commented-code block (6 lines) in source/src/components/OpenClawStudio.tsx:12"}, "properties": {"repobilityId": "702ed46d62ffb1c6", "scanner": "scanner-primary", "fingerprint": "ed23fbf33fb183e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09942a7eafc5d5ce", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/components/OpenClawStudio.tsx:332"}, "properties": {"repobilityId": "c21519b61337130a", "scanner": "scanner-primary", "fingerprint": "09942a7eafc5d5ce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-806e0328a18905fe", "level": "none", "message": {"text": "Commented-code block (7 lines) in source/src/components/MiniMaxVoiceAgent.tsx:6"}, "properties": {"repobilityId": "40accfd3e9751cd4", "scanner": "scanner-primary", "fingerprint": "806e0328a18905fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dcaf162685c71f3d", "level": "none", "message": {"text": "Commented-code block (6 lines) in source/src/app/api/openclaw/studio/image/route.ts:11"}, "properties": {"repobilityId": "fe9d39767a70451c", "scanner": "scanner-primary", "fingerprint": "dcaf162685c71f3d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-853d98cb8ca9dae6", "level": "none", "message": {"text": "Commented-code block (5 lines) in source/src/app/api/openclaw/studio/xsearch/route.ts:35"}, "properties": {"repobilityId": "17132fef8ad87e16", "scanner": "scanner-primary", "fingerprint": "853d98cb8ca9dae6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b68d25fa074203f6", "level": "none", "message": {"text": "Commented-code block (6 lines) in source/src/app/api/hermes/goals/route.ts:13"}, "properties": {"repobilityId": "79a95ec57f5527de", "scanner": "scanner-primary", "fingerprint": "b68d25fa074203f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d967c9856972e824", "level": "none", "message": {"text": "Commented-code block (5 lines) in source/src/app/api/hermes/goals/preview/[...path]/route.ts:11"}, "properties": {"repobilityId": "233e16d094da6eaa", "scanner": "scanner-primary", "fingerprint": "d967c9856972e824", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e261a27e538c4aca", "level": "note", "message": {"text": "Legacy-named symbol `t2a_v2` in source/src/app/api/hermes/tts/route.ts:53"}, "properties": {"repobilityId": "a4d5b13973223edb", "scanner": "scanner-primary", "fingerprint": "e261a27e538c4aca", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-623ea0bfb2482ec6", "level": "none", "message": {"text": "Commented-code block (6 lines) in source/src/app/api/hermes/tts/route.ts:8"}, "properties": {"repobilityId": "13bf502232d9dd24", "scanner": "scanner-primary", "fingerprint": "623ea0bfb2482ec6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2daeeed59cd24349", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/app/api/hermes/tts/route.ts:32"}, "properties": {"repobilityId": "7984335c99478afb", "scanner": "scanner-primary", "fingerprint": "2daeeed59cd24349", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e6d28293bacd0b8b", "level": "none", "message": {"text": "Commented-code block (5 lines) in source/src/app/api/hermes/mcp/install/route.ts:8"}, "properties": {"repobilityId": "df7cb934c8edb05e", "scanner": "scanner-primary", "fingerprint": "e6d28293bacd0b8b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e93fea5faaa3a3ce", "level": "none", "message": {"text": "Commented-code block (5 lines) in source/src/app/api/hermes/kanban/board/route.ts:13"}, "properties": {"repobilityId": "d2ff61aa1c2cd294", "scanner": "scanner-primary", "fingerprint": "e93fea5faaa3a3ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87cc32b5561f33d3", "level": "none", "message": {"text": "Commented-code block (7 lines) in source/src/app/api/hermes/chat/route.ts:22"}, "properties": {"repobilityId": "32bdb49f70da5e9a", "scanner": "scanner-primary", "fingerprint": "87cc32b5561f33d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9b033cf143807f4", "level": "note", "message": {"text": "Legacy-named symbol `t2a_v2` in source/src/app/api/hermes/studio/generate/route.ts:97"}, "properties": {"repobilityId": "0f8b32248e969a45", "scanner": "scanner-primary", "fingerprint": "e9b033cf143807f4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4d4cc28749503c81", "level": "none", "message": {"text": "Commented-code block (5 lines) in source/src/app/api/hermes/studio/generate/route.ts:14"}, "properties": {"repobilityId": "6c13927f1eb95838", "scanner": "scanner-primary", "fingerprint": "4d4cc28749503c81", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fef738a5d96f40d4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/app/api/hermes/studio/generate/route.ts:89"}, "properties": {"repobilityId": "a5c6482c2c165dcd", "scanner": "scanner-primary", "fingerprint": "fef738a5d96f40d4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4169111e61391e7f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/app/api/hermes/studio/video-status/route.ts:26"}, "properties": {"repobilityId": "ae7ec8e90a3cabd6", "scanner": "scanner-primary", "fingerprint": "4169111e61391e7f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0f62b79758402492", "level": "note", "message": {"text": "Legacy-named symbol `t2a_v2` in source/src/app/api/hermes/talk/route.ts:57"}, "properties": {"repobilityId": "bd4897fce1364c90", "scanner": "scanner-primary", "fingerprint": "0f62b79758402492", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1dc9bd63f87fee10", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/app/api/hermes/talk/route.ts:40"}, "properties": {"repobilityId": "fddb5f3de7da4420", "scanner": "scanner-primary", "fingerprint": "1dc9bd63f87fee10", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-98576e1d55e55543", "level": "none", "message": {"text": "Commented-code block (8 lines) in source/src/app/api/antigravity/preview/[...path]/route.ts:14"}, "properties": {"repobilityId": "3069dd4f4911b7bd", "scanner": "scanner-primary", "fingerprint": "98576e1d55e55543", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-071a0c7efda55811", "level": "none", "message": {"text": "Commented-code block (5 lines) in source/src/app/api/freeclaude/chat/route.ts:56"}, "properties": {"repobilityId": "ffa08a187b77112d", "scanner": "scanner-primary", "fingerprint": "071a0c7efda55811", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a81722edbd2fe40b", "level": "none", "message": {"text": "Commented-code block (5 lines) in source/src/app/api/codex/goals/route.ts:12"}, "properties": {"repobilityId": "f2caf825b211008a", "scanner": "scanner-primary", "fingerprint": "a81722edbd2fe40b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7985aae06fcb5b4", "level": "none", "message": {"text": "Commented-code block (5 lines) in source/src/app/api/codex/preview/[...path]/route.ts:11"}, "properties": {"repobilityId": "ae3dafe995fbbf1a", "scanner": "scanner-primary", "fingerprint": "d7985aae06fcb5b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2150f83058e45a75", "level": "none", "message": {"text": "Commented-code block (7 lines) in source/src/app/api/gemini/chat/route.ts:6"}, "properties": {"repobilityId": "93318977990c4c1a", "scanner": "scanner-primary", "fingerprint": "2150f83058e45a75", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2ed43921184e50cb", "level": "none", "message": {"text": "Commented-code block (5 lines) in source/src/app/api/claude/chat/route.ts:20"}, "properties": {"repobilityId": "7e6afd4fa67f25a8", "scanner": "scanner-primary", "fingerprint": "2ed43921184e50cb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8630d7886866fa3a", "level": "none", "message": {"text": "Commented-code block (5 lines) in source/src/app/api/seo/index/route.ts:9"}, "properties": {"repobilityId": "09290160728a6e27", "scanner": "scanner-primary", "fingerprint": "8630d7886866fa3a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-097f612768ca516e", "level": "none", "message": {"text": "Commented-code block (6 lines) in source/src/lib/config.ts:1"}, "properties": {"repobilityId": "bed0785e51b837c7", "scanner": "scanner-primary", "fingerprint": "097f612768ca516e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f0ef0946f6b0ae1", "level": "none", "message": {"text": "Commented-code block (5 lines) in source/src/lib/claudeWorkspace.ts:3"}, "properties": {"repobilityId": "33cf052db1b117e4", "scanner": "scanner-primary", "fingerprint": "3f0ef0946f6b0ae1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa9646a9863add7e", "level": "none", "message": {"text": "Commented-code block (8 lines) in source/src/lib/codexGoals.ts:3"}, "properties": {"repobilityId": "ff8a0aa81fa15d39", "scanner": "scanner-primary", "fingerprint": "fa9646a9863add7e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c654227f737cfff", "level": "none", "message": {"text": "Commented-code block (5 lines) in source/src/lib/ultracodeProcs.ts:3"}, "properties": {"repobilityId": "ef880cec2acdf935", "scanner": "scanner-primary", "fingerprint": "9c654227f737cfff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ee8450cc826a502", "level": "none", "message": {"text": "Commented-code block (7 lines) in source/src/lib/videoWorkspace.ts:4"}, "properties": {"repobilityId": "1e037c926f4afd00", "scanner": "scanner-primary", "fingerprint": "6ee8450cc826a502", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04fb96b06f30082a", "level": "none", "message": {"text": "Commented-code block (9 lines) in source/src/lib/ultracodeRuns.ts:8"}, "properties": {"repobilityId": "2688b3c700f8ef50", "scanner": "scanner-primary", "fingerprint": "04fb96b06f30082a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66991d1ed64c344c", "level": "none", "message": {"text": "Commented-code block (5 lines) in source/src/lib/jarvisLog.ts:3"}, "properties": {"repobilityId": "1bf19a55adbe31fb", "scanner": "scanner-primary", "fingerprint": "66991d1ed64c344c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-175a592fe6e5bc16", "level": "none", "message": {"text": "Commented-code block (6 lines) in source/src/lib/ruflo.ts:3"}, "properties": {"repobilityId": "1ff027bd3b9cbf45", "scanner": "scanner-primary", "fingerprint": "175a592fe6e5bc16", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fd48d99719d6c59", "level": "none", "message": {"text": "Commented-code block (5 lines) in source/src/lib/codexWorkspace.ts:3"}, "properties": {"repobilityId": "77b27c4f9df017ff", "scanner": "scanner-primary", "fingerprint": "4fd48d99719d6c59", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-745bd7e0342492b1", "level": "none", "message": {"text": "Commented-code block (10 lines) in source/src/lib/openclawWorkspace.ts:5"}, "properties": {"repobilityId": "dbae923832d1cd6d", "scanner": "scanner-primary", "fingerprint": "745bd7e0342492b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-17e317fbd34c7c9f", "level": "none", "message": {"text": "Commented-code block (5 lines) in source/src/lib/hermesMcp.ts:105"}, "properties": {"repobilityId": "4146018b3a70610d", "scanner": "scanner-primary", "fingerprint": "17e317fbd34c7c9f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-85341515b58a76c8", "level": "note", "message": {"text": "Legacy-named symbol `chatcompletion_v2` in source/src/lib/hermesJarvis.ts:185"}, "properties": {"repobilityId": "59f484a03df57931", "scanner": "scanner-primary", "fingerprint": "85341515b58a76c8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-992d9574ae3f6c23", "level": "none", "message": {"text": "Commented-code block (6 lines) in source/src/lib/hermesJarvis.ts:3"}, "properties": {"repobilityId": "0180230ff6da43cc", "scanner": "scanner-primary", "fingerprint": "992d9574ae3f6c23", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-55c9f580446b7334", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 source/src/lib/heygen.ts:101"}, "properties": {"repobilityId": "1d3ca8e7b5928530", "scanner": "scanner-primary", "fingerprint": "55c9f580446b7334", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}]}]}