{"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": "WEB003", "name": "Public web service has no security.txt", "shortDescription": {"text": "Public web service has no security.txt"}, "fullDescription": {"text": "security.txt gives researchers and customers a safe disclosure channel. Public web apps and APIs should publish it under /.well-known/security.txt."}, "properties": {"scanner": "repobility-web-presence", "category": "quality", "severity": "medium", "confidence": 0.78, "cwe": "", "owasp": ""}}, {"id": "WEB015", "name": "Public web app has no Content Security Policy", "shortDescription": {"text": "Public web app has no Content Security Policy"}, "fullDescription": {"text": "A Content Security Policy reduces the blast radius of injected scripts if the app is ever served through preview, static hosting, or a web container outside its normal sandbox."}, "properties": {"scanner": "repobility-web-presence", "category": "quality", "severity": "medium", "confidence": 0.7, "cwe": "", "owasp": ""}}, {"id": "DKR003", "name": "Compose service `gdluxx` image uses the latest tag", "shortDescription": {"text": "Compose service `gdluxx` image uses the latest tag"}, "fullDescription": {"text": "The latest tag is mutable and can change without a code review, producing different images from the same source."}, "properties": {"scanner": "repobility-docker", "category": "docker", "severity": "medium", "confidence": 0.94, "cwe": "", "owasp": ""}}, {"id": "DKR014", "name": "Dockerfile copies broad context with incomplete .dockerignore", "shortDescription": {"text": "Dockerfile copies broad context with incomplete .dockerignore"}, "fullDescription": {"text": "COPY . or ADD . is safer when .dockerignore excludes secrets, git history, keys, and generated artifacts."}, "properties": {"scanner": "repobility-docker", "category": "docker", "severity": "medium", "confidence": 0.76, "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": "WEB011", "name": "Public web app has no humans.txt", "shortDescription": {"text": "Public web app has no humans.txt"}, "fullDescription": {"text": "humans.txt is optional, but it gives operators and reviewers a simple place to find ownership, contact, and important public documentation links."}, "properties": {"scanner": "repobility-web-presence", "category": "quality", "severity": "low", "confidence": 0.5, "cwe": "", "owasp": ""}}, {"id": "WEB008", "name": "Public docs site has no llms.txt", "shortDescription": {"text": "Public docs site has no llms.txt"}, "fullDescription": {"text": "AI coding agents increasingly read llms.txt to find canonical docs and API workflows. Without it, agents are more likely to browse pages repeatedly or use stale instructions."}, "properties": {"scanner": "repobility-web-presence", "category": "quality", "severity": "low", "confidence": 0.64, "cwe": "", "owasp": ""}}, {"id": "WEB002", "name": "Public web app has no sitemap", "shortDescription": {"text": "Public web app has no sitemap"}, "fullDescription": {"text": "A sitemap gives search engines, docs crawlers, and AI agents a structured list of public pages. Without one, important docs and product pages are easy to miss."}, "properties": {"scanner": "repobility-web-presence", "category": "quality", "severity": "low", "confidence": 0.72, "cwe": "", "owasp": ""}}, {"id": "DKC010", "name": "Compose service lacks no-new-privileges hardening", "shortDescription": {"text": "Compose service lacks no-new-privileges hardening"}, "fullDescription": {"text": "no-new-privileges prevents processes from gaining additional privileges through setuid binaries or file capabilities."}, "properties": {"scanner": "repobility-docker", "category": "docker", "severity": "low", "confidence": 0.62, "cwe": "", "owasp": ""}}, {"id": "DKC006", "name": "Compose service does not declare a runtime user", "shortDescription": {"text": "Compose service does not declare a runtime user"}, "fullDescription": {"text": "If the image does not define USER internally, this service may run as root."}, "properties": {"scanner": "repobility-docker", "category": "docker", "severity": "low", "confidence": 0.56, "cwe": "", "owasp": ""}}, {"id": "DKR008", "name": ".dockerignore misses sensitive defaults", "shortDescription": {"text": ".dockerignore misses sensitive defaults"}, "fullDescription": {"text": ".dockerignore exists but does not cover common secret or VCS patterns."}, "properties": {"scanner": "repobility-docker", "category": "docker", "severity": "low", "confidence": 0.72, "cwe": "", "owasp": ""}}, {"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": "low", "confidence": 0.86, "cwe": "", "owasp": ""}}, {"id": "MINED045", "name": "[MINED045] Ts Non Null Assertion: x! asserts not null - bypasses null checks - TypeError if wrong.", "shortDescription": {"text": "[MINED045] Ts Non Null Assertion: x! asserts not null - bypasses null checks - TypeError if wrong."}, "fullDescription": {"text": "Review and fix per the pattern semantics. See CWE-476 /  for context."}, "properties": {"scanner": "repobility-threat-engine", "category": "quality", "severity": "info", "confidence": 1.0, "cwe": "", "owasp": ""}}, {"id": "SEC020", "name": "[SEC020] Secret Printed to Logs: Debug or diagnostic code appears to print a credential-bearing value. This is a frequen", "shortDescription": {"text": "[SEC020] Secret Printed to Logs: Debug or diagnostic code appears to print a credential-bearing value. This is a frequent AI-assisted coding failure: the helper exposes the exact value needed for troubleshooting."}, "fullDescription": {"text": "Log only redacted, hashed, or last-four-style metadata. Rotate any secret that may have reached logs."}, "properties": {"scanner": "repobility-threat-engine", "category": "credential_exposure", "severity": "info", "confidence": 0.15, "cwe": "", "owasp": ""}}, {"id": "MINED054", "name": "[MINED054] Ts As Any: Casting to any (as any) bypasses type checking entirely.", "shortDescription": {"text": "[MINED054] Ts As Any: Casting to any (as any) bypasses type checking entirely."}, "fullDescription": {"text": "Review and fix per the pattern semantics. See CWE-704 /  for context."}, "properties": {"scanner": "repobility-threat-engine", "category": "quality", "severity": "info", "confidence": 1.0, "cwe": "", "owasp": ""}}, {"id": "MINED044", "name": "[MINED044] Js Console Log Prod (and 2 more): Same pattern found in 2 additional files. Review if needed.", "shortDescription": {"text": "[MINED044] Js Console Log Prod (and 2 more): Same pattern found in 2 additional files. Review if needed."}, "fullDescription": {"text": "Review and fix per the pattern semantics. See CWE-532 /  for context."}, "properties": {"scanner": "repobility-threat-engine", "category": "quality", "severity": "info", "confidence": 0.2, "cwe": "", "owasp": ""}}, {"id": "JRN009", "name": "Secret-like setting is echoed into a password input value", "shortDescription": {"text": "Secret-like setting is echoed into a password input value"}, "fullDescription": {"text": "Settings screens sometimes render API keys, tokens, or passwords back into HTML/JSX password fields. That still exposes the secret to page source, browser extensions, screenshots, and DOM scraping."}, "properties": {"scanner": "repobility-journey-contract", "category": "auth", "severity": "high", "confidence": 0.83, "cwe": "", "owasp": ""}}, {"id": "SEC040", "name": "[SEC040] innerHTML XSS \u2014 template literal with server-supplied data: Setting .innerHTML with a template literal that int", "shortDescription": {"text": "[SEC040] innerHTML XSS \u2014 template literal with server-supplied data: Setting .innerHTML with a template literal that interpolates server-supplied or user-supplied data is the canonical stored/reflected XSS vector. The browser parses the HTM"}, "fullDescription": {"text": "For plain text: use el.textContent = data.value (auto-escapes).\nFor HTML you need to render: el.innerHTML = DOMPurify.sanitize(html).\nFor React/Vue/Svelte: stop using innerHTML; use the framework's binding.\nWhen data comes from CV/PDF parsers, sanitize at the parser boundary too."}, "properties": {"scanner": "repobility-threat-engine", "category": "xss", "severity": "high", "confidence": 1.0, "cwe": "", "owasp": ""}}, {"id": "SEC029", "name": "[SEC029] Server-Side Request Forgery (SSRF) \u2014 outbound HTTP from user input: Outbound HTTP request to a user-controlled ", "shortDescription": {"text": "[SEC029] Server-Side Request Forgery (SSRF) \u2014 outbound HTTP from user input: Outbound HTTP request to a user-controlled URL without allowlist validation. Attackers can probe internal services (169.254.169.254 metadata, internal Kubernetes e"}, "fullDescription": {"text": "Validate the URL against an allowlist BEFORE fetching:\n  ALLOWED = {'images.example.com', 'cdn.example.com'}\n  host = urlparse(url).hostname\n  if host not in ALLOWED: abort(400)\nOr use a server-side proxy (Imgproxy / serve-files-only-from-S3) that isolates outbound network access from the request handler.\nBlock private CIDRs explicitly: 10/8, 172.16/12, 192.168/16, 169.254/16."}, "properties": {"scanner": "repobility-threat-engine", "category": "ssrf", "severity": "high", "confidence": 1.0, "cwe": "", "owasp": ""}}, {"id": "MINED115", "name": "Action `softprops/action-gh-release` pinned to mutable ref `@v1`", "shortDescription": {"text": "Action `softprops/action-gh-release` pinned to mutable ref `@v1`"}, "fullDescription": {"text": "`uses: softprops/action-gh-release@v1` resolves at workflow-run time. Tags and branches can be re-pushed by the action owner; that made the tj-actions/changed-files compromise (2025) instantly affect ~23K repos. Pin to a 40-char commit SHA + lock with Dependabot or renovate."}, "properties": {"scanner": "repobility-supply-chain", "category": "dependency", "severity": "high", "confidence": 0.9, "cwe": "", "owasp": ""}}, {"id": "MINED118", "name": "Dockerfile FROM `node:20-slim` not pinned by digest", "shortDescription": {"text": "Dockerfile FROM `node:20-slim` not pinned by digest"}, "fullDescription": {"text": "`FROM node:20-slim` resolves the tag at build time. The registry CAN re-push a different image for the same tag, so every build is potentially different. Production images should pin to `image@sha256:...` for reproducibility + supply-chain integrity."}, "properties": {"scanner": "repobility-supply-chain", "category": "dependency", "severity": "high", "confidence": 0.9, "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/597"}, "properties": {"repository": "gdluxx/gdluxx", "repoUrl": "https://github.com/gdluxx/gdluxx", "branch": "main"}, "results": [{"ruleId": "WEB003", "level": "warning", "message": {"text": "Public web service has no security.txt"}, "properties": {"repobilityId": 43261, "scanner": "repobility-web-presence", "fingerprint": "5cd26606c5a53c9f403ff7a92a6917c19cf440a23ce03e2b90e8c493312ef8cd", "category": "quality", "severity": "medium", "confidence": 0.78, "triageState": "open", "verdict": "likely", "isResolved": false, "reason": "Repository looks like a public web app/API but no security.txt file or route was discovered.", "evidence": {"rule_id": "WEB003", "scanner": "repobility-web-presence", "references": ["https://www.rfc-editor.org/rfc/rfc9116", "https://github.com/Lissy93/web-check"], "correlation_key": "fp|5cd26606c5a53c9f403ff7a92a6917c19cf440a23ce03e2b90e8c493312ef8cd"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".well-known/security.txt"}, "region": {"startLine": 1}}}]}, {"ruleId": "WEB015", "level": "warning", "message": {"text": "Public web app has no Content Security Policy"}, "properties": {"repobilityId": 43260, "scanner": "repobility-web-presence", "fingerprint": "7eb70cae3ff63d8ed7c31706185d32b37655333b40b58ca826d740b08fb1ad63", "category": "quality", "severity": "medium", "confidence": 0.7, "triageState": "open", "verdict": "likely", "isResolved": false, "reason": "Repository looks like a public web app but no CSP header, framework header config, Helmet policy, or CSP meta tag was discovered.", "evidence": {"rule_id": "WEB015", "scanner": "repobility-web-presence", "references": ["https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP", "https://github.com/Lissy93/web-check"], "correlation_key": "fp|7eb70cae3ff63d8ed7c31706185d32b37655333b40b58ca826d740b08fb1ad63"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "index.html"}, "region": {"startLine": 1}}}]}, {"ruleId": "DKR003", "level": "warning", "message": {"text": "Compose service `gdluxx` image uses the latest tag"}, "properties": {"repobilityId": 43251, "scanner": "repobility-docker", "fingerprint": "9245b5bf43918ebbad63d5c4a97e75e96b30177a56d3e3e6c8e19cb89e5461f0", "category": "docker", "severity": "medium", "confidence": 0.94, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Image tag is latest.", "evidence": {"image": "ghcr.io/gdluxx/gdluxx:latest", "rule_id": "DKR003", "scanner": "repobility-docker", "references": ["https://docs.docker.com/develop/develop-images/dockerfile_best-practices/", "https://docs.docker.com/scout/policy/", "https://github.com/hadolint/hadolint"], "correlation_key": "fp|9245b5bf43918ebbad63d5c4a97e75e96b30177a56d3e3e6c8e19cb89e5461f0"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docker-compose.yml"}, "region": {"startLine": 3}}}]}, {"ruleId": "DKR014", "level": "warning", "message": {"text": "Dockerfile copies broad context with incomplete .dockerignore"}, "properties": {"repobilityId": 43249, "scanner": "repobility-docker", "fingerprint": "0887371c73d2b6563c6630d8915c9434e54cd334b1b339086a789dc4b05da121", "category": "docker", "severity": "medium", "confidence": 0.76, "triageState": "open", "verdict": "likely", "isResolved": false, "reason": "Broad context copy found and .dockerignore misses sensitive defaults.", "evidence": {"rule_id": "DKR014", "scanner": "repobility-docker", "references": ["https://docs.docker.com/develop/develop-images/dockerfile_best-practices/"], "correlation_key": "fp|0887371c73d2b6563c6630d8915c9434e54cd334b1b339086a789dc4b05da121", "missing_patterns": [".env", "id_rsa", "*.pem", "*.key"]}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 13}}}]}, {"ruleId": "WEB005", "level": "note", "message": {"text": "robots.txt does not advertise a sitemap"}, "properties": {"repobilityId": 43262, "scanner": "repobility-web-presence", "fingerprint": "9d7aab190224a74a57c2facfd5c6d8d9fd50b53e790026916e5fdbd3560978b9", "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|9d7aab190224a74a57c2facfd5c6d8d9fd50b53e790026916e5fdbd3560978b9"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extension/pnpm-lock.yaml"}, "region": {"startLine": 1}}}]}, {"ruleId": "WEB011", "level": "note", "message": {"text": "Public web app has no humans.txt"}, "properties": {"repobilityId": 43259, "scanner": "repobility-web-presence", "fingerprint": "bdd551fbe1ab6405480e0d5755632562c2096cb9e9a6a071ef60e4c27a6873f1", "category": "quality", "severity": "low", "confidence": 0.5, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Repository looks like a public web app but no humans.txt file or route was discovered.", "evidence": {"rule_id": "WEB011", "scanner": "repobility-web-presence", "references": ["https://github.com/Lissy93/web-check"], "correlation_key": "fp|bdd551fbe1ab6405480e0d5755632562c2096cb9e9a6a071ef60e4c27a6873f1"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "humans.txt"}, "region": {"startLine": 1}}}]}, {"ruleId": "WEB008", "level": "note", "message": {"text": "Public docs site has no llms.txt"}, "properties": {"repobilityId": 43258, "scanner": "repobility-web-presence", "fingerprint": "cdce8ed8706710d39c3e7272dad572dd639cff74fd3d2ac62d8f6f522b891d76", "category": "quality", "severity": "low", "confidence": 0.64, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Repository looks public and documentation-heavy but no llms.txt file or route was discovered.", "evidence": {"rule_id": "WEB008", "scanner": "repobility-web-presence", "references": ["https://llmstxt.org/"], "correlation_key": "fp|cdce8ed8706710d39c3e7272dad572dd639cff74fd3d2ac62d8f6f522b891d76"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "llms.txt"}, "region": {"startLine": 1}}}]}, {"ruleId": "WEB002", "level": "note", "message": {"text": "Public web app has no sitemap"}, "properties": {"repobilityId": 43257, "scanner": "repobility-web-presence", "fingerprint": "fccbe72d13ca3ba9197ec37b0daa0802fb6d5ebff54b3eb9f09b59b0f8d0acdf", "category": "quality", "severity": "low", "confidence": 0.72, "triageState": "open", "verdict": "likely", "isResolved": false, "reason": "Repository looks like a public web app but no sitemap file or route was discovered.", "evidence": {"rule_id": "WEB002", "scanner": "repobility-web-presence", "references": ["https://www.sitemaps.org/protocol.html", "https://github.com/Lissy93/web-check"], "correlation_key": "fp|fccbe72d13ca3ba9197ec37b0daa0802fb6d5ebff54b3eb9f09b59b0f8d0acdf"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sitemap.xml"}, "region": {"startLine": 1}}}]}, {"ruleId": "DKC010", "level": "note", "message": {"text": "Compose service lacks no-new-privileges hardening"}, "properties": {"repobilityId": 43253, "scanner": "repobility-docker", "fingerprint": "49a734132a17ba8b6533a048b485a56c4be0178dae5527cdd48a6ea9abc84b15", "category": "docker", "severity": "low", "confidence": 0.62, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "App-like service has no security_opt no-new-privileges setting.", "evidence": {"rule_id": "DKC010", "scanner": "repobility-docker", "service": "gdluxx", "references": ["https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html"], "correlation_key": "fp|49a734132a17ba8b6533a048b485a56c4be0178dae5527cdd48a6ea9abc84b15"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docker-compose.yml"}, "region": {"startLine": 3}}}]}, {"ruleId": "DKC006", "level": "note", "message": {"text": "Compose service does not declare a runtime user"}, "properties": {"repobilityId": 43252, "scanner": "repobility-docker", "fingerprint": "8263cfa034b9f9a32bd39a97fad0788930dd8d614b1a754a3731c75521887656", "category": "docker", "severity": "low", "confidence": 0.56, "triageState": "open", "verdict": "needs_review", "isResolved": false, "reason": "Service has no user setting and Repobility could not prove the image runs non-root.", "evidence": {"rule_id": "DKC006", "scanner": "repobility-docker", "service": "gdluxx", "references": ["https://cheatsheetseries.owasp.org/cheatsheets/Docker_Security_Cheat_Sheet.html"], "correlation_key": "fp|8263cfa034b9f9a32bd39a97fad0788930dd8d614b1a754a3731c75521887656"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docker-compose.yml"}, "region": {"startLine": 3}}}]}, {"ruleId": "DKR008", "level": "note", "message": {"text": ".dockerignore misses sensitive defaults"}, "properties": {"repobilityId": 43250, "scanner": "repobility-docker", "fingerprint": "aea2ad92c68c4ee1f8432bb1ec25e7d45ac12c9e1790ac2d3fffe638b1acce12", "category": "docker", "severity": "low", "confidence": 0.72, "triageState": "open", "verdict": "likely", "isResolved": false, "reason": "A Docker build context should exclude secrets and repository metadata.", "evidence": {"rule_id": "DKR008", "scanner": "repobility-docker", "references": ["https://docs.docker.com/develop/develop-images/dockerfile_best-practices/"], "correlation_key": "fp|aea2ad92c68c4ee1f8432bb1ec25e7d45ac12c9e1790ac2d3fffe638b1acce12", "missing_patterns": [".env", "id_rsa", "*.pem", "*.key"]}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".dockerignore"}, "region": {"startLine": 1}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43220, "scanner": "repobility-ai-code-hygiene", "fingerprint": "cac725af1274935080f4d9b4992220c41c4c16d4342f28eaf66d01271fade745", "category": "quality", "severity": "low", "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": "src/lib/themes/codemirror/codemirror-dark.ts", "duplicate_line": 8, "correlation_key": "fp|cac725af1274935080f4d9b4992220c41c4c16d4342f28eaf66d01271fade745"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/themes/codemirror/codemirror-light.ts"}, "region": {"startLine": 8}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43219, "scanner": "repobility-ai-code-hygiene", "fingerprint": "d3cad599274d78d39c093c004b383f7ce209bee83fc917a57bb7466b70a0c183", "category": "quality", "severity": "low", "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": "src/lib/apikey/apiKeyStore.ts", "duplicate_line": 28, "correlation_key": "fp|d3cad599274d78d39c093c004b383f7ce209bee83fc917a57bb7466b70a0c183"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/stores/settingsStore.ts"}, "region": {"startLine": 23}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43218, "scanner": "repobility-ai-code-hygiene", "fingerprint": "def81184fba24a4323fa31b8576cae54782bf446729704b58767407231db8705", "category": "quality", "severity": "low", "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": "extension/src/content/lib/utils/storageProfiles.ts", "duplicate_line": 2, "correlation_key": "fp|def81184fba24a4323fa31b8576cae54782bf446729704b58767407231db8705"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/server/extensionProfileBackupManager.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43217, "scanner": "repobility-ai-code-hygiene", "fingerprint": "e3be7e5530ed0d1b8066f47e17cf090d92cdb79c1a3eb9cee268a65155f880d7", "category": "quality", "severity": "low", "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": "src/lib/components/ui/ConfirmModal.svelte", "duplicate_line": 76, "correlation_key": "fp|e3be7e5530ed0d1b8066f47e17cf090d92cdb79c1a3eb9cee268a65155f880d7"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/ui/UploadModal.svelte"}, "region": {"startLine": 78}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43216, "scanner": "repobility-ai-code-hygiene", "fingerprint": "a02e397ee50b617a3c9a47f74ac71e2c6c26c800f0dac28acb2b4f9e42759fe2", "category": "quality", "severity": "low", "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": "extension/src/content/lib/components/ui/Badge.svelte", "duplicate_line": 1, "correlation_key": "fp|a02e397ee50b617a3c9a47f74ac71e2c6c26c800f0dac28acb2b4f9e42759fe2"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/ui/Tooltip.svelte"}, "region": {"startLine": 1}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43215, "scanner": "repobility-ai-code-hygiene", "fingerprint": "3f3cfdc41f63c6e3291bad11bd5fffebff83db2c5226bde2ac1612a938b4c199", "category": "quality", "severity": "low", "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": "extension/src/content/lib/components/ui/Modal.svelte", "duplicate_line": 1, "correlation_key": "fp|3f3cfdc41f63c6e3291bad11bd5fffebff83db2c5226bde2ac1612a938b4c199"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/ui/Modal.svelte"}, "region": {"startLine": 1}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43214, "scanner": "repobility-ai-code-hygiene", "fingerprint": "5aea394b2dfacbb85f4172c7bca89301e567ce6d5280f8113ab96e9b125812f7", "category": "quality", "severity": "low", "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": "extension/src/content/lib/components/ui/Info.svelte", "duplicate_line": 65, "correlation_key": "fp|5aea394b2dfacbb85f4172c7bca89301e567ce6d5280f8113ab96e9b125812f7"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/ui/Info.svelte"}, "region": {"startLine": 94}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43213, "scanner": "repobility-ai-code-hygiene", "fingerprint": "fb7aec2aa6476815a32efc5d9fe3b9ec774ebc651fc744a1f6e04f70dc77101e", "category": "quality", "severity": "low", "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": "src/lib/components/ui/Chip.svelte", "duplicate_line": 2, "correlation_key": "fp|fb7aec2aa6476815a32efc5d9fe3b9ec774ebc651fc744a1f6e04f70dc77101e"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/ui/Info.svelte"}, "region": {"startLine": 2}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43212, "scanner": "repobility-ai-code-hygiene", "fingerprint": "0d0233975164803e9a13a25d1e8d319a81866de98ed5ddf353d5512c4ddad9f8", "category": "quality", "severity": "low", "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": "extension/src/content/lib/components/ui/Badge.svelte", "duplicate_line": 1, "correlation_key": "fp|0d0233975164803e9a13a25d1e8d319a81866de98ed5ddf353d5512c4ddad9f8"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/ui/Info.svelte"}, "region": {"startLine": 1}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43211, "scanner": "repobility-ai-code-hygiene", "fingerprint": "2aa1c56251a16e6bf6ae9628e483634e2e6c10741d120fff88ce955f4f86c95a", "category": "quality", "severity": "low", "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": "src/lib/components/ui/Button.svelte", "duplicate_line": 15, "correlation_key": "fp|2aa1c56251a16e6bf6ae9628e483634e2e6c10741d120fff88ce955f4f86c95a"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/ui/ConfirmModal.svelte"}, "region": {"startLine": 16}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43210, "scanner": "repobility-ai-code-hygiene", "fingerprint": "f01962acb0af8e9aede1f20517981e67810c5e880b602279d58ef70ca278a40b", "category": "quality", "severity": "low", "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": "extension/src/content/lib/components/ui/Modal.svelte", "duplicate_line": 1, "correlation_key": "fp|f01962acb0af8e9aede1f20517981e67810c5e880b602279d58ef70ca278a40b"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/ui/ConfirmModal.svelte"}, "region": {"startLine": 1}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43209, "scanner": "repobility-ai-code-hygiene", "fingerprint": "21b4e38e1fc24f484b009055279978a6603531cb6add55c2dcbff3b5ae0ede9c", "category": "quality", "severity": "low", "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": "extension/src/content/lib/components/ui/Badge.svelte", "duplicate_line": 1, "correlation_key": "fp|21b4e38e1fc24f484b009055279978a6603531cb6add55c2dcbff3b5ae0ede9c"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/ui/Chip.svelte"}, "region": {"startLine": 1}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43208, "scanner": "repobility-ai-code-hygiene", "fingerprint": "945029141932bc6e7d03ba49c31e3f824c0eae3c39260494e1a7222dca489ecb", "category": "quality", "severity": "low", "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": "extension/src/content/lib/components/ui/Button.svelte", "duplicate_line": 1, "correlation_key": "fp|945029141932bc6e7d03ba49c31e3f824c0eae3c39260494e1a7222dca489ecb"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/ui/Button.svelte"}, "region": {"startLine": 1}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43207, "scanner": "repobility-ai-code-hygiene", "fingerprint": "c43b75b49ea6164ab5a329548308636a1f1219fd35a3c1e07a2d604e5ea94d76", "category": "quality", "severity": "low", "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": "src/lib/components/jobs/JobOutputModal.svelte", "duplicate_line": 114, "correlation_key": "fp|c43b75b49ea6164ab5a329548308636a1f1219fd35a3c1e07a2d604e5ea94d76"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/jobs/JobsList.svelte"}, "region": {"startLine": 97}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43206, "scanner": "repobility-ai-code-hygiene", "fingerprint": "8f28e5b185b6035a61e2b9cfc32f4ce61246a18eda358cb86b305205d8b61102", "category": "quality", "severity": "low", "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": "src/lib/components/KeywordInfo.svelte", "duplicate_line": 65, "correlation_key": "fp|8f28e5b185b6035a61e2b9cfc32f4ce61246a18eda358cb86b305205d8b61102"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/jobs/JobOutputModal.svelte"}, "region": {"startLine": 160}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43205, "scanner": "repobility-ai-code-hygiene", "fingerprint": "eb349c97b852ef8bcd6c0fc6377c03b7d37b6767ddba8a3297b55e801a0d1899", "category": "quality", "severity": "low", "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": "src/lib/components/Options.svelte", "duplicate_line": 1, "correlation_key": "fp|eb349c97b852ef8bcd6c0fc6377c03b7d37b6767ddba8a3297b55e801a0d1899"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/jobs/JobOutputModal.svelte"}, "region": {"startLine": 1}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43204, "scanner": "repobility-ai-code-hygiene", "fingerprint": "743bd694c37ff755a27a13303101a7f28cf6d264aad50af77cb5d7b1a4a3291e", "category": "quality", "severity": "low", "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": "src/lib/components/icons/KeyIcon.svelte", "duplicate_line": 4, "correlation_key": "fp|743bd694c37ff755a27a13303101a7f28cf6d264aad50af77cb5d7b1a4a3291e"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/icons/VersionIcon.svelte"}, "region": {"startLine": 4}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43203, "scanner": "repobility-ai-code-hygiene", "fingerprint": "b2da56b2b4c6d1e13a369068da76b0336e9646d387e97ea1ee7581ef30ff2281", "category": "quality", "severity": "low", "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": "src/lib/components/icons/InfoIcon.svelte", "duplicate_line": 1, "correlation_key": "fp|b2da56b2b4c6d1e13a369068da76b0336e9646d387e97ea1ee7581ef30ff2281"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/icons/VersionIcon.svelte"}, "region": {"startLine": 1}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43202, "scanner": "repobility-ai-code-hygiene", "fingerprint": "ef16cedcdfe13f20e7183a792a36ba664c0d985e6f291f24039452a2a55cdb00", "category": "quality", "severity": "low", "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": "src/lib/components/icons/InfoIcon.svelte", "duplicate_line": 1, "correlation_key": "fp|ef16cedcdfe13f20e7183a792a36ba664c0d985e6f291f24039452a2a55cdb00"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/icons/SuccessIcon.svelte"}, "region": {"startLine": 1}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43201, "scanner": "repobility-ai-code-hygiene", "fingerprint": "7ff40c2bf85253b94324c91bb046b9049eadba127138f00d21b1dd26987d763e", "category": "quality", "severity": "low", "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": "src/lib/components/icons/InfoIcon.svelte", "duplicate_line": 1, "correlation_key": "fp|7ff40c2bf85253b94324c91bb046b9049eadba127138f00d21b1dd26987d763e"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/icons/RunIcon.svelte"}, "region": {"startLine": 1}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43200, "scanner": "repobility-ai-code-hygiene", "fingerprint": "36f73b598449afcc95935c1eab9c5c890d1903d1dc07fa3489a4a59421fc3c17", "category": "quality", "severity": "low", "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": "src/lib/components/icons/KeyIcon.svelte", "duplicate_line": 4, "correlation_key": "fp|36f73b598449afcc95935c1eab9c5c890d1903d1dc07fa3489a4a59421fc3c17"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/icons/LogIcon.svelte"}, "region": {"startLine": 4}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43199, "scanner": "repobility-ai-code-hygiene", "fingerprint": "3756a54ab90c6a72367330fa5734fe35e5f965ae987e6bf1aef4f41ef36f8fdb", "category": "quality", "severity": "low", "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": "src/lib/components/icons/InfoIcon.svelte", "duplicate_line": 1, "correlation_key": "fp|3756a54ab90c6a72367330fa5734fe35e5f965ae987e6bf1aef4f41ef36f8fdb"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/icons/LogIcon.svelte"}, "region": {"startLine": 1}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43198, "scanner": "repobility-ai-code-hygiene", "fingerprint": "165e0c449e58c5e657cfd719208d58253b5a7d58872598df66677c4358d148b3", "category": "quality", "severity": "low", "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": "src/lib/components/icons/InfoIcon.svelte", "duplicate_line": 1, "correlation_key": "fp|165e0c449e58c5e657cfd719208d58253b5a7d58872598df66677c4358d148b3"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/icons/KeyIcon.svelte"}, "region": {"startLine": 1}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43197, "scanner": "repobility-ai-code-hygiene", "fingerprint": "44d87a1bb094808d7f99f0fc7a8066e84d7149bffe2b2eaca91cd064db18fa34", "category": "quality", "severity": "low", "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": "extension/src/content/views/shared/filtering/ProfileControls.svelte", "duplicate_line": 66, "correlation_key": "fp|44d87a1bb094808d7f99f0fc7a8066e84d7149bffe2b2eaca91cd064db18fa34"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extension/src/content/views/shared/substitution/SubProfileControls.svelte"}, "region": {"startLine": 88}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43196, "scanner": "repobility-ai-code-hygiene", "fingerprint": "29332efef42dad3d12ee2410223d4c838ea332219664bdf1190134856cd421f2", "category": "quality", "severity": "low", "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": "extension/src/content/views/main/components/ActionControls.svelte", "duplicate_line": 1, "correlation_key": "fp|29332efef42dad3d12ee2410223d4c838ea332219664bdf1190134856cd421f2"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extension/src/content/views/shared/filtering/SelectorInputs.svelte"}, "region": {"startLine": 1}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43195, "scanner": "repobility-ai-code-hygiene", "fingerprint": "2ec45679b2c4d9a05791e119544ad5650a8186d1ebf5332e604ae2921b09e44e", "category": "quality", "severity": "low", "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": "extension/src/content/views/main/components/ImageList.svelte", "duplicate_line": 1, "correlation_key": "fp|2ec45679b2c4d9a05791e119544ad5650a8186d1ebf5332e604ae2921b09e44e"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extension/src/content/views/main/components/LinkList.svelte"}, "region": {"startLine": 1}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43194, "scanner": "repobility-ai-code-hygiene", "fingerprint": "aaef5d720ebfb6dc349cbd196c5d1d0f1f8b4024484b415cf082768bbc54ca4e", "category": "quality", "severity": "low", "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": "extension/src/content/lib/utils/storageProfiles.ts", "duplicate_line": 94, "correlation_key": "fp|aaef5d720ebfb6dc349cbd196c5d1d0f1f8b4024484b415cf082768bbc54ca4e"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extension/src/content/lib/utils/storageSubstitution.ts"}, "region": {"startLine": 56}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43193, "scanner": "repobility-ai-code-hygiene", "fingerprint": "4b5195ff116ec3c0ed76cbff857f2141171893d3e1f2a8427351d8280b3c2e48", "category": "quality", "severity": "low", "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": "extension/src/content/lib/components/ui/Badge.svelte", "duplicate_line": 1, "correlation_key": "fp|4b5195ff116ec3c0ed76cbff857f2141171893d3e1f2a8427351d8280b3c2e48"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extension/src/content/lib/components/ui/Info.svelte"}, "region": {"startLine": 1}}}]}, {"ruleId": "AIC003", "level": "note", "message": {"text": "Duplicated implementation block across source files"}, "properties": {"repobilityId": 43192, "scanner": "repobility-ai-code-hygiene", "fingerprint": "b64aebb7ca2dd29df71e668134d2462859a2030174a0365d03fdce1a4975e7ad", "category": "quality", "severity": "low", "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": "extension/src/content/lib/components/ui/Button.svelte", "duplicate_line": 13, "correlation_key": "fp|b64aebb7ca2dd29df71e668134d2462859a2030174a0365d03fdce1a4975e7ad"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extension/src/content/lib/components/ui/Dropdown.svelte"}, "region": {"startLine": 22}}}]}, {"ruleId": "MINED045", "level": "none", "message": {"text": "[MINED045] Ts Non Null Assertion: x! asserts not null - bypasses null checks - TypeError if wrong."}, "properties": {"repobilityId": 43247, "scanner": "repobility-threat-engine", "fingerprint": "a8e115cbeb81717f4c9a145b7ef82d4d5d67e0c8acad9560a81a50559d2b0473", "category": "quality", "severity": "info", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Pattern matched with no mitigating context found", "evidence": {"mined": true, "mining": {"slug": "ts-non-null-assertion", "owasp": null, "cwe_ids": ["CWE-476"], "languages": ["typescript", "tsx"], "precision": 1.0, "promoted_at": "2026-05-18T14:01:32.348005+00:00", "triaged_in_corpus": 12, "observations_count": 1810954, "ai_coder_pattern_id": 105}, "scanner": "repobility-threat-engine", "correlation_key": "fp|a8e115cbeb81717f4c9a145b7ef82d4d5d67e0c8acad9560a81a50559d2b0473"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/routes/api/settings/server-logging/+server.ts"}, "region": {"startLine": 46}}}]}, {"ruleId": "SEC020", "level": "none", "message": {"text": "[SEC020] Secret Printed to Logs: Debug or diagnostic code appears to print a credential-bearing value. This is a frequent AI-assisted coding failure: the helper exposes the exact value needed for troubleshooting."}, "properties": {"repobilityId": 43245, "scanner": "repobility-threat-engine", "fingerprint": "46c728364b3eb1953a9307f920a684c588155dba8776d7c3b95ff6e7667b17dd", "category": "credential_exposure", "severity": "info", "confidence": 0.15, "triageState": "false_positive", "verdict": "likely_fp", "isResolved": true, "reason": "Log message mentions credential-related metadata but does not print a credential-bearing value", "evidence": {"match": "logger.warn('Extension ping attempted without bearer token.')", "reason": "Log message mentions credential-related metadata but does not print a credential-bearing value", "rule_id": "SEC020", "scanner": "repobility-threat-engine", "confidence": 0.15, "correlation_key": "secret|token|1|logger.warn extension ping attempted without bearer token."}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/routes/api/extension/ping/+server.ts"}, "region": {"startLine": 19}}}]}, {"ruleId": "MINED054", "level": "none", "message": {"text": "[MINED054] Ts As Any: Casting to any (as any) bypasses type checking entirely."}, "properties": {"repobilityId": 43241, "scanner": "repobility-threat-engine", "fingerprint": "a8f0c82508d63e80652a3b11d3039577f22f40acdfb2989d741098de93cf2c26", "category": "quality", "severity": "info", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Pattern matched with no mitigating context found", "evidence": {"mined": true, "mining": {"slug": "ts-as-any", "owasp": null, "cwe_ids": ["CWE-704"], "languages": ["typescript", "tsx"], "precision": 1.0, "promoted_at": "2026-05-18T14:01:32.348028+00:00", "triaged_in_corpus": 12, "observations_count": 341218, "ai_coder_pattern_id": 98}, "scanner": "repobility-threat-engine", "correlation_key": "fp|a8f0c82508d63e80652a3b11d3039577f22f40acdfb2989d741098de93cf2c26"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/hooks.server.ts"}, "region": {"startLine": 83}}}]}, {"ruleId": "MINED044", "level": "none", "message": {"text": "[MINED044] Js Console Log Prod (and 2 more): Same pattern found in 2 additional files. Review if needed."}, "properties": {"repobilityId": 43240, "scanner": "repobility-threat-engine", "fingerprint": "f5f0ee0407b51d0ac20b895b10fb0fb2d25d496c71c3de2200e03e778c4fe3f2", "category": "quality", "severity": "info", "confidence": 0.2, "triageState": "false_positive", "verdict": "likely_fp", "isResolved": true, "reason": "Deduplicated summary only: 2 additional occurrences found. The top occurrences remain visible as actionable findings.", "evidence": {"mined": true, "mining": {"slug": "js-console-log-prod", "owasp": null, "cwe_ids": ["CWE-532"], "languages": ["javascript", "typescript", "tsx", "jsx"], "precision": 1.0, "promoted_at": "2026-05-18T14:01:32.348003+00:00", "triaged_in_corpus": 10, "observations_count": 1940833, "ai_coder_pattern_id": 102}, "scanner": "repobility-threat-engine", "aggregated": true, "correlation_key": "fp|f5f0ee0407b51d0ac20b895b10fb0fb2d25d496c71c3de2200e03e778c4fe3f2", "aggregated_count": 2}}}, {"ruleId": "MINED044", "level": "none", "message": {"text": "[MINED044] Js Console Log Prod: console.log left in code. Should be replaced with logger or removed."}, "properties": {"repobilityId": 43239, "scanner": "repobility-threat-engine", "fingerprint": "677941126d9c16a0edef087756d1b3b1c0b89b657c68ef18fd8649f208081998", "category": "quality", "severity": "info", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Pattern matched with no mitigating context found", "evidence": {"mined": true, "mining": {"slug": "js-console-log-prod", "owasp": null, "cwe_ids": ["CWE-532"], "languages": ["javascript", "typescript", "tsx", "jsx"], "precision": 1.0, "promoted_at": "2026-05-18T14:01:32.348003+00:00", "triaged_in_corpus": 10, "observations_count": 1940833, "ai_coder_pattern_id": 102}, "scanner": "repobility-threat-engine", "correlation_key": "fp|677941126d9c16a0edef087756d1b3b1c0b89b657c68ef18fd8649f208081998"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extension/src/shared/settings.ts"}, "region": {"startLine": 23}}}]}, {"ruleId": "MINED044", "level": "none", "message": {"text": "[MINED044] Js Console Log Prod: console.log left in code. Should be replaced with logger or removed."}, "properties": {"repobilityId": 43238, "scanner": "repobility-threat-engine", "fingerprint": "78b154078ceb228a9e2f4eca47890b7c87c2f0e9588d0a9ecbd07b8b61c65ec9", "category": "quality", "severity": "info", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Pattern matched with no mitigating context found", "evidence": {"mined": true, "mining": {"slug": "js-console-log-prod", "owasp": null, "cwe_ids": ["CWE-532"], "languages": ["javascript", "typescript", "tsx", "jsx"], "precision": 1.0, "promoted_at": "2026-05-18T14:01:32.348003+00:00", "triaged_in_corpus": 10, "observations_count": 1940833, "ai_coder_pattern_id": 102}, "scanner": "repobility-threat-engine", "correlation_key": "fp|78b154078ceb228a9e2f4eca47890b7c87c2f0e9588d0a9ecbd07b8b61c65ec9"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extension/src/background/permissions.ts"}, "region": {"startLine": 20}}}]}, {"ruleId": "MINED044", "level": "none", "message": {"text": "[MINED044] Js Console Log Prod: console.log left in code. Should be replaced with logger or removed."}, "properties": {"repobilityId": 43237, "scanner": "repobility-threat-engine", "fingerprint": "92a942cb3405061f66672e3e5fac00e9410a664d3c099d19dd79089caa4820f5", "category": "quality", "severity": "info", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Pattern matched with no mitigating context found", "evidence": {"mined": true, "mining": {"slug": "js-console-log-prod", "owasp": null, "cwe_ids": ["CWE-532"], "languages": ["javascript", "typescript", "tsx", "jsx"], "precision": 1.0, "promoted_at": "2026-05-18T14:01:32.348003+00:00", "triaged_in_corpus": 10, "observations_count": 1940833, "ai_coder_pattern_id": 102}, "scanner": "repobility-threat-engine", "correlation_key": "fp|92a942cb3405061f66672e3e5fac00e9410a664d3c099d19dd79089caa4820f5"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extension/entrypoints/popup/main.ts"}, "region": {"startLine": 18}}}]}, {"ruleId": "JRN009", "level": "error", "message": {"text": "Secret-like setting is echoed into a password input value"}, "properties": {"repobilityId": 43256, "scanner": "repobility-journey-contract", "fingerprint": "5e778614a5afa80af43a6e4c37deb87f1c57faa983f86ea009f5f3a3b9e92401", "category": "auth", "severity": "high", "confidence": 0.83, "triageState": "open", "verdict": "likely", "isResolved": false, "reason": "A password or secret-named input is populated from a secret-like variable instead of a masked placeholder.", "evidence": {"rule_id": "JRN009", "scanner": "repobility-journey-contract", "references": ["https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html"], "correlation_key": "code|auth|token|110|jrn009"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/auth/SetupForm.svelte"}, "region": {"startLine": 110}}}]}, {"ruleId": "JRN009", "level": "error", "message": {"text": "Secret-like setting is echoed into a password input value"}, "properties": {"repobilityId": 43255, "scanner": "repobility-journey-contract", "fingerprint": "635a8b45b0480c2bc4b24689ada81dcc3d9d2b277f8530ff1424511047554585", "category": "auth", "severity": "high", "confidence": 0.83, "triageState": "open", "verdict": "likely", "isResolved": false, "reason": "A password or secret-named input is populated from a secret-like variable instead of a masked placeholder.", "evidence": {"rule_id": "JRN009", "scanner": "repobility-journey-contract", "references": ["https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html"], "correlation_key": "code|auth|token|82|jrn009"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/lib/components/auth/LoginForm.svelte"}, "region": {"startLine": 82}}}]}, {"ruleId": "JRN009", "level": "error", "message": {"text": "Secret-like setting is echoed into a password input value"}, "properties": {"repobilityId": 43254, "scanner": "repobility-journey-contract", "fingerprint": "1d691121382c8acdb37e4502c816ddfe63a89e1cdfd88d9fba4f2fe5bbe7bcd4", "category": "auth", "severity": "high", "confidence": 0.83, "triageState": "open", "verdict": "likely", "isResolved": false, "reason": "A password or secret-named input is populated from a secret-like variable instead of a masked placeholder.", "evidence": {"rule_id": "JRN009", "scanner": "repobility-journey-contract", "references": ["https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html"], "correlation_key": "code|auth|token|89|jrn009"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "extension/src/content/views/settings/tabs/GdluxxTab.svelte"}, "region": {"startLine": 89}}}]}, {"ruleId": "SEC040", "level": "error", "message": {"text": "[SEC040] innerHTML XSS \u2014 template literal with server-supplied data: Setting .innerHTML with a template literal that interpolates server-supplied or user-supplied data is the canonical stored/reflected XSS vector. The browser parses the HTML and executes any <script> or event-handler attributes in the data. CWE-79. Especially dangerous when the data comes from a CV parser, profile field, or any user-input pipeline."}, "properties": {"repobilityId": 43248, "scanner": "repobility-threat-engine", "fingerprint": "a8bb1c415bc191287cec460986905cc6e5856c94f133ff7ec8941772fff0d210", "category": "xss", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Pattern matched with no mitigating context found", "evidence": {"match": "map((err) => `${err.path.join('.')}: ${err.message}", "reason": "Pattern matched with no mitigating context found", "rule_id": "SEC040", "scanner": "repobility-threat-engine", "confidence": 1.0, "correlation_key": "fp|a8bb1c415bc191287cec460986905cc6e5856c94f133ff7ec8941772fff0d210"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/routes/api/settings/user/+server.ts"}, "region": {"startLine": 53}}}]}, {"ruleId": "SEC020", "level": "error", "message": {"text": "[SEC020] Secret Printed to Logs: Debug or diagnostic code appears to print a credential-bearing value. This is a frequent AI-assisted coding failure: the helper exposes the exact value needed for troubleshooting."}, "properties": {"repobilityId": 43246, "scanner": "repobility-threat-engine", "fingerprint": "75afba9bb5fc5bd54f67468e7cf2f80bd172af4e692671cb85e155c59eb18a54", "category": "credential_exposure", "severity": "high", "confidence": 0.92, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Console output includes a credential-bearing template expression.", "evidence": {"match": "logger.info(`Deleted selector profile backup for API key ${auth.apiKeyId}.`)", "reason": "Console output includes a credential-bearing template expression.", "rule_id": "SEC020", "scanner": "repobility-threat-engine", "confidence": 0.92, "correlation_key": "secret|token|15|logger.info deleted selector profile backup for api key auth.apikeyid ."}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/routes/api/extension/profiles/+server.ts"}, "region": {"startLine": 159}}}]}, {"ruleId": "SEC029", "level": "error", "message": {"text": "[SEC029] Server-Side Request Forgery (SSRF) \u2014 outbound HTTP from user input: Outbound HTTP request to a user-controlled URL without allowlist validation. Attackers can probe internal services (169.254.169.254 metadata, internal Kubernetes endpoints, file:// URIs), exfiltrate data, or pivot through your network. SSRF is OWASP A10:2021 and a frequent foothold in cloud breaches."}, "properties": {"repobilityId": 43244, "scanner": "repobility-threat-engine", "fingerprint": "2747efaf3afc765d38c318edf748f915aadaed77b86b9dec79095b3326939d48", "category": "ssrf", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Pattern matched with no mitigating context found", "evidence": {"match": "Url(u", "reason": "Pattern matched with no mitigating context found", "rule_id": "SEC029", "scanner": "repobility-threat-engine", "confidence": 1.0, "correlation_key": "fp|2747efaf3afc765d38c318edf748f915aadaed77b86b9dec79095b3326939d48"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/routes/api/site-configs/lookup/+server.ts"}, "region": {"startLine": 45}}}]}, {"ruleId": "SEC029", "level": "error", "message": {"text": "[SEC029] Server-Side Request Forgery (SSRF) \u2014 outbound HTTP from user input: Outbound HTTP request to a user-controlled URL without allowlist validation. Attackers can probe internal services (169.254.169.254 metadata, internal Kubernetes endpoints, file:// URIs), exfiltrate data, or pivot through your network. SSRF is OWASP A10:2021 and a frequent foothold in cloud breaches."}, "properties": {"repobilityId": 43243, "scanner": "repobility-threat-engine", "fingerprint": "704e5a73e075682a3a36ae4a9370167f880631c3b86b40acbc5a890cd1bab474", "category": "ssrf", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Pattern matched with no mitigating context found", "evidence": {"match": "URL(r", "reason": "Pattern matched with no mitigating context found", "rule_id": "SEC029", "scanner": "repobility-threat-engine", "confidence": 1.0, "correlation_key": "fp|704e5a73e075682a3a36ae4a9370167f880631c3b86b40acbc5a890cd1bab474"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/routes/api/command/stream/+server.ts"}, "region": {"startLine": 21}}}]}, {"ruleId": "SEC029", "level": "error", "message": {"text": "[SEC029] Server-Side Request Forgery (SSRF) \u2014 outbound HTTP from user input: Outbound HTTP request to a user-controlled URL without allowlist validation. Attackers can probe internal services (169.254.169.254 metadata, internal Kubernetes endpoints, file:// URIs), exfiltrate data, or pivot through your network. SSRF is OWASP A10:2021 and a frequent foothold in cloud breaches."}, "properties": {"repobilityId": 43242, "scanner": "repobility-threat-engine", "fingerprint": "60bbae046c1815facaca55d95c04df8011509cb3ec3587336467e8fbc5bd1e18", "category": "ssrf", "severity": "high", "confidence": 1.0, "triageState": "open", "verdict": "confirmed", "isResolved": false, "reason": "Pattern matched with no mitigating context found", "evidence": {"match": "Url(u", "reason": "Pattern matched with no mitigating context found", "rule_id": "SEC029", "scanner": "repobility-threat-engine", "confidence": 1.0, "correlation_key": "fp|60bbae046c1815facaca55d95c04df8011509cb3ec3587336467e8fbc5bd1e18"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/routes/api/command/start/+server.ts"}, "region": {"startLine": 67}}}]}, {"ruleId": "MINED115", "level": "error", "message": {"text": "Action `softprops/action-gh-release` pinned to mutable ref `@v1`"}, "properties": {"repobilityId": 43236, "scanner": "repobility-supply-chain", "fingerprint": "35df72f440aaf3346d14ec4f3fcca09e9ce01841892827f5d7f9bda664b02a6a", "category": "dependency", "severity": "high", "confidence": 0.9, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "gha-mutable-ref", "owasp": "A08:2021", "cwe_ids": ["CWE-829"], "languages": ["yaml"], "observations_count": 0}, "scanner": "repobility-supply-chain", "correlation_key": "fp|35df72f440aaf3346d14ec4f3fcca09e9ce01841892827f5d7f9bda664b02a6a"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/extension-release.yml"}, "region": {"startLine": 109}}}]}, {"ruleId": "MINED115", "level": "error", "message": {"text": "Action `softprops/action-gh-release` pinned to mutable ref `@v1`"}, "properties": {"repobilityId": 43235, "scanner": "repobility-supply-chain", "fingerprint": "48f0f40587c6e32ce13e86f0bbb530c91a49fd189c156d54c350b461d3db36bf", "category": "dependency", "severity": "high", "confidence": 0.9, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "gha-mutable-ref", "owasp": "A08:2021", "cwe_ids": ["CWE-829"], "languages": ["yaml"], "observations_count": 0}, "scanner": "repobility-supply-chain", "correlation_key": "fp|48f0f40587c6e32ce13e86f0bbb530c91a49fd189c156d54c350b461d3db36bf"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/extension-release.yml"}, "region": {"startLine": 101}}}]}, {"ruleId": "MINED115", "level": "error", "message": {"text": "Action `crazy-max/ghaction-import-gpg` pinned to mutable ref `@v6`"}, "properties": {"repobilityId": 43234, "scanner": "repobility-supply-chain", "fingerprint": "784c23d88333a10fc635e34f0daf5aa64600ef3aa0a5446eef2cd45d39af2323", "category": "dependency", "severity": "high", "confidence": 0.9, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "gha-mutable-ref", "owasp": "A08:2021", "cwe_ids": ["CWE-829"], "languages": ["yaml"], "observations_count": 0}, "scanner": "repobility-supply-chain", "correlation_key": "fp|784c23d88333a10fc635e34f0daf5aa64600ef3aa0a5446eef2cd45d39af2323"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/extension-release.yml"}, "region": {"startLine": 39}}}]}, {"ruleId": "MINED115", "level": "error", "message": {"text": "Action `pnpm/action-setup` pinned to mutable ref `@v4`"}, "properties": {"repobilityId": 43233, "scanner": "repobility-supply-chain", "fingerprint": "d34c9ee94cdc8465e42db4cba83ea9937f029a1debd49431cd6c9d41ed32f2cb", "category": "dependency", "severity": "high", "confidence": 0.9, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "gha-mutable-ref", "owasp": "A08:2021", "cwe_ids": ["CWE-829"], "languages": ["yaml"], "observations_count": 0}, "scanner": "repobility-supply-chain", "correlation_key": "fp|d34c9ee94cdc8465e42db4cba83ea9937f029a1debd49431cd6c9d41ed32f2cb"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/extension-release.yml"}, "region": {"startLine": 24}}}]}, {"ruleId": "MINED115", "level": "error", "message": {"text": "Action `actions/checkout` pinned to mutable ref `@v4`"}, "properties": {"repobilityId": 43232, "scanner": "repobility-supply-chain", "fingerprint": "d66f46e9f28a3534e81bdf713e44a4c1af6689cae619228e7f30df98a4e1822c", "category": "dependency", "severity": "high", "confidence": 0.9, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "gha-mutable-ref", "owasp": "A08:2021", "cwe_ids": ["CWE-829"], "languages": ["yaml"], "observations_count": 0}, "scanner": "repobility-supply-chain", "correlation_key": "fp|d66f46e9f28a3534e81bdf713e44a4c1af6689cae619228e7f30df98a4e1822c"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/extension-release.yml"}, "region": {"startLine": 15}}}]}, {"ruleId": "MINED115", "level": "error", "message": {"text": "Action `crazy-max/ghaction-import-gpg` pinned to mutable ref `@v6`"}, "properties": {"repobilityId": 43231, "scanner": "repobility-supply-chain", "fingerprint": "c0d1b60b9fd721e2c7ac6e08978fbc3c7f25cbcc60c0f98988e75a60642d2163", "category": "dependency", "severity": "high", "confidence": 0.9, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "gha-mutable-ref", "owasp": "A08:2021", "cwe_ids": ["CWE-829"], "languages": ["yaml"], "observations_count": 0}, "scanner": "repobility-supply-chain", "correlation_key": "fp|c0d1b60b9fd721e2c7ac6e08978fbc3c7f25cbcc60c0f98988e75a60642d2163"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 34}}}]}, {"ruleId": "MINED115", "level": "error", "message": {"text": "Action `pnpm/action-setup` pinned to mutable ref `@v4`"}, "properties": {"repobilityId": 43230, "scanner": "repobility-supply-chain", "fingerprint": "994e0b047c862717b60362e19de2dec15d4dc86ce0f15b81d1327483d85cb20a", "category": "dependency", "severity": "high", "confidence": 0.9, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "gha-mutable-ref", "owasp": "A08:2021", "cwe_ids": ["CWE-829"], "languages": ["yaml"], "observations_count": 0}, "scanner": "repobility-supply-chain", "correlation_key": "fp|994e0b047c862717b60362e19de2dec15d4dc86ce0f15b81d1327483d85cb20a"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 27}}}]}, {"ruleId": "MINED115", "level": "error", "message": {"text": "Action `actions/checkout` pinned to mutable ref `@v4`"}, "properties": {"repobilityId": 43229, "scanner": "repobility-supply-chain", "fingerprint": "d59315a47468ff4a1d778e6a60b72e483673a0fe41d8f7411bdde1684e69d090", "category": "dependency", "severity": "high", "confidence": 0.9, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "gha-mutable-ref", "owasp": "A08:2021", "cwe_ids": ["CWE-829"], "languages": ["yaml"], "observations_count": 0}, "scanner": "repobility-supply-chain", "correlation_key": "fp|d59315a47468ff4a1d778e6a60b72e483673a0fe41d8f7411bdde1684e69d090"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 20}}}]}, {"ruleId": "MINED115", "level": "error", "message": {"text": "Action `actions/deploy-pages` pinned to mutable ref `@v4`"}, "properties": {"repobilityId": 43228, "scanner": "repobility-supply-chain", "fingerprint": "2381fd2a0f6a3c0e2de16e8ae37e2040819a16d532ed512f8fbce2a58699cd3b", "category": "dependency", "severity": "high", "confidence": 0.9, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "gha-mutable-ref", "owasp": "A08:2021", "cwe_ids": ["CWE-829"], "languages": ["yaml"], "observations_count": 0}, "scanner": "repobility-supply-chain", "correlation_key": "fp|2381fd2a0f6a3c0e2de16e8ae37e2040819a16d532ed512f8fbce2a58699cd3b"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docs.yml"}, "region": {"startLine": 59}}}]}, {"ruleId": "MINED115", "level": "error", "message": {"text": "Action `actions/upload-pages-artifact` pinned to mutable ref `@v3`"}, "properties": {"repobilityId": 43227, "scanner": "repobility-supply-chain", "fingerprint": "855960d91452bc187523cf9e54ca28188b1fa92b656a63f812d8042f12629d43", "category": "dependency", "severity": "high", "confidence": 0.9, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "gha-mutable-ref", "owasp": "A08:2021", "cwe_ids": ["CWE-829"], "languages": ["yaml"], "observations_count": 0}, "scanner": "repobility-supply-chain", "correlation_key": "fp|855960d91452bc187523cf9e54ca28188b1fa92b656a63f812d8042f12629d43"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docs.yml"}, "region": {"startLine": 45}}}]}, {"ruleId": "MINED115", "level": "error", "message": {"text": "Action `actions/configure-pages` pinned to mutable ref `@v4`"}, "properties": {"repobilityId": 43226, "scanner": "repobility-supply-chain", "fingerprint": "541ed898a4966d58733f55abaf4ef54aa652fb43c2466514754924c37ef57f3a", "category": "dependency", "severity": "high", "confidence": 0.9, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "gha-mutable-ref", "owasp": "A08:2021", "cwe_ids": ["CWE-829"], "languages": ["yaml"], "observations_count": 0}, "scanner": "repobility-supply-chain", "correlation_key": "fp|541ed898a4966d58733f55abaf4ef54aa652fb43c2466514754924c37ef57f3a"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docs.yml"}, "region": {"startLine": 39}}}]}, {"ruleId": "MINED115", "level": "error", "message": {"text": "Action `actions/setup-node` pinned to mutable ref `@v4`"}, "properties": {"repobilityId": 43225, "scanner": "repobility-supply-chain", "fingerprint": "431ec78a6374a5d151e5f0bead380379449a55391ea3ed8c796dcd82bd0dee2f", "category": "dependency", "severity": "high", "confidence": 0.9, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "gha-mutable-ref", "owasp": "A08:2021", "cwe_ids": ["CWE-829"], "languages": ["yaml"], "observations_count": 0}, "scanner": "repobility-supply-chain", "correlation_key": "fp|431ec78a6374a5d151e5f0bead380379449a55391ea3ed8c796dcd82bd0dee2f"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docs.yml"}, "region": {"startLine": 34}}}]}, {"ruleId": "MINED115", "level": "error", "message": {"text": "Action `pnpm/action-setup` pinned to mutable ref `@v4`"}, "properties": {"repobilityId": 43224, "scanner": "repobility-supply-chain", "fingerprint": "81fca286d69a16160c66c9fc7c1be03a9489caf30705db0a3d6f02c1c700bfd1", "category": "dependency", "severity": "high", "confidence": 0.9, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "gha-mutable-ref", "owasp": "A08:2021", "cwe_ids": ["CWE-829"], "languages": ["yaml"], "observations_count": 0}, "scanner": "repobility-supply-chain", "correlation_key": "fp|81fca286d69a16160c66c9fc7c1be03a9489caf30705db0a3d6f02c1c700bfd1"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docs.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "MINED115", "level": "error", "message": {"text": "Action `actions/checkout` pinned to mutable ref `@v4`"}, "properties": {"repobilityId": 43223, "scanner": "repobility-supply-chain", "fingerprint": "3fc1c6e0288b70ee0aa48a85857128da46a2ba0b64181940bba5ad57195d6360", "category": "dependency", "severity": "high", "confidence": 0.9, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "gha-mutable-ref", "owasp": "A08:2021", "cwe_ids": ["CWE-829"], "languages": ["yaml"], "observations_count": 0}, "scanner": "repobility-supply-chain", "correlation_key": "fp|3fc1c6e0288b70ee0aa48a85857128da46a2ba0b64181940bba5ad57195d6360"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docs.yml"}, "region": {"startLine": 27}}}]}, {"ruleId": "MINED118", "level": "error", "message": {"text": "Dockerfile FROM `node:20-slim` not pinned by digest"}, "properties": {"repobilityId": 43222, "scanner": "repobility-supply-chain", "fingerprint": "97cace35acea27ac55064d28ea0f42b9cb656cb5d1d80d3847da28842367dd95", "category": "dependency", "severity": "high", "confidence": 0.9, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "docker-from-unpinned", "owasp": "A08:2021", "cwe_ids": ["CWE-829"], "languages": ["dockerfile"], "observations_count": 0}, "scanner": "repobility-supply-chain", "correlation_key": "fp|97cace35acea27ac55064d28ea0f42b9cb656cb5d1d80d3847da28842367dd95"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 18}}}]}, {"ruleId": "MINED118", "level": "error", "message": {"text": "Dockerfile FROM `node:20-alpine` not pinned by digest"}, "properties": {"repobilityId": 43221, "scanner": "repobility-supply-chain", "fingerprint": "a2f34e4c203ca816c812355547bdc6942a7bb42ae1ae008a11bca5a1ff732b68", "category": "dependency", "severity": "high", "confidence": 0.9, "triageState": "open", "verdict": "", "isResolved": false, "reason": "", "evidence": {"mined": true, "mining": {"slug": "docker-from-unpinned", "owasp": "A08:2021", "cwe_ids": ["CWE-829"], "languages": ["dockerfile"], "observations_count": 0}, "scanner": "repobility-supply-chain", "correlation_key": "fp|a2f34e4c203ca816c812355547bdc6942a7bb42ae1ae008a11bca5a1ff732b68"}}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "CORE_NO_TESTS", "level": "error", "message": {"text": "No test files found"}, "properties": {"repobilityId": 43191, "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"}}}]}]}