{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-43ae96309b2c3087", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/components/layout/header.tsx:166", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/components/layout/header.tsx:166"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e23c6967ee0808f4", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/dashboard/src/app/layout.tsx:38", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/dashboard/src/app/layout.tsx:38"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d80558dbd1237fa4", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/page.tsx:257", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/page.tsx:257"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-622b02744f8eb801", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/settings/page.tsx:586", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/settings/page.tsx:586"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dcc455af01a890e6", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/monitoring/page.tsx:73", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/monitoring/page.tsx:736"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0eb8ab26b18244c6", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/marketplace/page.tsx:1", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/marketplace/page.tsx:147"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6bcdb81bc181c868", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/projects/[id]/page.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/projects/[id]/page.tsx:438"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b5e97586fa4e86c6", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/files/page.tsx:544", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/files/page.tsx:544"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-aef50c4cf25ada7b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/emails/[domainId]/page", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/emails/[domainId]/page.tsx:290"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc31ef0625c945e3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/admin/infrastructure-t", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/admin/infrastructure-tab.tsx:415"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-32b5d1c73cac22fc", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/admin/updates-tab.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/admin/updates-tab.tsx:123"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-90c30ebba518f495", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/sftp/page.tsx:240", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/sftp/page.tsx:240"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-59a3321f7c954dc3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/applications/quick-dep", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/applications/quick-deploy.tsx:530"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-495b6156f6bfbde0", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/applications/page.tsx:", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/applications/page.tsx:749"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-90a150e70d4b7065", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/applications/[id]/page", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/applications/[id]/page.tsx:710"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a1fd49acf531fb4d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/domains/page.tsx:263", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/domains/page.tsx:263"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d9980d9104825b19", "name": "Dockerfile runs as root: apps/api/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: apps/api/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3d70dcd36b57a39a", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7467a44632648ae6", "name": "Docker base image is tag-pinned but not digest-pinned: golang:1.25-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: golang:1.25-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5e49ff421eef29d4", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd4d7def5eacc846", "name": "Dockerfile runs as root: apps/agent/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: apps/agent/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-70c600ef478ef582", "name": "Docker base image is tag-pinned but not digest-pinned: golang:1.25-alpine", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: golang:1.25-alpine"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3d6eff8c7eee39c8", "name": "Docker base image is tag-pinned but not digest-pinned: alpine:3.20", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: alpine:3.20"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa26b71eeed80b63", "name": "Dockerfile runs as root: infra/sftp/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: infra/sftp/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d9e7eaeca788b76f", "name": "Docker base image is tag-pinned but not digest-pinned: alpine:3.20", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: alpine:3.20"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-12c7276a05acee35", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/docker/docker.service.ts:8", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/docker/docker.service.ts:8"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0419caa6a90c721c", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/databases/databases.service.ts:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/databases/databases.service.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5f36a3b1bd1da153", "name": "Possible secret in apps/api/src/modules/databases/databases.service.spec.ts", "shortDescription": {"text": "Possible secret in apps/api/src/modules/databases/databases.service.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-18abc317046be044", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/databases/databases.service.spec.ts:38", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/databases/databases.service.spec.ts:38"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-09fda01da83c073a", "name": "Possible secret in apps/api/src/modules/databases/db-dump.util.spec.ts", "shortDescription": {"text": "Possible secret in apps/api/src/modules/databases/db-dump.util.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-8cb7396ef19d2476", "name": "Possible secret in apps/api/src/modules/databases/compose-db-detect.spec.ts", "shortDescription": {"text": "Possible secret in apps/api/src/modules/databases/compose-db-detect.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-81ea2ccea7de190a", "name": "Possible secret in apps/api/src/modules/databases/dto/create-database.dto.spec.ts", "shortDescription": {"text": "Possible secret in apps/api/src/modules/databases/dto/create-database.dto.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-950577b1a7c6efcd", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/email/mail-server.service.ts:9", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/email/mail-server.service.ts:9"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7276ce5da6406c97", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/email/mail-server.service.spec.ts:61", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/email/mail-server.service.spec.ts:61"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0516b607f0dde15c", "name": "Possible secret in apps/api/src/modules/marketplace/marketplace.service.spec.ts", "shortDescription": {"text": "Possible secret in apps/api/src/modules/marketplace/marketplace.service.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-42d36bb699569e4d", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/marketplace/marketplace.service.ts:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/marketplace/marketplace.service.ts:13"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e35af888014731dc", "name": "Possible secret in apps/api/src/modules/auth/two-factor.spec.ts", "shortDescription": {"text": "Possible secret in apps/api/src/modules/auth/two-factor.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-3e6e137849277383", "name": "Possible secret in apps/api/src/modules/auth/auth-flow.spec.ts", "shortDescription": {"text": "Possible secret in apps/api/src/modules/auth/auth-flow.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-3ba8ee4831df6a1d", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/projects/projects.service.ts:29", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/projects/projects.service.ts:29"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-12e08843dddd9090", "name": "Possible secret in apps/api/src/modules/agent/agent.service.spec.ts", "shortDescription": {"text": "Possible secret in apps/api/src/modules/agent/agent.service.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-b10f65f9a257dc59", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/project-transfer/project-transfer.service.ts:11", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/project-transfer/project-transfer.service.ts:11"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-42a28acf9f70d6fc", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/files/docker-fs.ts:33", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/files/docker-fs.ts:33"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1c0f6bc9d2f93177", "name": "Insecure pattern 'exec_used' in apps/api/src/modules/admin/reaper.service.ts:78", "shortDescription": {"text": "Insecure pattern 'exec_used' in apps/api/src/modules/admin/reaper.service.ts:78"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-358ac602c93df8d6", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/admin/reaper.service.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/admin/reaper.service.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e86fdd44e108a911", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/backups/backups.service.ts:36", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/backups/backups.service.ts:36"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4289e6d40d3534d6", "name": "Possible secret in apps/api/src/modules/backups/backups.service.spec.ts", "shortDescription": {"text": "Possible secret in apps/api/src/modules/backups/backups.service.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-caf4f0681a81d6a2", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/backups/backups.service.spec.ts:37", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/backups/backups.service.spec.ts:37"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5d2e15a76550e437", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/servers/servers.service.ts:8", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/servers/servers.service.ts:8"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b6d29ef39e737873", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/sftp/sftp.service.ts:19", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/sftp/sftp.service.ts:19"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cec20405e231ad42", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/system/system-updates.service.ts:8", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/system/system-updates.service.ts:8"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1fbc9fe808288572", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/applications/applications.helpers.ts:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/applications/applications.helpers.ts:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0def422cb3f44a9f", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/applications/application-deploy.service.ts:37", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/applications/application-deploy.service.ts:37"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-877f77283d5e4f4e", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/applications/applications.service.ts:39", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/applications/applications.service.ts:39"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-68b4cdad78804823", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/applications/application-deploy.service.spec.ts:48", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/applications/application-deploy.service.spec.ts:48"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fad926c2e5329db5", "name": "Insecure pattern 'exec_used' in apps/api/src/modules/applications/applications.controller.ts:63", "shortDescription": {"text": "Insecure pattern 'exec_used' in apps/api/src/modules/applications/applications.controller.ts:63"}, "fullDescription": {"text": "Found a known-risky pattern (exec_used). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-891e61be583440be", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/reverse-proxy/reverse-proxy.service.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/reverse-proxy/reverse-proxy.service.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c7712a941982dcea", "name": "Insecure pattern 'node_child_process' in apps/api/src/modules/deployment-target/deployment-target.service.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/deployment-target/deployment-target.service.ts:2"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-35ac9c0de88efc59", "name": "Insecure pattern 'dangerous_innerhtml' in apps/dashboard/src/app/layout.tsx:38", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/dashboard/src/app/layout.tsx:38"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ebece4eedf355f9d", "name": "Possible secret in apps/dashboard/src/app/(dashboard)/dashboard/databases/page.tsx", "shortDescription": {"text": "Possible secret in apps/dashboard/src/app/(dashboard)/dashboard/databases/page.tsx"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-57ed03bacc8073f4", "name": "Insecure pattern 'local_storage_auth_token' in apps/dashboard/e2e/helpers/api-mock.ts:155", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in apps/dashboard/e2e/helpers/api-mock.ts:155"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-72ae377f8280ad8f", "name": "Possible secret in apps/agent/internal/tasks/plans.go", "shortDescription": {"text": "Possible secret in apps/agent/internal/tasks/plans.go"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-69ad1b11d0c038d5", "name": "Very large file: apps/api/src/modules/auth/auth.service.ts (1251 lines)", "shortDescription": {"text": "Very large file: apps/api/src/modules/auth/auth.service.ts (1251 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-934db95e78d761d6", "name": "Very large file: apps/api/src/modules/projects/projects.service.ts (1326 lines)", "shortDescription": {"text": "Very large file: apps/api/src/modules/projects/projects.service.ts (1326 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-74f96cdb78d3dc85", "name": "Very large file: apps/api/src/modules/files/files.service.ts (1688 lines)", "shortDescription": {"text": "Very large file: apps/api/src/modules/files/files.service.ts (1688 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0d0525416a55ed8a", "name": "Very large file: apps/api/src/modules/backups/backups.service.ts (1481 lines)", "shortDescription": {"text": "Very large file: apps/api/src/modules/backups/backups.service.ts (1481 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7f0d82fc2c6a0928", "name": "Very large file: apps/api/src/modules/sftp/sftp.service.ts (1357 lines)", "shortDescription": {"text": "Very large file: apps/api/src/modules/sftp/sftp.service.ts (1357 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec336bb914d614ee", "name": "Very large file: apps/api/src/modules/applications/application-deploy.service.ts (1714 lines)", "shortDescription": {"text": "Very large file: apps/api/src/modules/applications/application-deploy.service.ts (1714 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-095ad5b26a777dd5", "name": "Very large file: apps/dashboard/src/app/(dashboard)/dashboard/projects/[id]/page.tsx (1224 lines)", "shortDescription": {"text": "Very large file: apps/dashboard/src/app/(dashboard)/dashboard/projects/[id]/page.tsx (1224 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e4778f9e1060f8c6", "name": "Very large file: apps/dashboard/src/app/(dashboard)/dashboard/applications/quick-deploy.tsx (1233 lines)", "shortDescription": {"text": "Very large file: apps/dashboard/src/app/(dashboard)/dashboard/applications/quick-deploy.tsx (1233 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e5580b473b7b1043", "name": "Very large file: apps/dashboard/src/app/(dashboard)/dashboard/applications/[id]/page.tsx (2028 lines)", "shortDescription": {"text": "Very large file: apps/dashboard/src/app/(dashboard)/dashboard/applications/[id]/page.tsx (2028 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-58a066cad812921d", "name": "Very large file: apps/dashboard/src/app/(dashboard)/dashboard/domains/page.tsx (1157 lines)", "shortDescription": {"text": "Very large file: apps/dashboard/src/app/(dashboard)/dashboard/domains/page.tsx (1157 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7926c08e0ee06514", "name": "Very large file: apps/dashboard/src/lib/i18n/translations.ts (2467 lines)", "shortDescription": {"text": "Very large file: apps/dashboard/src/lib/i18n/translations.ts (2467 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "8 test file(s) for 291 source file(s) (ratio 0.03). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b06b8d86f24c77f9", "name": "Node manifest has dependencies but no lockfile: apps/api/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/api/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ec82f9367de34433", "name": "Node manifest has dependencies but no lockfile: apps/dashboard/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/dashboard/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cb3e52667c84fb86", "name": "Node manifest has dependencies but no lockfile: packages/types/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/types/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 115 placeholder/mock markers across 33 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, lockfile. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f5ce3b8a6f641cfe", "name": "Commented-code block (6 lines) in apps/api/src/main.ts:37", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/main.ts:37"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1119bf8eed6d192a", "name": "Commented-code block (6 lines) in apps/api/src/app.module.ts:53", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/app.module.ts:53"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3137c9c1f7b56078", "name": "Commented-code block (7 lines) in apps/api/src/common/guards/maintenance.guard.ts:93", "shortDescription": {"text": "Commented-code block (7 lines) in apps/api/src/common/guards/maintenance.guard.ts:93"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-36aff7d445bd8817", "name": "Commented-code block (5 lines) in apps/api/src/modules/docker/docker.service.ts:103", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/docker/docker.service.ts:103"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a224355c26ec8788", "name": "Commented-code block (5 lines) in apps/api/src/modules/notifications/notifications.service.ts:458", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/notifications/notifications.service.ts:458"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7fb5ec44a294b04b", "name": "Commented-code block (7 lines) in apps/api/src/modules/monitoring/monitoring.service.ts:236", "shortDescription": {"text": "Commented-code block (7 lines) in apps/api/src/modules/monitoring/monitoring.service.ts:236"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4f8294c07ebc8e95", "name": "Commented-code block (6 lines) in apps/api/src/modules/databases/databases.service.ts:307", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/modules/databases/databases.service.ts:307"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-83bf597a2ae949ce", "name": "Commented-code block (5 lines) in apps/api/src/modules/email/mail-server.service.ts:23", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/email/mail-server.service.ts:23"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-93b5c21702014bed", "name": "Commented-code block (5 lines) in apps/api/src/modules/email/mail-server.service.spec.ts:383", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/email/mail-server.service.spec.ts:383"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0ec14fe6e3db9760", "name": "Commented-code block (6 lines) in apps/api/src/modules/email/email.service.ts:441", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/modules/email/email.service.ts:441"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cf5f9e0fdee55c4a", "name": "Commented-code block (10 lines) in apps/api/src/modules/marketplace/marketplace.service.ts:57", "shortDescription": {"text": "Commented-code block (10 lines) in apps/api/src/modules/marketplace/marketplace.service.ts:57"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d97413d24ae4cd31", "name": "Commented-code block (6 lines) in apps/api/src/modules/marketplace/templates.ts:6", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/modules/marketplace/templates.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-64d7492ca8a04114", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/modules/git-providers/git-oauth.service.ts:84", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/modules/git-providers/git-oauth.service.ts:84"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5e49ca60624c4994", "name": "Legacy-named symbol `ghr_old` in apps/api/src/modules/git-providers/git-providers.service.spec.ts:276", "shortDescription": {"text": "Legacy-named symbol `ghr_old` in apps/api/src/modules/git-providers/git-providers.service.spec.ts:276"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-14bbb7f7235ed5fa", "name": "Commented-code block (5 lines) in apps/api/src/modules/git-providers/git-providers.service.ts:217", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/git-providers/git-providers.service.ts:217"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3757bb8518b8812a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/modules/git-providers/git-providers.service.ts:268", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/modules/git-providers/git-providers.service.ts:268"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ab1cf43f0efa230e", "name": "Commented-code block (6 lines) in apps/api/src/modules/auth/auth.service.ts:90", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/modules/auth/auth.service.ts:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-86510d022d96eaaf", "name": "Commented-code block (6 lines) in apps/api/src/modules/projects/projects.service.ts:111", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/modules/projects/projects.service.ts:111"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4b381899144dbffe", "name": "Commented-code block (5 lines) in apps/api/src/modules/agent/agent.service.ts:621", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/agent/agent.service.ts:621"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ebf4ab9ea352ac2", "name": "Commented-code block (6 lines) in apps/api/src/modules/agent/agent.controller.ts:130", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/modules/agent/agent.controller.ts:130"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-deaf2285546feb19", "name": "Commented-code block (5 lines) in apps/api/src/modules/ssl/ssl.service.ts:202", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/ssl/ssl.service.ts:202"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b56dbf639855ea57", "name": "Commented-code block (6 lines) in apps/api/src/modules/project-transfer/project-transfer.service.ts:44", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/modules/project-transfer/project-transfer.service.ts:44"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f5c43f779fada916", "name": "Commented-code block (5 lines) in apps/api/src/modules/files/files.service.ts:109", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/files/files.service.ts:109"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1db2e57f8e280a13", "name": "Commented-code block (5 lines) in apps/api/src/modules/files/docker-fs.ts:167", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/files/docker-fs.ts:167"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3d94884d3a98ffb8", "name": "Commented-code block (5 lines) in apps/api/src/modules/admin/reaper.service.ts:107", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/admin/reaper.service.ts:107"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8a7c12d9e838e5fc", "name": "Commented-code block (6 lines) in apps/api/src/modules/deployments/deployments.service.ts:105", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/modules/deployments/deployments.service.ts:105"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-797d581912d366e2", "name": "Commented-code block (6 lines) in apps/api/src/modules/backups/backups.service.ts:254", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/modules/backups/backups.service.ts:254"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f9ad55a19e36099a", "name": "Commented-code block (5 lines) in apps/api/src/modules/servers/servers.service.ts:55", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/servers/servers.service.ts:55"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ea59304eae3b32ea", "name": "Commented-code block (5 lines) in apps/api/src/modules/sftp/sftp.service.ts:722", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/sftp/sftp.service.ts:722"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c80b4970235852aa", "name": "Commented-code block (6 lines) in apps/api/src/modules/sftp/dto/sftp.dto.ts:18", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/modules/sftp/dto/sftp.dto.ts:18"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-21c8da131946ff65", "name": "Commented-code block (5 lines) in apps/api/src/modules/system/system-updates.service.ts:177", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/system/system-updates.service.ts:177"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f131ba5678ba062f", "name": "Commented-code block (6 lines) in apps/api/src/modules/system/system-config.service.ts:259", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/modules/system/system-config.service.ts:259"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d5d50cd8ecf57a82", "name": "Commented-code block (5 lines) in apps/api/src/modules/applications/applications.helpers.ts:219", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/applications/applications.helpers.ts:219"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1f60cd1780c3312b", "name": "Commented-code block (5 lines) in apps/api/src/modules/applications/application-deploy.service.ts:58", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/applications/application-deploy.service.ts:58"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8088573361efc560", "name": "Commented-code block (5 lines) in apps/api/src/modules/applications/applications.service.ts:176", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/applications/applications.service.ts:176"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6ad5eed478918499", "name": "Commented-code block (5 lines) in apps/api/src/modules/applications/application-deploy.service.spec.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/applications/application-deploy.service.spec.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-84011a6c2eb7cbec", "name": "Commented-code block (5 lines) in apps/api/src/modules/applications/application-network.service.ts:148", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/applications/application-network.service.ts:148"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04efeff840f2e3d6", "name": "Legacy-named symbol `ghLegacy` in apps/api/src/modules/applications/webhooks.controller.ts:99", "shortDescription": {"text": "Legacy-named symbol `ghLegacy` in apps/api/src/modules/applications/webhooks.controller.ts:99"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0afbc47e3ce51219", "name": "Commented-code block (6 lines) in apps/api/src/modules/applications/webhooks.controller.ts:54", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/modules/applications/webhooks.controller.ts:54"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b7ffeda27eb6b2dd", "name": "Commented-code block (5 lines) in apps/api/src/modules/applications/application-env.service.ts:40", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/applications/application-env.service.ts:40"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6630f5436a379fc0", "name": "Commented-code block (9 lines) in apps/api/src/modules/applications/application-ops.service.ts:124", "shortDescription": {"text": "Commented-code block (9 lines) in apps/api/src/modules/applications/application-ops.service.ts:124"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-551c1163e14cf6b3", "name": "Commented-code block (14 lines) in apps/api/src/modules/reverse-proxy/reverse-proxy.service.ts:367", "shortDescription": {"text": "Commented-code block (14 lines) in apps/api/src/modules/reverse-proxy/reverse-proxy.service.ts:367"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b405d44c920c4949", "name": "Commented-code block (6 lines) in apps/api/src/modules/domains/domains.controller.ts:17", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/modules/domains/domains.controller.ts:17"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-21e52c0394f7e43a", "name": "Commented-code block (5 lines) in apps/api/src/modules/domains/domains.service.ts:49", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/modules/domains/domains.service.ts:49"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f010a6a93fda2db2", "name": "Commented-code block (6 lines) in apps/api/src/modules/domains/domain-attach.service.ts:63", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/modules/domains/domain-attach.service.ts:63"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b3357f5e63565531", "name": "Commented-code block (7 lines) in apps/dashboard/src/app/layout.tsx:20", "shortDescription": {"text": "Commented-code block (7 lines) in apps/dashboard/src/app/layout.tsx:20"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-23e56db6b52da30e", "name": "Commented-code block (7 lines) in apps/dashboard/src/app/(dashboard)/layout.tsx:62", "shortDescription": {"text": "Commented-code block (7 lines) in apps/dashboard/src/app/(dashboard)/layout.tsx:62"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fa49e3df1419b7af", "name": "Commented-code block (5 lines) in apps/dashboard/src/app/(dashboard)/dashboard/settings/page.tsx:44", "shortDescription": {"text": "Commented-code block (5 lines) in apps/dashboard/src/app/(dashboard)/dashboard/settings/page.tsx:44"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-31b80fbfd2d0b4f7", "name": "Commented-code block (5 lines) in apps/dashboard/src/app/(dashboard)/dashboard/files/page.tsx:194", "shortDescription": {"text": "Commented-code block (5 lines) in apps/dashboard/src/app/(dashboard)/dashboard/files/page.tsx:194"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b6c2289855f889ed", "name": "Commented-code block (6 lines) in apps/dashboard/src/app/(dashboard)/dashboard/admin/page.tsx:85", "shortDescription": {"text": "Commented-code block (6 lines) in apps/dashboard/src/app/(dashboard)/dashboard/admin/page.tsx:85"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-20c12035f2a27f31", "name": "Commented-code block (5 lines) in apps/dashboard/src/app/(dashboard)/dashboard/applications/quick-deploy.tsx:330", "shortDescription": {"text": "Commented-code block (5 lines) in apps/dashboard/src/app/(dashboard)/dashboard/applications/quick-deploy.tsx:330"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e20dd1d7b61ae4a", "name": "Commented-code block (5 lines) in apps/dashboard/src/app/(dashboard)/dashboard/applications/page.tsx:169", "shortDescription": {"text": "Commented-code block (5 lines) in apps/dashboard/src/app/(dashboard)/dashboard/applications/page.tsx:169"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-95dd2e6534c469d7", "name": "Commented-code block (6 lines) in apps/dashboard/src/app/(dashboard)/dashboard/applications/[id]/page.tsx:159", "shortDescription": {"text": "Commented-code block (6 lines) in apps/dashboard/src/app/(dashboard)/dashboard/applications/[id]/page.tsx:159"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2bb7247d4c404b0b", "name": "Commented-code block (5 lines) in apps/dashboard/src/app/(auth)/verify-email/page.tsx:14", "shortDescription": {"text": "Commented-code block (5 lines) in apps/dashboard/src/app/(auth)/verify-email/page.tsx:14"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1a3535471c311503", "name": "Commented-code block (7 lines) in apps/dashboard/src/app/setup/page.tsx:56", "shortDescription": {"text": "Commented-code block (7 lines) in apps/dashboard/src/app/setup/page.tsx:56"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-40f063aeeff7b85b", "name": "Commented-code block (6 lines) in apps/dashboard/src/lib/app-format.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in apps/dashboard/src/lib/app-format.ts:4"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d36ec7b284b5cba8", "name": "Commented-code block (8 lines) in apps/dashboard/src/lib/api.ts:156", "shortDescription": {"text": "Commented-code block (8 lines) in apps/dashboard/src/lib/api.ts:156"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bab697b79603c8b1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/dashboard/src/lib/api.ts:172", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/dashboard/src/lib/api.ts:172"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-908e04f23d2e4c02", "name": "Commented-code block (6 lines) in apps/dashboard/src/lib/api.spec.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in apps/dashboard/src/lib/api.spec.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a96cdc6861421ef7", "name": "Commented-code block (7 lines) in apps/dashboard/src/lib/store.ts:19", "shortDescription": {"text": "Commented-code block (7 lines) in apps/dashboard/src/lib/store.ts:19"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fb36609299cd0974", "name": "Commented-code block (5 lines) in packages/types/src/docker.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in packages/types/src/docker.ts:1"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-70fcae2d13c708b6", "name": "17 env vars used in code but missing from .env.example", "shortDescription": {"text": "17 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ACME_EMAIL`, `AGENT_TRANSFER_MAX_BYTES`, `API_URL`, `CADDY_DATA_VOLUME`, `CI`, `DOCKCONTROL_BRANCH`, `DOCKCONTROL_CANARY_HOLD_MS`, `DOCKCONTROL_COMPOSE_OVERRIDE` + 9 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8ae721aecccef197", "name": "Dangling fetch: POST https://github.com/login/device/code (apps/api/src/modules/git-providers/git-oauth.service.ts:84)", "shortDescription": {"text": "Dangling fetch: POST https://github.com/login/device/code (apps/api/src/modules/git-providers/git-oauth.service.ts:84)"}, "fullDescription": {"text": "`apps/api/src/modules/git-providers/git-oauth.service.ts:84` calls `POST https://github.com/login/device/code` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/github.com/login/device/code`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-337e92ac44ad1bef", "name": "Dangling fetch: POST https://github.com/login/oauth/access_token (apps/api/src/modules/git-providers/git-oauth.service.t", "shortDescription": {"text": "Dangling fetch: POST https://github.com/login/oauth/access_token (apps/api/src/modules/git-providers/git-oauth.service.ts:134)"}, "fullDescription": {"text": "`apps/api/src/modules/git-providers/git-oauth.service.ts:134` calls `POST https://github.com/login/oauth/access_token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/github.com/login/oauth/access_token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b799d64d923f59f7", "name": "Dangling fetch: POST https://github.com/login/oauth/access_token (apps/api/src/modules/git-providers/git-oauth.service.t", "shortDescription": {"text": "Dangling fetch: POST https://github.com/login/oauth/access_token (apps/api/src/modules/git-providers/git-oauth.service.ts:257)"}, "fullDescription": {"text": "`apps/api/src/modules/git-providers/git-oauth.service.ts:257` calls `POST https://github.com/login/oauth/access_token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/github.com/login/oauth/access_token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6fbfd1ff772cbfc9", "name": "Dangling fetch: GET https://api.github.com/user (apps/api/src/modules/git-providers/git-oauth.service.ts:310)", "shortDescription": {"text": "Dangling fetch: GET https://api.github.com/user (apps/api/src/modules/git-providers/git-oauth.service.ts:310)"}, "fullDescription": {"text": "`apps/api/src/modules/git-providers/git-oauth.service.ts:310` calls `GET https://api.github.com/user` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.github.com/user`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-41686ac74c69e5fe", "name": "Dangling fetch: GET https://api.github.com/repos/${repoFullName}/contents/${file}?ref=${branch} (apps/api/src/modules/gi", "shortDescription": {"text": "Dangling fetch: GET https://api.github.com/repos/${repoFullName}/contents/${file}?ref=${branch} (apps/api/src/modules/git-providers/git-providers.service.ts:153)"}, "fullDescription": {"text": "`apps/api/src/modules/git-providers/git-providers.service.ts:153` calls `GET https://api.github.com/repos/${repoFullName}/contents/${file}?ref=${branch}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.github.com/repos/<p>/contents/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e93add5028f697bd", "name": "Dangling fetch: GET https://gitlab.com/api/v4/projects/${projectPath}/repository/files/${encodeURIComponent(file)}?ref=$", "shortDescription": {"text": "Dangling fetch: GET https://gitlab.com/api/v4/projects/${projectPath}/repository/files/${encodeURIComponent(file)}?ref=${branch} (apps/api/src/modules/git-providers/git-providers.service.ts:169)"}, "fullDescription": {"text": "`apps/api/src/modules/git-providers/git-providers.service.ts:169` calls `GET https://gitlab.com/api/v4/projects/${projectPath}/repository/files/${encodeURIComponent(file)}?ref=${branch}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/gitlab.com/api/v4/projects/<p>/repository/files/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0ef0b7ae315affb0", "name": "Dangling fetch: GET https://api.github.com/repos/${repoFullName}/contents/${encodeURIComponent(filePath)}?ref=${branch} ", "shortDescription": {"text": "Dangling fetch: GET https://api.github.com/repos/${repoFullName}/contents/${encodeURIComponent(filePath)}?ref=${branch} (apps/api/src/modules/git-providers/git-providers.service.ts:258)"}, "fullDescription": {"text": "`apps/api/src/modules/git-providers/git-providers.service.ts:258` calls `GET https://api.github.com/repos/${repoFullName}/contents/${encodeURIComponent(filePath)}?ref=${branch}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.github.com/repos/<p>/contents/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d2f46184154db84", "name": "Dangling fetch: GET https://gitlab.com/api/v4/projects/${projectPath}/repository/files/${encodeURIComponent(filePath)}/r", "shortDescription": {"text": "Dangling fetch: GET https://gitlab.com/api/v4/projects/${projectPath}/repository/files/${encodeURIComponent(filePath)}/raw?ref=${branch} (apps/api/src/modules/git-providers/git-providers.service.ts:268)"}, "fullDescription": {"text": "`apps/api/src/modules/git-providers/git-providers.service.ts:268` calls `GET https://gitlab.com/api/v4/projects/${projectPath}/repository/files/${encodeURIComponent(filePath)}/raw?ref=${branch}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/gitlab.com/api/v4/projects/<p>/repository/files/<p>/raw`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f2409015dc29633b", "name": "Dangling fetch: GET https://api.bitbucket.org/2.0/repositories/${repoFullName}/src/${branch}/${filePath} (apps/api/src/m", "shortDescription": {"text": "Dangling fetch: GET https://api.bitbucket.org/2.0/repositories/${repoFullName}/src/${branch}/${filePath} (apps/api/src/modules/git-providers/git-providers.service.ts:275)"}, "fullDescription": {"text": "`apps/api/src/modules/git-providers/git-providers.service.ts:275` calls `GET https://api.bitbucket.org/2.0/repositories/${repoFullName}/src/${branch}/${filePath}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.bitbucket.org/2.0/repositories/<p>/src/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9426f8616d70437b", "name": "Dangling fetch: GET https://api.github.com/user (apps/api/src/modules/git-providers/git-providers.service.ts:303)", "shortDescription": {"text": "Dangling fetch: GET https://api.github.com/user (apps/api/src/modules/git-providers/git-providers.service.ts:303)"}, "fullDescription": {"text": "`apps/api/src/modules/git-providers/git-providers.service.ts:303` calls `GET https://api.github.com/user` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.github.com/user`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-44ce68034bf0393d", "name": "Dangling fetch: GET https://gitlab.com/api/v4/user (apps/api/src/modules/git-providers/git-providers.service.ts:311)", "shortDescription": {"text": "Dangling fetch: GET https://gitlab.com/api/v4/user (apps/api/src/modules/git-providers/git-providers.service.ts:311)"}, "fullDescription": {"text": "`apps/api/src/modules/git-providers/git-providers.service.ts:311` calls `GET https://gitlab.com/api/v4/user` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/gitlab.com/api/v4/user`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0c669d379d871158", "name": "Dangling fetch: GET https://api.bitbucket.org/2.0/user (apps/api/src/modules/git-providers/git-providers.service.ts:319)", "shortDescription": {"text": "Dangling fetch: GET https://api.bitbucket.org/2.0/user (apps/api/src/modules/git-providers/git-providers.service.ts:319)"}, "fullDescription": {"text": "`apps/api/src/modules/git-providers/git-providers.service.ts:319` calls `GET https://api.bitbucket.org/2.0/user` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.bitbucket.org/2.0/user`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a4ae1a3b04adcee", "name": "Dangling fetch: GET https://api.github.com/user/repos?per_page=100&sort=updated&affiliation=owner,collaborator,organizat", "shortDescription": {"text": "Dangling fetch: GET https://api.github.com/user/repos?per_page=100&sort=updated&affiliation=owner,collaborator,organization_member (apps/api/src/modules/git-providers/git-providers.service.ts:331)"}, "fullDescription": {"text": "`apps/api/src/modules/git-providers/git-providers.service.ts:331` calls `GET https://api.github.com/user/repos?per_page=100&sort=updated&affiliation=owner,collaborator,organization_member` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.github.com/user/repos`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-be3bba40500ac321", "name": "Dangling fetch: GET https://gitlab.com/api/v4/projects?membership=true&per_page=100&order_by=updated_at (apps/api/src/mo", "shortDescription": {"text": "Dangling fetch: GET https://gitlab.com/api/v4/projects?membership=true&per_page=100&order_by=updated_at (apps/api/src/modules/git-providers/git-providers.service.ts:349)"}, "fullDescription": {"text": "`apps/api/src/modules/git-providers/git-providers.service.ts:349` calls `GET https://gitlab.com/api/v4/projects?membership=true&per_page=100&order_by=updated_at` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/gitlab.com/api/v4/projects`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5e79af46e09a44e2", "name": "Dangling fetch: GET https://api.bitbucket.org/2.0/repositories?role=member&pagelen=100&sort=-updated_on (apps/api/src/mo", "shortDescription": {"text": "Dangling fetch: GET https://api.bitbucket.org/2.0/repositories?role=member&pagelen=100&sort=-updated_on (apps/api/src/modules/git-providers/git-providers.service.ts:367)"}, "fullDescription": {"text": "`apps/api/src/modules/git-providers/git-providers.service.ts:367` calls `GET https://api.bitbucket.org/2.0/repositories?role=member&pagelen=100&sort=-updated_on` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.bitbucket.org/2.0/repositories`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-876b238a8a23df18", "name": "Dangling fetch: GET https://${savedPanelDomain}/ (apps/dashboard/src/app/setup/page.tsx:302)", "shortDescription": {"text": "Dangling fetch: GET https://${savedPanelDomain}/ (apps/dashboard/src/app/setup/page.tsx:302)"}, "fullDescription": {"text": "`apps/dashboard/src/app/setup/page.tsx:302` calls `GET https://${savedPanelDomain}/` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-db574fbd39578c82", "name": "Unused endpoint: GET /docker/servers/:serverId/containers", "shortDescription": {"text": "Unused endpoint: GET /docker/servers/:serverId/containers"}, "fullDescription": {"text": "`apps/api/src/modules/docker/docker.controller.ts` declares `GET /docker/servers/:serverId/containers` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d0ce76ab8ed1942", "name": "Unused endpoint: POST /docker/servers/:serverId/containers/action", "shortDescription": {"text": "Unused endpoint: POST /docker/servers/:serverId/containers/action"}, "fullDescription": {"text": "`apps/api/src/modules/docker/docker.controller.ts` declares `POST /docker/servers/:serverId/containers/action` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-967d0a647ccb3d02", "name": "Unused endpoint: GET /docker/servers/:serverId/images", "shortDescription": {"text": "Unused endpoint: GET /docker/servers/:serverId/images"}, "fullDescription": {"text": "`apps/api/src/modules/docker/docker.controller.ts` declares `GET /docker/servers/:serverId/images` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-18741c35dc30ca95", "name": "Unused endpoint: GET /docker/servers/:serverId/networks", "shortDescription": {"text": "Unused endpoint: GET /docker/servers/:serverId/networks"}, "fullDescription": {"text": "`apps/api/src/modules/docker/docker.controller.ts` declares `GET /docker/servers/:serverId/networks` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c65df75c3e50cf05", "name": "Unused endpoint: GET /docker/servers/:serverId/volumes", "shortDescription": {"text": "Unused endpoint: GET /docker/servers/:serverId/volumes"}, "fullDescription": {"text": "`apps/api/src/modules/docker/docker.controller.ts` declares `GET /docker/servers/:serverId/volumes` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a8b657222dd85be2", "name": "Unused endpoint: GET /users/me", "shortDescription": {"text": "Unused endpoint: GET /users/me"}, "fullDescription": {"text": "`apps/api/src/modules/users/users.controller.ts` declares `GET /users/me` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9f06644688cd47af", "name": "Unused endpoint: PATCH /users/me", "shortDescription": {"text": "Unused endpoint: PATCH /users/me"}, "fullDescription": {"text": "`apps/api/src/modules/users/users.controller.ts` declares `PATCH /users/me` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b8611747e1d9363", "name": "Unused endpoint: GET /users/me/notification-preferences", "shortDescription": {"text": "Unused endpoint: GET /users/me/notification-preferences"}, "fullDescription": {"text": "`apps/api/src/modules/users/users.controller.ts` declares `GET /users/me/notification-preferences` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-41aa9e92da3f14ad", "name": "Unused endpoint: GET /users/:id", "shortDescription": {"text": "Unused endpoint: GET /users/:id"}, "fullDescription": {"text": "`apps/api/src/modules/users/users.controller.ts` declares `GET /users/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a2da8d08e12b122c", "name": "Unused endpoint: PATCH /users/:id", "shortDescription": {"text": "Unused endpoint: PATCH /users/:id"}, "fullDescription": {"text": "`apps/api/src/modules/users/users.controller.ts` declares `PATCH /users/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-79406b9fd85263bf", "name": "Unused endpoint: DELETE /users/:id", "shortDescription": {"text": "Unused endpoint: DELETE /users/:id"}, "fullDescription": {"text": "`apps/api/src/modules/users/users.controller.ts` declares `DELETE /users/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-995dae05d67aa85a", "name": "Unused endpoint: GET /notifications/unread-count", "shortDescription": {"text": "Unused endpoint: GET /notifications/unread-count"}, "fullDescription": {"text": "`apps/api/src/modules/notifications/notifications.controller.ts` declares `GET /notifications/unread-count` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7ae443c3d8d30b78", "name": "Unused endpoint: POST /notifications/:id/read", "shortDescription": {"text": "Unused endpoint: POST /notifications/:id/read"}, "fullDescription": {"text": "`apps/api/src/modules/notifications/notifications.controller.ts` declares `POST /notifications/:id/read` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b93f5ab485027b7", "name": "Unused endpoint: POST /notifications/read-all", "shortDescription": {"text": "Unused endpoint: POST /notifications/read-all"}, "fullDescription": {"text": "`apps/api/src/modules/notifications/notifications.controller.ts` declares `POST /notifications/read-all` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-88d0064420e4064a", "name": "Unused endpoint: GET /monitoring/servers/:serverId/metrics", "shortDescription": {"text": "Unused endpoint: GET /monitoring/servers/:serverId/metrics"}, "fullDescription": {"text": "`apps/api/src/modules/monitoring/monitoring.controller.ts` declares `GET /monitoring/servers/:serverId/metrics` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c6f46cf62d633395", "name": "Unused endpoint: POST /monitoring/alert-rules", "shortDescription": {"text": "Unused endpoint: POST /monitoring/alert-rules"}, "fullDescription": {"text": "`apps/api/src/modules/monitoring/monitoring.controller.ts` declares `POST /monitoring/alert-rules` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d2a566449dcea96d", "name": "Unused endpoint: GET /monitoring/alert-rules", "shortDescription": {"text": "Unused endpoint: GET /monitoring/alert-rules"}, "fullDescription": {"text": "`apps/api/src/modules/monitoring/monitoring.controller.ts` declares `GET /monitoring/alert-rules` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c9883bb51f95636b", "name": "Unused endpoint: PATCH /monitoring/alert-rules/:id", "shortDescription": {"text": "Unused endpoint: PATCH /monitoring/alert-rules/:id"}, "fullDescription": {"text": "`apps/api/src/modules/monitoring/monitoring.controller.ts` declares `PATCH /monitoring/alert-rules/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-09be30dec7548135", "name": "Unused endpoint: DELETE /monitoring/alert-rules/:id", "shortDescription": {"text": "Unused endpoint: DELETE /monitoring/alert-rules/:id"}, "fullDescription": {"text": "`apps/api/src/modules/monitoring/monitoring.controller.ts` declares `DELETE /monitoring/alert-rules/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e4ac86ed32f36546", "name": "Unused endpoint: GET /databases/:id", "shortDescription": {"text": "Unused endpoint: GET /databases/:id"}, "fullDescription": {"text": "`apps/api/src/modules/databases/databases.controller.ts` declares `GET /databases/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3fd603cfd68ca001", "name": "Unused endpoint: POST /databases/:id/start", "shortDescription": {"text": "Unused endpoint: POST /databases/:id/start"}, "fullDescription": {"text": "`apps/api/src/modules/databases/databases.controller.ts` declares `POST /databases/:id/start` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c7d9a8df53f098e3", "name": "Unused endpoint: POST /databases/:id/stop", "shortDescription": {"text": "Unused endpoint: POST /databases/:id/stop"}, "fullDescription": {"text": "`apps/api/src/modules/databases/databases.controller.ts` declares `POST /databases/:id/stop` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aaa183d7375afeda", "name": "Unused endpoint: GET /databases/:id/export", "shortDescription": {"text": "Unused endpoint: GET /databases/:id/export"}, "fullDescription": {"text": "`apps/api/src/modules/databases/databases.controller.ts` declares `GET /databases/:id/export` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3019fb3e5a61b8e1", "name": "Unused endpoint: PATCH /databases/:id/parent", "shortDescription": {"text": "Unused endpoint: PATCH /databases/:id/parent"}, "fullDescription": {"text": "`apps/api/src/modules/databases/databases.controller.ts` declares `PATCH /databases/:id/parent` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-38b361f65db973b9", "name": "Unused endpoint: DELETE /databases/:id", "shortDescription": {"text": "Unused endpoint: DELETE /databases/:id"}, "fullDescription": {"text": "`apps/api/src/modules/databases/databases.controller.ts` declares `DELETE /databases/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1de19822949ec05e", "name": "Unused endpoint: POST /email/mailboxes", "shortDescription": {"text": "Unused endpoint: POST /email/mailboxes"}, "fullDescription": {"text": "`apps/api/src/modules/email/email.controller.ts` declares `POST /email/mailboxes` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c3ee48f84fb1849f", "name": "Unused endpoint: GET /email/mailboxes", "shortDescription": {"text": "Unused endpoint: GET /email/mailboxes"}, "fullDescription": {"text": "`apps/api/src/modules/email/email.controller.ts` declares `GET /email/mailboxes` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e1eb80dc8d9a8cfb", "name": "Unused endpoint: GET /email/mailboxes/:id", "shortDescription": {"text": "Unused endpoint: GET /email/mailboxes/:id"}, "fullDescription": {"text": "`apps/api/src/modules/email/email.controller.ts` declares `GET /email/mailboxes/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3e7733099d8e2d8d", "name": "Unused endpoint: PATCH /email/mailboxes/:id", "shortDescription": {"text": "Unused endpoint: PATCH /email/mailboxes/:id"}, "fullDescription": {"text": "`apps/api/src/modules/email/email.controller.ts` declares `PATCH /email/mailboxes/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-862b575147c79e27", "name": "Unused endpoint: DELETE /email/mailboxes/:id", "shortDescription": {"text": "Unused endpoint: DELETE /email/mailboxes/:id"}, "fullDescription": {"text": "`apps/api/src/modules/email/email.controller.ts` declares `DELETE /email/mailboxes/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d6e074d6bff932bb", "name": "Unused endpoint: POST /email/aliases", "shortDescription": {"text": "Unused endpoint: POST /email/aliases"}, "fullDescription": {"text": "`apps/api/src/modules/email/email.controller.ts` declares `POST /email/aliases` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f2109f0f94a7e23b", "name": "Unused endpoint: GET /email/aliases", "shortDescription": {"text": "Unused endpoint: GET /email/aliases"}, "fullDescription": {"text": "`apps/api/src/modules/email/email.controller.ts` declares `GET /email/aliases` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ae8c5b2129e2577e", "name": "Unused endpoint: DELETE /email/aliases/:id", "shortDescription": {"text": "Unused endpoint: DELETE /email/aliases/:id"}, "fullDescription": {"text": "`apps/api/src/modules/email/email.controller.ts` declares `DELETE /email/aliases/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1ef1d949276e8a95", "name": "Unused endpoint: GET /email/overview", "shortDescription": {"text": "Unused endpoint: GET /email/overview"}, "fullDescription": {"text": "`apps/api/src/modules/email/email.controller.ts` declares `GET /email/overview` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-98900022c0b7526e", "name": "Unused endpoint: GET /email/dns/:domainId", "shortDescription": {"text": "Unused endpoint: GET /email/dns/:domainId"}, "fullDescription": {"text": "`apps/api/src/modules/email/email.controller.ts` declares `GET /email/dns/:domainId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-90cfb7a825aaa671", "name": "Unused endpoint: GET /email/dns/:domainId/health", "shortDescription": {"text": "Unused endpoint: GET /email/dns/:domainId/health"}, "fullDescription": {"text": "`apps/api/src/modules/email/email.controller.ts` declares `GET /email/dns/:domainId/health` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-45de4bde365554c6", "name": "Unused endpoint: GET /email/server/:domainId", "shortDescription": {"text": "Unused endpoint: GET /email/server/:domainId"}, "fullDescription": {"text": "`apps/api/src/modules/email/email.controller.ts` declares `GET /email/server/:domainId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-33eb6740b120ae83", "name": "Unused endpoint: POST /email/server/:domainId/deploy", "shortDescription": {"text": "Unused endpoint: POST /email/server/:domainId/deploy"}, "fullDescription": {"text": "`apps/api/src/modules/email/email.controller.ts` declares `POST /email/server/:domainId/deploy` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-36404287eeaad23e", "name": "Unused endpoint: POST /email/server/:domainId/stop", "shortDescription": {"text": "Unused endpoint: POST /email/server/:domainId/stop"}, "fullDescription": {"text": "`apps/api/src/modules/email/email.controller.ts` declares `POST /email/server/:domainId/stop` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-30ad8eabb3ad4cb2", "name": "Unused endpoint: DELETE /email/server/:domainId", "shortDescription": {"text": "Unused endpoint: DELETE /email/server/:domainId"}, "fullDescription": {"text": "`apps/api/src/modules/email/email.controller.ts` declares `DELETE /email/server/:domainId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-41f1d081f13711a3", "name": "Unused endpoint: POST /email/server/:domainId/test", "shortDescription": {"text": "Unused endpoint: POST /email/server/:domainId/test"}, "fullDescription": {"text": "`apps/api/src/modules/email/email.controller.ts` declares `POST /email/server/:domainId/test` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1edb9c4da3f232ae", "name": "Unused endpoint: GET /email/server/:domainId/logs", "shortDescription": {"text": "Unused endpoint: GET /email/server/:domainId/logs"}, "fullDescription": {"text": "`apps/api/src/modules/email/email.controller.ts` declares `GET /email/server/:domainId/logs` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1fbc84fff0bcbc23", "name": "Unused endpoint: GET /email/server/:domainId/bans", "shortDescription": {"text": "Unused endpoint: GET /email/server/:domainId/bans"}, "fullDescription": {"text": "`apps/api/src/modules/email/email.controller.ts` declares `GET /email/server/:domainId/bans` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d32b8cddb0df151b", "name": "Unused endpoint: POST /email/server/:domainId/unban", "shortDescription": {"text": "Unused endpoint: POST /email/server/:domainId/unban"}, "fullDescription": {"text": "`apps/api/src/modules/email/email.controller.ts` declares `POST /email/server/:domainId/unban` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9744d92bb1fd98f1", "name": "Unused endpoint: GET /marketplace/apps", "shortDescription": {"text": "Unused endpoint: GET /marketplace/apps"}, "fullDescription": {"text": "`apps/api/src/modules/marketplace/marketplace.controller.ts` declares `GET /marketplace/apps` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5d28c2d30edbc905", "name": "Unused endpoint: GET /marketplace/:slug", "shortDescription": {"text": "Unused endpoint: GET /marketplace/:slug"}, "fullDescription": {"text": "`apps/api/src/modules/marketplace/marketplace.controller.ts` declares `GET /marketplace/:slug` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c4341e353274df50", "name": "Unused endpoint: POST /marketplace/install", "shortDescription": {"text": "Unused endpoint: POST /marketplace/install"}, "fullDescription": {"text": "`apps/api/src/modules/marketplace/marketplace.controller.ts` declares `POST /marketplace/install` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8b4b15ea2b089ff8", "name": "Unused endpoint: POST /marketplace/install-custom", "shortDescription": {"text": "Unused endpoint: POST /marketplace/install-custom"}, "fullDescription": {"text": "`apps/api/src/modules/marketplace/marketplace.controller.ts` declares `POST /marketplace/install-custom` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b56570f2c1fa92f", "name": "Unused endpoint: GET /git-providers/oauth/github/status", "shortDescription": {"text": "Unused endpoint: GET /git-providers/oauth/github/status"}, "fullDescription": {"text": "`apps/api/src/modules/git-providers/git-providers.controller.ts` declares `GET /git-providers/oauth/github/status` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-446c55aeb0ff9917", "name": "Unused endpoint: POST /git-providers/oauth/github/device/start", "shortDescription": {"text": "Unused endpoint: POST /git-providers/oauth/github/device/start"}, "fullDescription": {"text": "`apps/api/src/modules/git-providers/git-providers.controller.ts` declares `POST /git-providers/oauth/github/device/start` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/19929"}, "properties": {"repository": "SnowdenShadow/Kryptalis", "repoUrl": "https://github.com/SnowdenShadow/Kryptalis", "branch": "main"}, "results": [{"ruleId": "scanner-43ae96309b2c3087", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/components/layout/header.tsx:166"}, "properties": {"repobilityId": "13988b2e0321ac3b", "scanner": "scanner-primary", "fingerprint": "43ae96309b2c3087", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e23c6967ee0808f4", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/dashboard/src/app/layout.tsx:38"}, "properties": {"repobilityId": "7699360869b13d79", "scanner": "scanner-primary", "fingerprint": "e23c6967ee0808f4", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d80558dbd1237fa4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/page.tsx:257"}, "properties": {"repobilityId": "10144ba91ec2220c", "scanner": "scanner-primary", "fingerprint": "d80558dbd1237fa4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-622b02744f8eb801", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/settings/page.tsx:586"}, "properties": {"repobilityId": "437823b0c65e03bb", "scanner": "scanner-primary", "fingerprint": "622b02744f8eb801", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dcc455af01a890e6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/monitoring/page.tsx:736"}, "properties": {"repobilityId": "ec09f868ded4faad", "scanner": "scanner-primary", "fingerprint": "dcc455af01a890e6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0eb8ab26b18244c6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/marketplace/page.tsx:147"}, "properties": {"repobilityId": "be017fff7477060a", "scanner": "scanner-primary", "fingerprint": "0eb8ab26b18244c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6bcdb81bc181c868", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/projects/[id]/page.tsx:438"}, "properties": {"repobilityId": "aed39064dbd4ff62", "scanner": "scanner-primary", "fingerprint": "6bcdb81bc181c868", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b5e97586fa4e86c6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/files/page.tsx:544"}, "properties": {"repobilityId": "f26716df0c6580f0", "scanner": "scanner-primary", "fingerprint": "b5e97586fa4e86c6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-aef50c4cf25ada7b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/emails/[domainId]/page.tsx:290"}, "properties": {"repobilityId": "1753d33093a1b259", "scanner": "scanner-primary", "fingerprint": "aef50c4cf25ada7b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bc31ef0625c945e3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/admin/infrastructure-tab.tsx:415"}, "properties": {"repobilityId": "c67b26be83fd9258", "scanner": "scanner-primary", "fingerprint": "bc31ef0625c945e3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-32b5d1c73cac22fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/admin/updates-tab.tsx:123"}, "properties": {"repobilityId": "680e2bf43bc8ecba", "scanner": "scanner-primary", "fingerprint": "32b5d1c73cac22fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-90c30ebba518f495", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/sftp/page.tsx:240"}, "properties": {"repobilityId": "67a6299554d2d96f", "scanner": "scanner-primary", "fingerprint": "90c30ebba518f495", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-59a3321f7c954dc3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/applications/quick-deploy.tsx:530"}, "properties": {"repobilityId": "10aeb45fd9236d27", "scanner": "scanner-primary", "fingerprint": "59a3321f7c954dc3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-495b6156f6bfbde0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/applications/page.tsx:749"}, "properties": {"repobilityId": "b498721de1325209", "scanner": "scanner-primary", "fingerprint": "495b6156f6bfbde0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-90a150e70d4b7065", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/applications/[id]/page.tsx:710"}, "properties": {"repobilityId": "87261959974b79c8", "scanner": "scanner-primary", "fingerprint": "90a150e70d4b7065", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a1fd49acf531fb4d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/dashboard/src/app/(dashboard)/dashboard/domains/page.tsx:263"}, "properties": {"repobilityId": "bc507dc47c634a35", "scanner": "scanner-primary", "fingerprint": "a1fd49acf531fb4d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d9980d9104825b19", "level": "warning", "message": {"text": "Dockerfile runs as root: apps/api/Dockerfile"}, "properties": {"repobilityId": "e591b11d8a0c1fe7", "scanner": "scanner-primary", "fingerprint": "d9980d9104825b19", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-3d70dcd36b57a39a", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "71f0b8ed23d852bf", "scanner": "scanner-primary", "fingerprint": "3d70dcd36b57a39a", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7467a44632648ae6", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: golang:1.25-alpine"}, "properties": {"repobilityId": "9a994c8efc90d1a8", "scanner": "scanner-primary", "fingerprint": "7467a44632648ae6", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/Dockerfile"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-5e49ff421eef29d4", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "1381d75d84276fdd", "scanner": "scanner-primary", "fingerprint": "5e49ff421eef29d4", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/dashboard/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-5e49ff421eef29d4", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "0a9fd721ae132f90", "scanner": "scanner-primary", "fingerprint": "5e49ff421eef29d4", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/dashboard/Dockerfile"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-fd4d7def5eacc846", "level": "warning", "message": {"text": "Dockerfile runs as root: apps/agent/Dockerfile"}, "properties": {"repobilityId": "5e7045764fd58fd5", "scanner": "scanner-primary", "fingerprint": "fd4d7def5eacc846", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-70c600ef478ef582", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: golang:1.25-alpine"}, "properties": {"repobilityId": "f4ecd5e885b76db3", "scanner": "scanner-primary", "fingerprint": "70c600ef478ef582", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/agent/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3d6eff8c7eee39c8", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: alpine:3.20"}, "properties": {"repobilityId": "a9b90c58eb68a47e", "scanner": "scanner-primary", "fingerprint": "3d6eff8c7eee39c8", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/agent/Dockerfile"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-aa26b71eeed80b63", "level": "warning", "message": {"text": "Dockerfile runs as root: infra/sftp/Dockerfile"}, "properties": {"repobilityId": "f2699e684ae9bced", "scanner": "scanner-primary", "fingerprint": "aa26b71eeed80b63", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-d9e7eaeca788b76f", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: alpine:3.20"}, "properties": {"repobilityId": "147b9dcb7c92cdd5", "scanner": "scanner-primary", "fingerprint": "d9e7eaeca788b76f", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "infra/sftp/Dockerfile"}, "region": {"startLine": 18}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-12c7276a05acee35", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/docker/docker.service.ts:8"}, "properties": {"repobilityId": "6a6248068f2b2814", "scanner": "scanner-primary", "fingerprint": "12c7276a05acee35", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/docker/docker.service.ts"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-0419caa6a90c721c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/databases/databases.service.ts:11"}, "properties": {"repobilityId": "e3e3a40f653d1614", "scanner": "scanner-primary", "fingerprint": "0419caa6a90c721c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/databases/databases.service.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-5f36a3b1bd1da153", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/databases/databases.service.spec.ts"}, "properties": {"repobilityId": "5c58506689cb5dd4", "scanner": "scanner-primary", "fingerprint": "5f36a3b1bd1da153", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/databases/databases.service.spec.ts"}, "region": {"startLine": 342}}}]}, {"ruleId": "scanner-5f36a3b1bd1da153", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/databases/databases.service.spec.ts"}, "properties": {"repobilityId": "5c58506689cb5dd4", "scanner": "scanner-primary", "fingerprint": "5f36a3b1bd1da153", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/databases/databases.service.spec.ts"}, "region": {"startLine": 435}}}]}, {"ruleId": "scanner-5f36a3b1bd1da153", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/databases/databases.service.spec.ts"}, "properties": {"repobilityId": "5c58506689cb5dd4", "scanner": "scanner-primary", "fingerprint": "5f36a3b1bd1da153", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/databases/databases.service.spec.ts"}, "region": {"startLine": 454}}}]}, {"ruleId": "scanner-5f36a3b1bd1da153", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/databases/databases.service.spec.ts"}, "properties": {"repobilityId": "5c58506689cb5dd4", "scanner": "scanner-primary", "fingerprint": "5f36a3b1bd1da153", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/databases/databases.service.spec.ts"}, "region": {"startLine": 455}}}]}, {"ruleId": "scanner-5f36a3b1bd1da153", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/databases/databases.service.spec.ts"}, "properties": {"repobilityId": "5c58506689cb5dd4", "scanner": "scanner-primary", "fingerprint": "5f36a3b1bd1da153", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/databases/databases.service.spec.ts"}, "region": {"startLine": 474}}}]}, {"ruleId": "scanner-5f36a3b1bd1da153", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/databases/databases.service.spec.ts"}, "properties": {"repobilityId": "5c58506689cb5dd4", "scanner": "scanner-primary", "fingerprint": "5f36a3b1bd1da153", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/databases/databases.service.spec.ts"}, "region": {"startLine": 709}}}]}, {"ruleId": "scanner-5f36a3b1bd1da153", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/databases/databases.service.spec.ts"}, "properties": {"repobilityId": "5c58506689cb5dd4", "scanner": "scanner-primary", "fingerprint": "5f36a3b1bd1da153", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/databases/databases.service.spec.ts"}, "region": {"startLine": 764}}}]}, {"ruleId": "scanner-5f36a3b1bd1da153", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/databases/databases.service.spec.ts"}, "properties": {"repobilityId": "5c58506689cb5dd4", "scanner": "scanner-primary", "fingerprint": "5f36a3b1bd1da153", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/databases/databases.service.spec.ts"}, "region": {"startLine": 861}}}]}, {"ruleId": "scanner-18abc317046be044", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/databases/databases.service.spec.ts:38"}, "properties": {"repobilityId": "9a07a21265295c4e", "scanner": "scanner-primary", "fingerprint": "18abc317046be044", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/databases/databases.service.spec.ts"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-09fda01da83c073a", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/databases/db-dump.util.spec.ts"}, "properties": {"repobilityId": "7c82e56cc088855f", "scanner": "scanner-primary", "fingerprint": "09fda01da83c073a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/databases/db-dump.util.spec.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-8cb7396ef19d2476", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/databases/compose-db-detect.spec.ts"}, "properties": {"repobilityId": "ea0299ef936a0cdf", "scanner": "scanner-primary", "fingerprint": "8cb7396ef19d2476", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/databases/compose-db-detect.spec.ts"}, "region": {"startLine": 27}}}]}, {"ruleId": "scanner-81ea2ccea7de190a", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/databases/dto/create-database.dto.spec.ts"}, "properties": {"repobilityId": "65f780da789f4f96", "scanner": "scanner-primary", "fingerprint": "81ea2ccea7de190a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/databases/dto/create-database.dto.spec.ts"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-950577b1a7c6efcd", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/email/mail-server.service.ts:9"}, "properties": {"repobilityId": "6f51ce5a46eb9e8c", "scanner": "scanner-primary", "fingerprint": "950577b1a7c6efcd", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/email/mail-server.service.ts"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-7276ce5da6406c97", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/email/mail-server.service.spec.ts:61"}, "properties": {"repobilityId": "2d1ebeed5563abd8", "scanner": "scanner-primary", "fingerprint": "7276ce5da6406c97", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/email/mail-server.service.spec.ts"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-0516b607f0dde15c", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/marketplace/marketplace.service.spec.ts"}, "properties": {"repobilityId": "021afaa29dc0c132", "scanner": "scanner-primary", "fingerprint": "0516b607f0dde15c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/marketplace/marketplace.service.spec.ts"}, "region": {"startLine": 565}}}]}, {"ruleId": "scanner-42d36bb699569e4d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/marketplace/marketplace.service.ts:13"}, "properties": {"repobilityId": "cbc560dedbd74fd5", "scanner": "scanner-primary", "fingerprint": "42d36bb699569e4d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/marketplace/marketplace.service.ts"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-e35af888014731dc", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/auth/two-factor.spec.ts"}, "properties": {"repobilityId": "61e786156d48cbf8", "scanner": "scanner-primary", "fingerprint": "e35af888014731dc", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/auth/two-factor.spec.ts"}, "region": {"startLine": 127}}}]}, {"ruleId": "scanner-e35af888014731dc", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/auth/two-factor.spec.ts"}, "properties": {"repobilityId": "61e786156d48cbf8", "scanner": "scanner-primary", "fingerprint": "e35af888014731dc", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/auth/two-factor.spec.ts"}, "region": {"startLine": 302}}}]}, {"ruleId": "scanner-e35af888014731dc", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/auth/two-factor.spec.ts"}, "properties": {"repobilityId": "61e786156d48cbf8", "scanner": "scanner-primary", "fingerprint": "e35af888014731dc", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/auth/two-factor.spec.ts"}, "region": {"startLine": 321}}}]}, {"ruleId": "scanner-e35af888014731dc", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/auth/two-factor.spec.ts"}, "properties": {"repobilityId": "61e786156d48cbf8", "scanner": "scanner-primary", "fingerprint": "e35af888014731dc", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/auth/two-factor.spec.ts"}, "region": {"startLine": 496}}}]}, {"ruleId": "scanner-e35af888014731dc", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/auth/two-factor.spec.ts"}, "properties": {"repobilityId": "61e786156d48cbf8", "scanner": "scanner-primary", "fingerprint": "e35af888014731dc", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/auth/two-factor.spec.ts"}, "region": {"startLine": 537}}}]}, {"ruleId": "scanner-3e6e137849277383", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/auth/auth-flow.spec.ts"}, "properties": {"repobilityId": "276088acacfcb136", "scanner": "scanner-primary", "fingerprint": "3e6e137849277383", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/auth/auth-flow.spec.ts"}, "region": {"startLine": 107}}}]}, {"ruleId": "scanner-3e6e137849277383", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/auth/auth-flow.spec.ts"}, "properties": {"repobilityId": "276088acacfcb136", "scanner": "scanner-primary", "fingerprint": "3e6e137849277383", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/auth/auth-flow.spec.ts"}, "region": {"startLine": 190}}}]}, {"ruleId": "scanner-3e6e137849277383", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/auth/auth-flow.spec.ts"}, "properties": {"repobilityId": "276088acacfcb136", "scanner": "scanner-primary", "fingerprint": "3e6e137849277383", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/auth/auth-flow.spec.ts"}, "region": {"startLine": 205}}}]}, {"ruleId": "scanner-3e6e137849277383", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/auth/auth-flow.spec.ts"}, "properties": {"repobilityId": "276088acacfcb136", "scanner": "scanner-primary", "fingerprint": "3e6e137849277383", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/auth/auth-flow.spec.ts"}, "region": {"startLine": 214}}}]}, {"ruleId": "scanner-3e6e137849277383", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/auth/auth-flow.spec.ts"}, "properties": {"repobilityId": "276088acacfcb136", "scanner": "scanner-primary", "fingerprint": "3e6e137849277383", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/auth/auth-flow.spec.ts"}, "region": {"startLine": 407}}}]}, {"ruleId": "scanner-3ba8ee4831df6a1d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/projects/projects.service.ts:29"}, "properties": {"repobilityId": "7291a76b4719a75d", "scanner": "scanner-primary", "fingerprint": "3ba8ee4831df6a1d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/projects/projects.service.ts"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-12e08843dddd9090", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/agent/agent.service.spec.ts"}, "properties": {"repobilityId": "472758763b2f534f", "scanner": "scanner-primary", "fingerprint": "12e08843dddd9090", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/agent/agent.service.spec.ts"}, "region": {"startLine": 69}}}]}, {"ruleId": "scanner-12e08843dddd9090", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/agent/agent.service.spec.ts"}, "properties": {"repobilityId": "472758763b2f534f", "scanner": "scanner-primary", "fingerprint": "12e08843dddd9090", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/agent/agent.service.spec.ts"}, "region": {"startLine": 126}}}]}, {"ruleId": "scanner-12e08843dddd9090", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/agent/agent.service.spec.ts"}, "properties": {"repobilityId": "472758763b2f534f", "scanner": "scanner-primary", "fingerprint": "12e08843dddd9090", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/agent/agent.service.spec.ts"}, "region": {"startLine": 127}}}]}, {"ruleId": "scanner-12e08843dddd9090", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/agent/agent.service.spec.ts"}, "properties": {"repobilityId": "472758763b2f534f", "scanner": "scanner-primary", "fingerprint": "12e08843dddd9090", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/agent/agent.service.spec.ts"}, "region": {"startLine": 132}}}]}, {"ruleId": "scanner-12e08843dddd9090", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/agent/agent.service.spec.ts"}, "properties": {"repobilityId": "472758763b2f534f", "scanner": "scanner-primary", "fingerprint": "12e08843dddd9090", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/agent/agent.service.spec.ts"}, "region": {"startLine": 159}}}]}, {"ruleId": "scanner-b10f65f9a257dc59", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/project-transfer/project-transfer.service.ts:11"}, "properties": {"repobilityId": "5354af75c0381c5d", "scanner": "scanner-primary", "fingerprint": "b10f65f9a257dc59", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/project-transfer/project-transfer.service.ts"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-42a28acf9f70d6fc", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/files/docker-fs.ts:33"}, "properties": {"repobilityId": "2bf38f06a6c1c3ac", "scanner": "scanner-primary", "fingerprint": "42a28acf9f70d6fc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/files/docker-fs.ts"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-1c0f6bc9d2f93177", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in apps/api/src/modules/admin/reaper.service.ts:78"}, "properties": {"repobilityId": "2101abb49736ac75", "scanner": "scanner-primary", "fingerprint": "1c0f6bc9d2f93177", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/admin/reaper.service.ts"}, "region": {"startLine": 78}}}]}, {"ruleId": "scanner-358ac602c93df8d6", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/admin/reaper.service.ts:2"}, "properties": {"repobilityId": "13892c5bd10e3642", "scanner": "scanner-primary", "fingerprint": "358ac602c93df8d6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/admin/reaper.service.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-e86fdd44e108a911", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/backups/backups.service.ts:36"}, "properties": {"repobilityId": "7bfb52fffdd28105", "scanner": "scanner-primary", "fingerprint": "e86fdd44e108a911", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/backups/backups.service.ts"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-4289e6d40d3534d6", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/backups/backups.service.spec.ts"}, "properties": {"repobilityId": "082618285277c0fa", "scanner": "scanner-primary", "fingerprint": "4289e6d40d3534d6", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/backups/backups.service.spec.ts"}, "region": {"startLine": 506}}}]}, {"ruleId": "scanner-4289e6d40d3534d6", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/backups/backups.service.spec.ts"}, "properties": {"repobilityId": "082618285277c0fa", "scanner": "scanner-primary", "fingerprint": "4289e6d40d3534d6", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/backups/backups.service.spec.ts"}, "region": {"startLine": 533}}}]}, {"ruleId": "scanner-4289e6d40d3534d6", "level": "error", "message": {"text": "Possible secret in apps/api/src/modules/backups/backups.service.spec.ts"}, "properties": {"repobilityId": "082618285277c0fa", "scanner": "scanner-primary", "fingerprint": "4289e6d40d3534d6", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/backups/backups.service.spec.ts"}, "region": {"startLine": 718}}}]}, {"ruleId": "scanner-caf4f0681a81d6a2", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/backups/backups.service.spec.ts:37"}, "properties": {"repobilityId": "2e24967e9289363f", "scanner": "scanner-primary", "fingerprint": "caf4f0681a81d6a2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/backups/backups.service.spec.ts"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-5d2e15a76550e437", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/servers/servers.service.ts:8"}, "properties": {"repobilityId": "ebf625bc9068e346", "scanner": "scanner-primary", "fingerprint": "5d2e15a76550e437", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/servers/servers.service.ts"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-b6d29ef39e737873", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/sftp/sftp.service.ts:19"}, "properties": {"repobilityId": "cf383eca4f1da430", "scanner": "scanner-primary", "fingerprint": "b6d29ef39e737873", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/sftp/sftp.service.ts"}, "region": {"startLine": 19}}}]}, {"ruleId": "scanner-cec20405e231ad42", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/system/system-updates.service.ts:8"}, "properties": {"repobilityId": "641d31cb0d37d822", "scanner": "scanner-primary", "fingerprint": "cec20405e231ad42", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/system/system-updates.service.ts"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-1fbc9fe808288572", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/applications/applications.helpers.ts:5"}, "properties": {"repobilityId": "116f35d61853e390", "scanner": "scanner-primary", "fingerprint": "1fbc9fe808288572", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/applications/applications.helpers.ts"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-0def422cb3f44a9f", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/applications/application-deploy.service.ts:37"}, "properties": {"repobilityId": "5dc03a507f891796", "scanner": "scanner-primary", "fingerprint": "0def422cb3f44a9f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/applications/application-deploy.service.ts"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-877f77283d5e4f4e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/applications/applications.service.ts:39"}, "properties": {"repobilityId": "116cce616bb56164", "scanner": "scanner-primary", "fingerprint": "877f77283d5e4f4e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/applications/applications.service.ts"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-68b4cdad78804823", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/applications/application-deploy.service.spec.ts:48"}, "properties": {"repobilityId": "9ac06fbf7802849a", "scanner": "scanner-primary", "fingerprint": "68b4cdad78804823", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/applications/application-deploy.service.spec.ts"}, "region": {"startLine": 48}}}]}, {"ruleId": "scanner-fad926c2e5329db5", "level": "error", "message": {"text": "Insecure pattern 'exec_used' in apps/api/src/modules/applications/applications.controller.ts:63"}, "properties": {"repobilityId": "80c9be88d2111dce", "scanner": "scanner-primary", "fingerprint": "fad926c2e5329db5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["owasp", "exec_used"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/applications/applications.controller.ts"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-891e61be583440be", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/reverse-proxy/reverse-proxy.service.ts:2"}, "properties": {"repobilityId": "16c92a8a1cfc799b", "scanner": "scanner-primary", "fingerprint": "891e61be583440be", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/reverse-proxy/reverse-proxy.service.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-c7712a941982dcea", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/api/src/modules/deployment-target/deployment-target.service.ts:2"}, "properties": {"repobilityId": "425e5d36b31dbbcd", "scanner": "scanner-primary", "fingerprint": "c7712a941982dcea", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/modules/deployment-target/deployment-target.service.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-35ac9c0de88efc59", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/dashboard/src/app/layout.tsx:38"}, "properties": {"repobilityId": "e5108aacd2602e1b", "scanner": "scanner-primary", "fingerprint": "35ac9c0de88efc59", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/dashboard/src/app/layout.tsx"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-ebece4eedf355f9d", "level": "error", "message": {"text": "Possible secret in apps/dashboard/src/app/(dashboard)/dashboard/databases/page.tsx"}, "properties": {"repobilityId": "94b315449a40d4bc", "scanner": "scanner-primary", "fingerprint": "ebece4eedf355f9d", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/dashboard/src/app/(dashboard)/dashboard/databases/page.tsx"}, "region": {"startLine": 569}}}]}, {"ruleId": "scanner-57ed03bacc8073f4", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in apps/dashboard/e2e/helpers/api-mock.ts:155"}, "properties": {"repobilityId": "35ec8ec735cb1270", "scanner": "scanner-primary", "fingerprint": "57ed03bacc8073f4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/dashboard/e2e/helpers/api-mock.ts"}, "region": {"startLine": 155}}}]}, {"ruleId": "scanner-72ae377f8280ad8f", "level": "error", "message": {"text": "Possible secret in apps/agent/internal/tasks/plans.go"}, "properties": {"repobilityId": "63c7293fe0480b5a", "scanner": "scanner-primary", "fingerprint": "72ae377f8280ad8f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/agent/internal/tasks/plans.go"}, "region": {"startLine": 86}}}]}, {"ruleId": "scanner-72ae377f8280ad8f", "level": "error", "message": {"text": "Possible secret in apps/agent/internal/tasks/plans.go"}, "properties": {"repobilityId": "63c7293fe0480b5a", "scanner": "scanner-primary", "fingerprint": "72ae377f8280ad8f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/agent/internal/tasks/plans.go"}, "region": {"startLine": 146}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bd7f3c1c34d83159", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 100}}}]}, {"ruleId": "scanner-69ad1b11d0c038d5", "level": "note", "message": {"text": "Very large file: apps/api/src/modules/auth/auth.service.ts (1251 lines)"}, "properties": {"repobilityId": "0e4e76afae1df7d7", "scanner": "scanner-primary", "fingerprint": "69ad1b11d0c038d5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-934db95e78d761d6", "level": "note", "message": {"text": "Very large file: apps/api/src/modules/projects/projects.service.ts (1326 lines)"}, "properties": {"repobilityId": "5f246f2b8e5780e6", "scanner": "scanner-primary", "fingerprint": "934db95e78d761d6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-74f96cdb78d3dc85", "level": "note", "message": {"text": "Very large file: apps/api/src/modules/files/files.service.ts (1688 lines)"}, "properties": {"repobilityId": "04d2d29c4d2c8132", "scanner": "scanner-primary", "fingerprint": "74f96cdb78d3dc85", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0d0525416a55ed8a", "level": "note", "message": {"text": "Very large file: apps/api/src/modules/backups/backups.service.ts (1481 lines)"}, "properties": {"repobilityId": "12eef1691560094a", "scanner": "scanner-primary", "fingerprint": "0d0525416a55ed8a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7f0d82fc2c6a0928", "level": "note", "message": {"text": "Very large file: apps/api/src/modules/sftp/sftp.service.ts (1357 lines)"}, "properties": {"repobilityId": "8535ece325aa20b9", "scanner": "scanner-primary", "fingerprint": "7f0d82fc2c6a0928", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ec336bb914d614ee", "level": "note", "message": {"text": "Very large file: apps/api/src/modules/applications/application-deploy.service.ts (1714 lines)"}, "properties": {"repobilityId": "9cb330d1fcc048e9", "scanner": "scanner-primary", "fingerprint": "ec336bb914d614ee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-095ad5b26a777dd5", "level": "note", "message": {"text": "Very large file: apps/dashboard/src/app/(dashboard)/dashboard/projects/[id]/page.tsx (1224 lines)"}, "properties": {"repobilityId": "45e2229c58ddb8d2", "scanner": "scanner-primary", "fingerprint": "095ad5b26a777dd5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e4778f9e1060f8c6", "level": "note", "message": {"text": "Very large file: apps/dashboard/src/app/(dashboard)/dashboard/applications/quick-deploy.tsx (1233 lines)"}, "properties": {"repobilityId": "24f4a02b566f6323", "scanner": "scanner-primary", "fingerprint": "e4778f9e1060f8c6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e5580b473b7b1043", "level": "note", "message": {"text": "Very large file: apps/dashboard/src/app/(dashboard)/dashboard/applications/[id]/page.tsx (2028 lines)"}, "properties": {"repobilityId": "4f86c48f8c3f4eff", "scanner": "scanner-primary", "fingerprint": "e5580b473b7b1043", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-58a066cad812921d", "level": "note", "message": {"text": "Very large file: apps/dashboard/src/app/(dashboard)/dashboard/domains/page.tsx (1157 lines)"}, "properties": {"repobilityId": "9a0e11c7e331025d", "scanner": "scanner-primary", "fingerprint": "58a066cad812921d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7926c08e0ee06514", "level": "note", "message": {"text": "Very large file: apps/dashboard/src/lib/i18n/translations.ts (2467 lines)"}, "properties": {"repobilityId": "e1efe54d5301d39d", "scanner": "scanner-primary", "fingerprint": "7926c08e0ee06514", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "c8d68264e2651b8b", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b06b8d86f24c77f9", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/api/package.json"}, "properties": {"repobilityId": "ce77cd34ed0306d4", "scanner": "scanner-primary", "fingerprint": "b06b8d86f24c77f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ec82f9367de34433", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/dashboard/package.json"}, "properties": {"repobilityId": "4cf5ff15e81d6746", "scanner": "scanner-primary", "fingerprint": "ec82f9367de34433", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/dashboard/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb3e52667c84fb86", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/types/package.json"}, "properties": {"repobilityId": "b5e2784f829944e6", "scanner": "scanner-primary", "fingerprint": "cb3e52667c84fb86", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/types/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "bbddaf395f79a018", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "70bbd4bdc17dfe66", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "1aaa0b2fa35b2e89", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "d1f106987c52d8b2", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "f4213a41d2a968b4", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "1a3cf762f83ff7e7", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-f5ce3b8a6f641cfe", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/main.ts:37"}, "properties": {"repobilityId": "902b7bf471f83916", "scanner": "scanner-primary", "fingerprint": "f5ce3b8a6f641cfe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1119bf8eed6d192a", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/app.module.ts:53"}, "properties": {"repobilityId": "bb732a34604cd49c", "scanner": "scanner-primary", "fingerprint": "1119bf8eed6d192a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3137c9c1f7b56078", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/api/src/common/guards/maintenance.guard.ts:93"}, "properties": {"repobilityId": "7f5e23e17d988396", "scanner": "scanner-primary", "fingerprint": "3137c9c1f7b56078", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-36aff7d445bd8817", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/docker/docker.service.ts:103"}, "properties": {"repobilityId": "5cc1805a0fb6369f", "scanner": "scanner-primary", "fingerprint": "36aff7d445bd8817", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a224355c26ec8788", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/notifications/notifications.service.ts:458"}, "properties": {"repobilityId": "c34bd063bd7947bf", "scanner": "scanner-primary", "fingerprint": "a224355c26ec8788", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fb5ec44a294b04b", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/api/src/modules/monitoring/monitoring.service.ts:236"}, "properties": {"repobilityId": "3586aacec05fd9f0", "scanner": "scanner-primary", "fingerprint": "7fb5ec44a294b04b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f8294c07ebc8e95", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/modules/databases/databases.service.ts:307"}, "properties": {"repobilityId": "879627801f1ae38f", "scanner": "scanner-primary", "fingerprint": "4f8294c07ebc8e95", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-83bf597a2ae949ce", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/email/mail-server.service.ts:23"}, "properties": {"repobilityId": "3b4a4bb58e041437", "scanner": "scanner-primary", "fingerprint": "83bf597a2ae949ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-93b5c21702014bed", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/email/mail-server.service.spec.ts:383"}, "properties": {"repobilityId": "b72954b05834cec3", "scanner": "scanner-primary", "fingerprint": "93b5c21702014bed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ec14fe6e3db9760", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/modules/email/email.service.ts:441"}, "properties": {"repobilityId": "d6bf6532992d7517", "scanner": "scanner-primary", "fingerprint": "0ec14fe6e3db9760", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cf5f9e0fdee55c4a", "level": "none", "message": {"text": "Commented-code block (10 lines) in apps/api/src/modules/marketplace/marketplace.service.ts:57"}, "properties": {"repobilityId": "6325c0592e313d9f", "scanner": "scanner-primary", "fingerprint": "cf5f9e0fdee55c4a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d97413d24ae4cd31", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/modules/marketplace/templates.ts:6"}, "properties": {"repobilityId": "5b99173de4deb5b3", "scanner": "scanner-primary", "fingerprint": "d97413d24ae4cd31", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-64d7492ca8a04114", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/modules/git-providers/git-oauth.service.ts:84"}, "properties": {"repobilityId": "ce1575fa74f12c4b", "scanner": "scanner-primary", "fingerprint": "64d7492ca8a04114", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5e49ca60624c4994", "level": "note", "message": {"text": "Legacy-named symbol `ghr_old` in apps/api/src/modules/git-providers/git-providers.service.spec.ts:276"}, "properties": {"repobilityId": "4454c9a002a5b984", "scanner": "scanner-primary", "fingerprint": "5e49ca60624c4994", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-14bbb7f7235ed5fa", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/git-providers/git-providers.service.ts:217"}, "properties": {"repobilityId": "06e58e59d1d6fc2c", "scanner": "scanner-primary", "fingerprint": "14bbb7f7235ed5fa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3757bb8518b8812a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/modules/git-providers/git-providers.service.ts:268"}, "properties": {"repobilityId": "f4753f58902d86c7", "scanner": "scanner-primary", "fingerprint": "3757bb8518b8812a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ab1cf43f0efa230e", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/modules/auth/auth.service.ts:90"}, "properties": {"repobilityId": "31b697e0489ccd5d", "scanner": "scanner-primary", "fingerprint": "ab1cf43f0efa230e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-86510d022d96eaaf", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/modules/projects/projects.service.ts:111"}, "properties": {"repobilityId": "eedeb08de4f66196", "scanner": "scanner-primary", "fingerprint": "86510d022d96eaaf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b381899144dbffe", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/agent/agent.service.ts:621"}, "properties": {"repobilityId": "e3b4e591476b1daa", "scanner": "scanner-primary", "fingerprint": "4b381899144dbffe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ebf4ab9ea352ac2", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/modules/agent/agent.controller.ts:130"}, "properties": {"repobilityId": "49904f513920fe6e", "scanner": "scanner-primary", "fingerprint": "1ebf4ab9ea352ac2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-deaf2285546feb19", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/ssl/ssl.service.ts:202"}, "properties": {"repobilityId": "5fb349a6f4ca7e0b", "scanner": "scanner-primary", "fingerprint": "deaf2285546feb19", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b56dbf639855ea57", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/modules/project-transfer/project-transfer.service.ts:44"}, "properties": {"repobilityId": "034ab54e60ca1aa0", "scanner": "scanner-primary", "fingerprint": "b56dbf639855ea57", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5c43f779fada916", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/files/files.service.ts:109"}, "properties": {"repobilityId": "456c20d5c2ebca76", "scanner": "scanner-primary", "fingerprint": "f5c43f779fada916", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1db2e57f8e280a13", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/files/docker-fs.ts:167"}, "properties": {"repobilityId": "e290f5ca5524f789", "scanner": "scanner-primary", "fingerprint": "1db2e57f8e280a13", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d94884d3a98ffb8", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/admin/reaper.service.ts:107"}, "properties": {"repobilityId": "00dbb85dc9389f6b", "scanner": "scanner-primary", "fingerprint": "3d94884d3a98ffb8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8a7c12d9e838e5fc", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/modules/deployments/deployments.service.ts:105"}, "properties": {"repobilityId": "6524724c5c2ae6a1", "scanner": "scanner-primary", "fingerprint": "8a7c12d9e838e5fc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-797d581912d366e2", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/modules/backups/backups.service.ts:254"}, "properties": {"repobilityId": "05e6a5ef403477ef", "scanner": "scanner-primary", "fingerprint": "797d581912d366e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f9ad55a19e36099a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/servers/servers.service.ts:55"}, "properties": {"repobilityId": "036b191017ad20cb", "scanner": "scanner-primary", "fingerprint": "f9ad55a19e36099a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea59304eae3b32ea", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/sftp/sftp.service.ts:722"}, "properties": {"repobilityId": "9aedbaee29156173", "scanner": "scanner-primary", "fingerprint": "ea59304eae3b32ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c80b4970235852aa", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/modules/sftp/dto/sftp.dto.ts:18"}, "properties": {"repobilityId": "7e7da5d7135f7c2d", "scanner": "scanner-primary", "fingerprint": "c80b4970235852aa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21c8da131946ff65", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/system/system-updates.service.ts:177"}, "properties": {"repobilityId": "c71e7935a4ea5f0e", "scanner": "scanner-primary", "fingerprint": "21c8da131946ff65", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f131ba5678ba062f", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/modules/system/system-config.service.ts:259"}, "properties": {"repobilityId": "6ef8fe0b785c673a", "scanner": "scanner-primary", "fingerprint": "f131ba5678ba062f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5d50cd8ecf57a82", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/applications/applications.helpers.ts:219"}, "properties": {"repobilityId": "de1ec51582de4917", "scanner": "scanner-primary", "fingerprint": "d5d50cd8ecf57a82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f60cd1780c3312b", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/applications/application-deploy.service.ts:58"}, "properties": {"repobilityId": "f452a41eada75216", "scanner": "scanner-primary", "fingerprint": "1f60cd1780c3312b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8088573361efc560", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/applications/applications.service.ts:176"}, "properties": {"repobilityId": "c57ecda4d1d06424", "scanner": "scanner-primary", "fingerprint": "8088573361efc560", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6ad5eed478918499", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/applications/application-deploy.service.spec.ts:6"}, "properties": {"repobilityId": "c4ac8f8cdaa4df22", "scanner": "scanner-primary", "fingerprint": "6ad5eed478918499", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-84011a6c2eb7cbec", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/applications/application-network.service.ts:148"}, "properties": {"repobilityId": "106d811ad2ff7787", "scanner": "scanner-primary", "fingerprint": "84011a6c2eb7cbec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04efeff840f2e3d6", "level": "note", "message": {"text": "Legacy-named symbol `ghLegacy` in apps/api/src/modules/applications/webhooks.controller.ts:99"}, "properties": {"repobilityId": "8858e2631f16ab55", "scanner": "scanner-primary", "fingerprint": "04efeff840f2e3d6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0afbc47e3ce51219", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/modules/applications/webhooks.controller.ts:54"}, "properties": {"repobilityId": "532b95c3ef7b14e0", "scanner": "scanner-primary", "fingerprint": "0afbc47e3ce51219", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b7ffeda27eb6b2dd", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/applications/application-env.service.ts:40"}, "properties": {"repobilityId": "a0ee782ee80f672a", "scanner": "scanner-primary", "fingerprint": "b7ffeda27eb6b2dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6630f5436a379fc0", "level": "none", "message": {"text": "Commented-code block (9 lines) in apps/api/src/modules/applications/application-ops.service.ts:124"}, "properties": {"repobilityId": "498dd79a2ee53bc6", "scanner": "scanner-primary", "fingerprint": "6630f5436a379fc0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-551c1163e14cf6b3", "level": "none", "message": {"text": "Commented-code block (14 lines) in apps/api/src/modules/reverse-proxy/reverse-proxy.service.ts:367"}, "properties": {"repobilityId": "d5bc1896b6889f84", "scanner": "scanner-primary", "fingerprint": "551c1163e14cf6b3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b405d44c920c4949", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/modules/domains/domains.controller.ts:17"}, "properties": {"repobilityId": "739e40427a46518a", "scanner": "scanner-primary", "fingerprint": "b405d44c920c4949", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-21e52c0394f7e43a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/modules/domains/domains.service.ts:49"}, "properties": {"repobilityId": "c52befa9589fc9cd", "scanner": "scanner-primary", "fingerprint": "21e52c0394f7e43a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f010a6a93fda2db2", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/modules/domains/domain-attach.service.ts:63"}, "properties": {"repobilityId": "b80039843995022f", "scanner": "scanner-primary", "fingerprint": "f010a6a93fda2db2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b3357f5e63565531", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/dashboard/src/app/layout.tsx:20"}, "properties": {"repobilityId": "15c089c000b863f5", "scanner": "scanner-primary", "fingerprint": "b3357f5e63565531", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23e56db6b52da30e", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/dashboard/src/app/(dashboard)/layout.tsx:62"}, "properties": {"repobilityId": "76428de72ac7fde3", "scanner": "scanner-primary", "fingerprint": "23e56db6b52da30e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa49e3df1419b7af", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/dashboard/src/app/(dashboard)/dashboard/settings/page.tsx:44"}, "properties": {"repobilityId": "355e8abd5e812208", "scanner": "scanner-primary", "fingerprint": "fa49e3df1419b7af", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-31b80fbfd2d0b4f7", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/dashboard/src/app/(dashboard)/dashboard/files/page.tsx:194"}, "properties": {"repobilityId": "568b8cf7f32fb2e7", "scanner": "scanner-primary", "fingerprint": "31b80fbfd2d0b4f7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b6c2289855f889ed", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/dashboard/src/app/(dashboard)/dashboard/admin/page.tsx:85"}, "properties": {"repobilityId": "0d5f71926415ecd7", "scanner": "scanner-primary", "fingerprint": "b6c2289855f889ed", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20c12035f2a27f31", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/dashboard/src/app/(dashboard)/dashboard/applications/quick-deploy.tsx:330"}, "properties": {"repobilityId": "389ffb27de9eca94", "scanner": "scanner-primary", "fingerprint": "20c12035f2a27f31", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e20dd1d7b61ae4a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/dashboard/src/app/(dashboard)/dashboard/applications/page.tsx:169"}, "properties": {"repobilityId": "ec67fea8ae532624", "scanner": "scanner-primary", "fingerprint": "9e20dd1d7b61ae4a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-95dd2e6534c469d7", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/dashboard/src/app/(dashboard)/dashboard/applications/[id]/page.tsx:159"}, "properties": {"repobilityId": "5acbda2e457f5d78", "scanner": "scanner-primary", "fingerprint": "95dd2e6534c469d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2bb7247d4c404b0b", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/dashboard/src/app/(auth)/verify-email/page.tsx:14"}, "properties": {"repobilityId": "fe6378491fc67cd9", "scanner": "scanner-primary", "fingerprint": "2bb7247d4c404b0b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1a3535471c311503", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/dashboard/src/app/setup/page.tsx:56"}, "properties": {"repobilityId": "57dbbe0bd5ec1ef2", "scanner": "scanner-primary", "fingerprint": "1a3535471c311503", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40f063aeeff7b85b", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/dashboard/src/lib/app-format.ts:4"}, "properties": {"repobilityId": "2c1563d953af6d84", "scanner": "scanner-primary", "fingerprint": "40f063aeeff7b85b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d36ec7b284b5cba8", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/dashboard/src/lib/api.ts:156"}, "properties": {"repobilityId": "30e3909960e767f2", "scanner": "scanner-primary", "fingerprint": "d36ec7b284b5cba8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bab697b79603c8b1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/dashboard/src/lib/api.ts:172"}, "properties": {"repobilityId": "fa96e76e87f10696", "scanner": "scanner-primary", "fingerprint": "bab697b79603c8b1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-908e04f23d2e4c02", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/dashboard/src/lib/api.spec.ts:3"}, "properties": {"repobilityId": "b25374a7f8834cba", "scanner": "scanner-primary", "fingerprint": "908e04f23d2e4c02", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a96cdc6861421ef7", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/dashboard/src/lib/store.ts:19"}, "properties": {"repobilityId": "980fa24da15d916c", "scanner": "scanner-primary", "fingerprint": "a96cdc6861421ef7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb36609299cd0974", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/types/src/docker.ts:1"}, "properties": {"repobilityId": "de2180c9aa59ba8a", "scanner": "scanner-primary", "fingerprint": "fb36609299cd0974", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-70fcae2d13c708b6", "level": "note", "message": {"text": "17 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "f21675bed249619c", "scanner": "scanner-primary", "fingerprint": "70fcae2d13c708b6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-8ae721aecccef197", "level": "error", "message": {"text": "Dangling fetch: POST https://github.com/login/device/code (apps/api/src/modules/git-providers/git-oauth.service.ts:84)"}, "properties": {"repobilityId": "e2c04983817c5d72", "scanner": "scanner-primary", "fingerprint": "8ae721aecccef197", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-337e92ac44ad1bef", "level": "error", "message": {"text": "Dangling fetch: POST https://github.com/login/oauth/access_token (apps/api/src/modules/git-providers/git-oauth.service.ts:134)"}, "properties": {"repobilityId": "ec07df3206437057", "scanner": "scanner-primary", "fingerprint": "337e92ac44ad1bef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b799d64d923f59f7", "level": "error", "message": {"text": "Dangling fetch: POST https://github.com/login/oauth/access_token (apps/api/src/modules/git-providers/git-oauth.service.ts:257)"}, "properties": {"repobilityId": "93c4a176903c4aa4", "scanner": "scanner-primary", "fingerprint": "b799d64d923f59f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6fbfd1ff772cbfc9", "level": "error", "message": {"text": "Dangling fetch: GET https://api.github.com/user (apps/api/src/modules/git-providers/git-oauth.service.ts:310)"}, "properties": {"repobilityId": "8cb3d1ed47e540ca", "scanner": "scanner-primary", "fingerprint": "6fbfd1ff772cbfc9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-41686ac74c69e5fe", "level": "error", "message": {"text": "Dangling fetch: GET https://api.github.com/repos/${repoFullName}/contents/${file}?ref=${branch} (apps/api/src/modules/git-providers/git-providers.service.ts:153)"}, "properties": {"repobilityId": "7f26d69e00b78d1d", "scanner": "scanner-primary", "fingerprint": "41686ac74c69e5fe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e93add5028f697bd", "level": "error", "message": {"text": "Dangling fetch: GET https://gitlab.com/api/v4/projects/${projectPath}/repository/files/${encodeURIComponent(file)}?ref=${branch} (apps/api/src/modules/git-providers/git-providers.service.ts:169)"}, "properties": {"repobilityId": "7fca2f170a54ba2a", "scanner": "scanner-primary", "fingerprint": "e93add5028f697bd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0ef0b7ae315affb0", "level": "error", "message": {"text": "Dangling fetch: GET https://api.github.com/repos/${repoFullName}/contents/${encodeURIComponent(filePath)}?ref=${branch} (apps/api/src/modules/git-providers/git-providers.service.ts:258)"}, "properties": {"repobilityId": "8d69c2ca0e14c7b4", "scanner": "scanner-primary", "fingerprint": "0ef0b7ae315affb0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9d2f46184154db84", "level": "error", "message": {"text": "Dangling fetch: GET https://gitlab.com/api/v4/projects/${projectPath}/repository/files/${encodeURIComponent(filePath)}/raw?ref=${branch} (apps/api/src/modules/git-providers/git-providers.service.ts:268)"}, "properties": {"repobilityId": "e6c2dc95e92ea0b2", "scanner": "scanner-primary", "fingerprint": "9d2f46184154db84", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f2409015dc29633b", "level": "error", "message": {"text": "Dangling fetch: GET https://api.bitbucket.org/2.0/repositories/${repoFullName}/src/${branch}/${filePath} (apps/api/src/modules/git-providers/git-providers.service.ts:275)"}, "properties": {"repobilityId": "4c74433f05b89cfb", "scanner": "scanner-primary", "fingerprint": "f2409015dc29633b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9426f8616d70437b", "level": "error", "message": {"text": "Dangling fetch: GET https://api.github.com/user (apps/api/src/modules/git-providers/git-providers.service.ts:303)"}, "properties": {"repobilityId": "bd0d3989759f7f0c", "scanner": "scanner-primary", "fingerprint": "9426f8616d70437b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-44ce68034bf0393d", "level": "error", "message": {"text": "Dangling fetch: GET https://gitlab.com/api/v4/user (apps/api/src/modules/git-providers/git-providers.service.ts:311)"}, "properties": {"repobilityId": "218b931921e0e9ec", "scanner": "scanner-primary", "fingerprint": "44ce68034bf0393d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0c669d379d871158", "level": "error", "message": {"text": "Dangling fetch: GET https://api.bitbucket.org/2.0/user (apps/api/src/modules/git-providers/git-providers.service.ts:319)"}, "properties": {"repobilityId": "ba2d5a6e3dbc445f", "scanner": "scanner-primary", "fingerprint": "0c669d379d871158", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a4ae1a3b04adcee", "level": "error", "message": {"text": "Dangling fetch: GET https://api.github.com/user/repos?per_page=100&sort=updated&affiliation=owner,collaborator,organization_member (apps/api/src/modules/git-providers/git-providers.service.ts:331)"}, "properties": {"repobilityId": "1783b6c19aa64ec1", "scanner": "scanner-primary", "fingerprint": "3a4ae1a3b04adcee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-be3bba40500ac321", "level": "error", "message": {"text": "Dangling fetch: GET https://gitlab.com/api/v4/projects?membership=true&per_page=100&order_by=updated_at (apps/api/src/modules/git-providers/git-providers.service.ts:349)"}, "properties": {"repobilityId": "6c9ecfebe1a004d6", "scanner": "scanner-primary", "fingerprint": "be3bba40500ac321", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e79af46e09a44e2", "level": "error", "message": {"text": "Dangling fetch: GET https://api.bitbucket.org/2.0/repositories?role=member&pagelen=100&sort=-updated_on (apps/api/src/modules/git-providers/git-providers.service.ts:367)"}, "properties": {"repobilityId": "5fb623b4440c18aa", "scanner": "scanner-primary", "fingerprint": "5e79af46e09a44e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-876b238a8a23df18", "level": "error", "message": {"text": "Dangling fetch: GET https://${savedPanelDomain}/ (apps/dashboard/src/app/setup/page.tsx:302)"}, "properties": {"repobilityId": "acb00216a8065ebb", "scanner": "scanner-primary", "fingerprint": "876b238a8a23df18", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-db574fbd39578c82", "level": "note", "message": {"text": "Unused endpoint: GET /docker/servers/:serverId/containers"}, "properties": {"repobilityId": "82645bba723a5e4f", "scanner": "scanner-primary", "fingerprint": "db574fbd39578c82", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d0ce76ab8ed1942", "level": "note", "message": {"text": "Unused endpoint: POST /docker/servers/:serverId/containers/action"}, "properties": {"repobilityId": "b61ab43c0d8a26df", "scanner": "scanner-primary", "fingerprint": "8d0ce76ab8ed1942", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-967d0a647ccb3d02", "level": "note", "message": {"text": "Unused endpoint: GET /docker/servers/:serverId/images"}, "properties": {"repobilityId": "37d4e0f6dee0fd5d", "scanner": "scanner-primary", "fingerprint": "967d0a647ccb3d02", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-18741c35dc30ca95", "level": "note", "message": {"text": "Unused endpoint: GET /docker/servers/:serverId/networks"}, "properties": {"repobilityId": "0ee43cda040683d6", "scanner": "scanner-primary", "fingerprint": "18741c35dc30ca95", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c65df75c3e50cf05", "level": "note", "message": {"text": "Unused endpoint: GET /docker/servers/:serverId/volumes"}, "properties": {"repobilityId": "8a6c93a84cb5a67b", "scanner": "scanner-primary", "fingerprint": "c65df75c3e50cf05", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a8b657222dd85be2", "level": "note", "message": {"text": "Unused endpoint: GET /users/me"}, "properties": {"repobilityId": "c9a9dcc7a229f34b", "scanner": "scanner-primary", "fingerprint": "a8b657222dd85be2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9f06644688cd47af", "level": "note", "message": {"text": "Unused endpoint: PATCH /users/me"}, "properties": {"repobilityId": "055170dd8ac07959", "scanner": "scanner-primary", "fingerprint": "9f06644688cd47af", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1b8611747e1d9363", "level": "note", "message": {"text": "Unused endpoint: GET /users/me/notification-preferences"}, "properties": {"repobilityId": "47c88c44e91d65a5", "scanner": "scanner-primary", "fingerprint": "1b8611747e1d9363", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-41aa9e92da3f14ad", "level": "note", "message": {"text": "Unused endpoint: GET /users/:id"}, "properties": {"repobilityId": "5d246bab243ce0ae", "scanner": "scanner-primary", "fingerprint": "41aa9e92da3f14ad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a2da8d08e12b122c", "level": "note", "message": {"text": "Unused endpoint: PATCH /users/:id"}, "properties": {"repobilityId": "5473075570f89633", "scanner": "scanner-primary", "fingerprint": "a2da8d08e12b122c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-79406b9fd85263bf", "level": "note", "message": {"text": "Unused endpoint: DELETE /users/:id"}, "properties": {"repobilityId": "f7617d9297c86da5", "scanner": "scanner-primary", "fingerprint": "79406b9fd85263bf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-995dae05d67aa85a", "level": "note", "message": {"text": "Unused endpoint: GET /notifications/unread-count"}, "properties": {"repobilityId": "32ad1e0c71321280", "scanner": "scanner-primary", "fingerprint": "995dae05d67aa85a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7ae443c3d8d30b78", "level": "note", "message": {"text": "Unused endpoint: POST /notifications/:id/read"}, "properties": {"repobilityId": "04dc64ec0fa33669", "scanner": "scanner-primary", "fingerprint": "7ae443c3d8d30b78", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1b93f5ab485027b7", "level": "note", "message": {"text": "Unused endpoint: POST /notifications/read-all"}, "properties": {"repobilityId": "5f2bfe5d0fd8ce8b", "scanner": "scanner-primary", "fingerprint": "1b93f5ab485027b7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-88d0064420e4064a", "level": "note", "message": {"text": "Unused endpoint: GET /monitoring/servers/:serverId/metrics"}, "properties": {"repobilityId": "3ca6285b30105be9", "scanner": "scanner-primary", "fingerprint": "88d0064420e4064a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c6f46cf62d633395", "level": "note", "message": {"text": "Unused endpoint: POST /monitoring/alert-rules"}, "properties": {"repobilityId": "90d0d97d2fd84940", "scanner": "scanner-primary", "fingerprint": "c6f46cf62d633395", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d2a566449dcea96d", "level": "note", "message": {"text": "Unused endpoint: GET /monitoring/alert-rules"}, "properties": {"repobilityId": "6d60128f34ba6b20", "scanner": "scanner-primary", "fingerprint": "d2a566449dcea96d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c9883bb51f95636b", "level": "note", "message": {"text": "Unused endpoint: PATCH /monitoring/alert-rules/:id"}, "properties": {"repobilityId": "c3786b842f523aeb", "scanner": "scanner-primary", "fingerprint": "c9883bb51f95636b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-09be30dec7548135", "level": "note", "message": {"text": "Unused endpoint: DELETE /monitoring/alert-rules/:id"}, "properties": {"repobilityId": "f36831c69775590c", "scanner": "scanner-primary", "fingerprint": "09be30dec7548135", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e4ac86ed32f36546", "level": "note", "message": {"text": "Unused endpoint: GET /databases/:id"}, "properties": {"repobilityId": "19310aae77903fb6", "scanner": "scanner-primary", "fingerprint": "e4ac86ed32f36546", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3fd603cfd68ca001", "level": "note", "message": {"text": "Unused endpoint: POST /databases/:id/start"}, "properties": {"repobilityId": "489f5e0a4abf35ac", "scanner": "scanner-primary", "fingerprint": "3fd603cfd68ca001", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c7d9a8df53f098e3", "level": "note", "message": {"text": "Unused endpoint: POST /databases/:id/stop"}, "properties": {"repobilityId": "25f38eaa503b9541", "scanner": "scanner-primary", "fingerprint": "c7d9a8df53f098e3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aaa183d7375afeda", "level": "note", "message": {"text": "Unused endpoint: GET /databases/:id/export"}, "properties": {"repobilityId": "947f98d21454bde8", "scanner": "scanner-primary", "fingerprint": "aaa183d7375afeda", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3019fb3e5a61b8e1", "level": "note", "message": {"text": "Unused endpoint: PATCH /databases/:id/parent"}, "properties": {"repobilityId": "36e8b40ffbde0c4c", "scanner": "scanner-primary", "fingerprint": "3019fb3e5a61b8e1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-38b361f65db973b9", "level": "note", "message": {"text": "Unused endpoint: DELETE /databases/:id"}, "properties": {"repobilityId": "447bc73b53190b6a", "scanner": "scanner-primary", "fingerprint": "38b361f65db973b9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1de19822949ec05e", "level": "note", "message": {"text": "Unused endpoint: POST /email/mailboxes"}, "properties": {"repobilityId": "c83fe0b9d30a90e1", "scanner": "scanner-primary", "fingerprint": "1de19822949ec05e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c3ee48f84fb1849f", "level": "note", "message": {"text": "Unused endpoint: GET /email/mailboxes"}, "properties": {"repobilityId": "674488f54f0ad584", "scanner": "scanner-primary", "fingerprint": "c3ee48f84fb1849f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e1eb80dc8d9a8cfb", "level": "note", "message": {"text": "Unused endpoint: GET /email/mailboxes/:id"}, "properties": {"repobilityId": "e639d0d76160c51c", "scanner": "scanner-primary", "fingerprint": "e1eb80dc8d9a8cfb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3e7733099d8e2d8d", "level": "note", "message": {"text": "Unused endpoint: PATCH /email/mailboxes/:id"}, "properties": {"repobilityId": "926846a0b835e89f", "scanner": "scanner-primary", "fingerprint": "3e7733099d8e2d8d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-862b575147c79e27", "level": "note", "message": {"text": "Unused endpoint: DELETE /email/mailboxes/:id"}, "properties": {"repobilityId": "c42bd364dc196451", "scanner": "scanner-primary", "fingerprint": "862b575147c79e27", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d6e074d6bff932bb", "level": "note", "message": {"text": "Unused endpoint: POST /email/aliases"}, "properties": {"repobilityId": "a0ac0421e3f6056d", "scanner": "scanner-primary", "fingerprint": "d6e074d6bff932bb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f2109f0f94a7e23b", "level": "note", "message": {"text": "Unused endpoint: GET /email/aliases"}, "properties": {"repobilityId": "9a1aea85ea8d36b6", "scanner": "scanner-primary", "fingerprint": "f2109f0f94a7e23b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ae8c5b2129e2577e", "level": "note", "message": {"text": "Unused endpoint: DELETE /email/aliases/:id"}, "properties": {"repobilityId": "7c58622e6a15f089", "scanner": "scanner-primary", "fingerprint": "ae8c5b2129e2577e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1ef1d949276e8a95", "level": "note", "message": {"text": "Unused endpoint: GET /email/overview"}, "properties": {"repobilityId": "7f39f46df65006ad", "scanner": "scanner-primary", "fingerprint": "1ef1d949276e8a95", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-98900022c0b7526e", "level": "note", "message": {"text": "Unused endpoint: GET /email/dns/:domainId"}, "properties": {"repobilityId": "b733836397843827", "scanner": "scanner-primary", "fingerprint": "98900022c0b7526e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-90cfb7a825aaa671", "level": "note", "message": {"text": "Unused endpoint: GET /email/dns/:domainId/health"}, "properties": {"repobilityId": "18b9cd08a46c9342", "scanner": "scanner-primary", "fingerprint": "90cfb7a825aaa671", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-45de4bde365554c6", "level": "note", "message": {"text": "Unused endpoint: GET /email/server/:domainId"}, "properties": {"repobilityId": "1abc04b1df1ca454", "scanner": "scanner-primary", "fingerprint": "45de4bde365554c6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-33eb6740b120ae83", "level": "note", "message": {"text": "Unused endpoint: POST /email/server/:domainId/deploy"}, "properties": {"repobilityId": "be15189551e235ac", "scanner": "scanner-primary", "fingerprint": "33eb6740b120ae83", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-36404287eeaad23e", "level": "note", "message": {"text": "Unused endpoint: POST /email/server/:domainId/stop"}, "properties": {"repobilityId": "142857dc84ffe119", "scanner": "scanner-primary", "fingerprint": "36404287eeaad23e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-30ad8eabb3ad4cb2", "level": "note", "message": {"text": "Unused endpoint: DELETE /email/server/:domainId"}, "properties": {"repobilityId": "8b9fc0b059a6dfd4", "scanner": "scanner-primary", "fingerprint": "30ad8eabb3ad4cb2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-41f1d081f13711a3", "level": "note", "message": {"text": "Unused endpoint: POST /email/server/:domainId/test"}, "properties": {"repobilityId": "54989cf07797c0f6", "scanner": "scanner-primary", "fingerprint": "41f1d081f13711a3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1edb9c4da3f232ae", "level": "note", "message": {"text": "Unused endpoint: GET /email/server/:domainId/logs"}, "properties": {"repobilityId": "0c8d5e5cd245a1d1", "scanner": "scanner-primary", "fingerprint": "1edb9c4da3f232ae", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1fbc84fff0bcbc23", "level": "note", "message": {"text": "Unused endpoint: GET /email/server/:domainId/bans"}, "properties": {"repobilityId": "5a128708f41d5747", "scanner": "scanner-primary", "fingerprint": "1fbc84fff0bcbc23", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d32b8cddb0df151b", "level": "note", "message": {"text": "Unused endpoint: POST /email/server/:domainId/unban"}, "properties": {"repobilityId": "8df41b89a867b809", "scanner": "scanner-primary", "fingerprint": "d32b8cddb0df151b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9744d92bb1fd98f1", "level": "note", "message": {"text": "Unused endpoint: GET /marketplace/apps"}, "properties": {"repobilityId": "743fb3805efbbd4a", "scanner": "scanner-primary", "fingerprint": "9744d92bb1fd98f1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5d28c2d30edbc905", "level": "note", "message": {"text": "Unused endpoint: GET /marketplace/:slug"}, "properties": {"repobilityId": "b392b688baedbbfd", "scanner": "scanner-primary", "fingerprint": "5d28c2d30edbc905", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c4341e353274df50", "level": "note", "message": {"text": "Unused endpoint: POST /marketplace/install"}, "properties": {"repobilityId": "787bb492f3ab27cc", "scanner": "scanner-primary", "fingerprint": "c4341e353274df50", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8b4b15ea2b089ff8", "level": "note", "message": {"text": "Unused endpoint: POST /marketplace/install-custom"}, "properties": {"repobilityId": "1c8bde30fa636ffc", "scanner": "scanner-primary", "fingerprint": "8b4b15ea2b089ff8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7b56570f2c1fa92f", "level": "note", "message": {"text": "Unused endpoint: GET /git-providers/oauth/github/status"}, "properties": {"repobilityId": "f39ca8457867650e", "scanner": "scanner-primary", "fingerprint": "7b56570f2c1fa92f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-446c55aeb0ff9917", "level": "note", "message": {"text": "Unused endpoint: POST /git-providers/oauth/github/device/start"}, "properties": {"repobilityId": "e482c544c59b0728", "scanner": "scanner-primary", "fingerprint": "446c55aeb0ff9917", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}