{"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": "AIC003", "name": "Duplicated implementation block across source files", "shortDescription": {"text": "Duplicated implementation block across source files"}, "fullDescription": {"text": "Duplicated blocks are a common artifact when generated code is pasted or recreated instead of reused. They increase maintenance cost because every future bug fix must be found in multiple locations."}, "properties": {"scanner": "repobility-ai-code-hygiene", "category": "quality", "severity": "medium", "confidence": 0.86, "cwe": "", "owasp": ""}}, {"id": "CORE_NO_CI", "name": "No CI/CD configuration found", "shortDescription": {"text": "No CI/CD configuration found"}, "fullDescription": {"text": "Add a CI/CD pipeline: create .github/workflows/ci.yml for GitHub Actions with steps to lint, test, and build on every push and pull request."}, "properties": {"scanner": "repobility-core", "category": "practices", "severity": "medium", "confidence": null, "cwe": "", "owasp": ""}}, {"id": "WEB005", "name": "robots.txt does not advertise a sitemap", "shortDescription": {"text": "robots.txt does not advertise a sitemap"}, "fullDescription": {"text": "Sitemap directives in robots.txt help crawlers and AI agents find the canonical public URL inventory quickly."}, "properties": {"scanner": "repobility-web-presence", "category": "quality", "severity": "low", "confidence": 0.74, "cwe": "", "owasp": ""}}, {"id": "CORE_NO_TESTS", "name": "No test files found", "shortDescription": {"text": "No test files found"}, "fullDescription": {"text": "Add a test directory (tests/ or __tests__/) with unit tests for core functionality. Use pytest (Python), Jest (JS/TS), or go test (Go). Start with tests for critical business logic and security-sensitive functions."}, "properties": {"scanner": "repobility-core", "category": "testing", "severity": "high", "confidence": null, "cwe": "", "owasp": ""}}]}}, "automationDetails": {"id": "repobility/374"}, "properties": {"repository": "macOS26/Agent", "repoUrl": "https://github.com/macOS26/Agent.git", "branch": "main"}, "results": [{"ruleId": "AIC003", "level": "warning", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 12161, "scanner": "repobility-ai-code-hygiene", "fingerprint": "0224bf04e6ddd253b603a6735b69f19f83217692550d6d59e32a2fffc947a0c8", "category": "quality", "severity": "medium", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "Agent/Services/ClaudeService.swift", "duplicate_line": 127, "correlation_key": "fp|0224bf04e6ddd253b603a6735b69f19f83217692550d6d59e32a2fffc947a0c8"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Agent/Services/OllamaService.swift"}, "region": {"startLine": 83}}}]}, {"ruleId": "AIC003", "level": "warning", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 12160, "scanner": "repobility-ai-code-hygiene", "fingerprint": "497a7ed05f015c5d5107a925c48e6f743e11eae360ba433f09dfa78e98a5f10e", "category": "quality", "severity": "medium", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "Agent/Services/AppleIntelligenceMediator.swift", "duplicate_line": 125, "correlation_key": "fp|497a7ed05f015c5d5107a925c48e6f743e11eae360ba433f09dfa78e98a5f10e"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Agent/Services/FoundationModelService.swift"}, "region": {"startLine": 27}}}]}, {"ruleId": "AIC003", "level": "warning", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 12159, "scanner": "repobility-ai-code-hygiene", "fingerprint": "28b6b57d076c8d4c0738dd948c616c3b2b2cef73a290ed9347f4d10aa5be1c51", "category": "quality", "severity": "medium", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "Agent/AgentViewModel/TabHandlers/Web.swift", "duplicate_line": 47, "correlation_key": "fp|28b6b57d076c8d4c0738dd948c616c3b2b2cef73a290ed9347f4d10aa5be1c51"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Agent/AgentViewModel/TaskUtilities/WebToolHandler.swift"}, "region": {"startLine": 28}}}]}, {"ruleId": "AIC003", "level": "warning", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 12158, "scanner": "repobility-ai-code-hygiene", "fingerprint": "3f499ffbe5a31b413d316023e3b7b4b29fad25bdb8f4cd0548dfd4b3af09c3b3", "category": "quality", "severity": "medium", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "Agent/AgentViewModel/TabTask/TT-Triage.swift", "duplicate_line": 26, "correlation_key": "fp|3f499ffbe5a31b413d316023e3b7b4b29fad25bdb8f4cd0548dfd4b3af09c3b3"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Agent/AgentViewModel/TaskExecution/TaskExecution.swift"}, "region": {"startLine": 101}}}]}, {"ruleId": "AIC003", "level": "warning", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 12157, "scanner": "repobility-ai-code-hygiene", "fingerprint": "bf976974177a6efd38256c342af45fb183ef9906c960db7430cb1e60249eabda", "category": "quality", "severity": "medium", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "Agent/AgentViewModel/TabTask/ToolLoop.swift", "duplicate_line": 29, "correlation_key": "fp|bf976974177a6efd38256c342af45fb183ef9906c960db7430cb1e60249eabda"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Agent/AgentViewModel/TaskExecution/Response.swift"}, "region": {"startLine": 52}}}]}, {"ruleId": "AIC003", "level": "warning", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 12156, "scanner": "repobility-ai-code-hygiene", "fingerprint": "69264590d939ef14191f93731bfb860d7d067bf36ac33c8a3ce5e2cdd6e5e24b", "category": "quality", "severity": "medium", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "Agent/AgentViewModel/TabHandlers/FileManager.swift", "duplicate_line": 146, "correlation_key": "fp|69264590d939ef14191f93731bfb860d7d067bf36ac33c8a3ce5e2cdd6e5e24b"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Agent/AgentViewModel/TaskExecution/FileTools.swift"}, "region": {"startLine": 192}}}]}, {"ruleId": "AIC003", "level": "warning", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 12155, "scanner": "repobility-ai-code-hygiene", "fingerprint": "53ee734986d33a926f253f10e815e66a0badde92e2e95aec8fec4e0dbf2c430f", "category": "quality", "severity": "medium", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "Agent/AgentViewModel/TabTask/ErrorHandling.swift", "duplicate_line": 40, "correlation_key": "fp|53ee734986d33a926f253f10e815e66a0badde92e2e95aec8fec4e0dbf2c430f"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Agent/AgentViewModel/TaskExecution/ErrorHandler.swift"}, "region": {"startLine": 88}}}]}, {"ruleId": "AIC003", "level": "warning", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 12154, "scanner": "repobility-ai-code-hygiene", "fingerprint": "b515858df709c199bf7940023f5e201c061e5b199a8865ff61439f76d125b060", "category": "quality", "severity": "medium", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "Agent/AgentViewModel/TabHandlers/Core.swift", "duplicate_line": 42, "correlation_key": "fp|b515858df709c199bf7940023f5e201c061e5b199a8865ff61439f76d125b060"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Agent/AgentViewModel/TabHandlers/Git.swift"}, "region": {"startLine": 69}}}]}, {"ruleId": "AIC003", "level": "warning", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 12153, "scanner": "repobility-ai-code-hygiene", "fingerprint": "7783e51286af4e120d6cecf6541b6c5b48ec3683bf549af50e0a5c5d095cbbcf", "category": "quality", "severity": "medium", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "Agent/AgentViewModel/NativeToolHandlers/Xcode.swift", "duplicate_line": 195, "correlation_key": "fp|7783e51286af4e120d6cecf6541b6c5b48ec3683bf549af50e0a5c5d095cbbcf"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Agent/AgentViewModel/TabHandlers/Automation.swift"}, "region": {"startLine": 35}}}]}, {"ruleId": "AIC003", "level": "warning", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 12152, "scanner": "repobility-ai-code-hygiene", "fingerprint": "2b2ca4d504a1cea73f9d9bf45869653e226ce1a7e23eb4f09e6c606e7a29c08c", "category": "quality", "severity": "medium", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "Agent/AgentViewModel/NativeToolHandlers/NTH-AgentScript.swift", "duplicate_line": 33, "correlation_key": "fp|2b2ca4d504a1cea73f9d9bf45869653e226ce1a7e23eb4f09e6c606e7a29c08c"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Agent/AgentViewModel/TabHandlers/AgentScript.swift"}, "region": {"startLine": 35}}}]}, {"ruleId": "AIC003", "level": "warning", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 12151, "scanner": "repobility-ai-code-hygiene", "fingerprint": "5c76e3885e24e2bca71038224a9164502c6086c10b1a66f47eba6b2e1de07fd1", "category": "quality", "severity": "medium", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "Agent/AgentScriptTabs/ScriptTab.swift", "duplicate_line": 218, "correlation_key": "fp|5c76e3885e24e2bca71038224a9164502c6086c10b1a66f47eba6b2e1de07fd1"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Agent/AgentViewModel/Messages/Logging.swift"}, "region": {"startLine": 431}}}]}, {"ruleId": "AIC003", "level": "warning", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 12150, "scanner": "repobility-ai-code-hygiene", "fingerprint": "8da0f807c1e009cbf27d967d0ec9627f7297364e002b7c1d9c3b2c505a4253e4", "category": "quality", "severity": "medium", "confidence": 0.86, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "A normalized source-code window appears in two different non-test files.", "evidence": {"lines": 12, "rule_id": "AIC003", "scanner": "repobility-ai-code-hygiene", "references": ["https://jscpd.dev/"], "duplicate_file": "Agent/AgentViewModel/Core/AgentViewModel.swift", "duplicate_line": 536, "correlation_key": "fp|8da0f807c1e009cbf27d967d0ec9627f7297364e002b7c1d9c3b2c505a4253e4"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Agent/AgentViewModel/Core/Init.swift"}, "region": {"startLine": 9}}}]}, {"ruleId": "CORE_NO_CI", "level": "warning", "message": {"text": "No CI/CD configuration found"}, "properties": {"repobilityId": 12149, "scanner": "repobility-core", "fingerprint": "ca5da3551af97272c4f099fc472740148135a15816b81b90bd862e8f91ec66ce", "category": "practices", "severity": "medium", "confidence": null, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"rule_id": "CORE_NO_CI", "scanner": "repobility-core", "correlation_key": "repo|practices|core_no_ci"}}}, {"ruleId": "WEB005", "level": "note", "message": {"text": "robots.txt does not advertise a sitemap"}, "properties": {"repobilityId": 12162, "scanner": "repobility-web-presence", "fingerprint": "c5c749b4d05c6844e63c28889b10fe70389f3f26b46652ce0a6e83556b4a0179", "category": "quality", "severity": "low", "confidence": 0.74, "triageState": "open", "verdict": "likely", "isResolved": false, "reason": "Discovered robots file or route lacks a Sitemap directive.", "evidence": {"rule_id": "WEB005", "scanner": "repobility-web-presence", "references": ["https://www.rfc-editor.org/rfc/rfc9309", "https://www.sitemaps.org/protocol.html"], "correlation_key": "fp|c5c749b4d05c6844e63c28889b10fe70389f3f26b46652ce0a6e83556b4a0179"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/CODEX.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "CORE_NO_TESTS", "level": "error", "message": {"text": "No test files found"}, "properties": {"repobilityId": 12148, "scanner": "repobility-core", "fingerprint": "0200e9918bc2a7bf9c116d0907e50ac3df640c758b93852cf1890ec6e14d870d", "category": "testing", "severity": "high", "confidence": null, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"rule_id": "CORE_NO_TESTS", "scanner": "repobility-core", "correlation_key": "repo|testing|core_no_tests"}}}]}]}