{"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-b9bfbad2a09219e1", "name": "Possibly dead Python function: current_actor", "shortDescription": {"text": "Possibly dead Python function: current_actor"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0b5fd8e6980e4c44", "name": "Possibly dead Python function: default_touches", "shortDescription": {"text": "Possibly dead Python function: default_touches"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b19785fa81859eaf", "name": "Possibly dead Python function: is_commit_sha", "shortDescription": {"text": "Possibly dead Python function: is_commit_sha"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-68eda6c334e21b14", "name": "Possibly dead Python function: has_external_links", "shortDescription": {"text": "Possibly dead Python function: has_external_links"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-79654c63935992c4", "name": "Possibly dead Python function: refresh_permissions", "shortDescription": {"text": "Possibly dead Python function: refresh_permissions"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f301d8abb22ed7ce", "name": "Possibly dead Python function: list_project_stats", "shortDescription": {"text": "Possibly dead Python function: list_project_stats"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-894cdea390a7903f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/components/wg/VisualRenderer.tsx:142", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/components/wg/VisualRenderer.tsx:142"}, "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-9a8f863b753d8d68", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/components/wg/EquationBlock.tsx:63", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/components/wg/EquationBlock.tsx:63"}, "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-51b07a4787b80480", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/components/wg/MermaidBlock.tsx:87", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/components/wg/MermaidBlock.tsx:87"}, "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-c7fa9543be84e889", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/wg/Chip.tsx:30", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/wg/Chip.tsx:30"}, "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-7783c89a9b2b8a66", "name": "Docker base image is tag-pinned but not digest-pinned: ghcr.io/astral-sh/uv:0.7.21", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: ghcr.io/astral-sh/uv:0.7.21"}, "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-c36b30587c620ebd", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "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-7673561931a5dd33", "name": "Dockerfile runs as root: apps/web/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: apps/web/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-74e2e2316f173b7a", "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-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-3120fa600ec0a955", "name": "Insecure pattern 'node_child_process' in apps/web/scripts/profile-hot-routes.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/web/scripts/profile-hot-routes.mjs: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-c1ef8612f5492031", "name": "Insecure pattern 'document_write' in apps/web/components/wg/SetupCTA.tsx:41", "shortDescription": {"text": "Insecure pattern 'document_write' in apps/web/components/wg/SetupCTA.tsx:41"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8a41e420d940472c", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/components/wg/VisualRenderer.tsx:142", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/components/wg/VisualRenderer.tsx:142"}, "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-2bc6c40209e888f4", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/web/components/wg/VisualRenderer.tsx:89", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/web/components/wg/VisualRenderer.tsx:89"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4406ca4859d6cf2d", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/components/wg/EquationBlock.tsx:63", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/components/wg/EquationBlock.tsx:63"}, "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-8876d79d60737adb", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/components/wg/MermaidBlock.tsx:87", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/components/wg/MermaidBlock.tsx:87"}, "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-8fcbca589cab12a9", "name": "Insecure pattern 'local_storage_auth_token' in apps/web/components/wg/SignInForm.tsx:68", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in apps/web/components/wg/SignInForm.tsx:68"}, "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-3864451789c2badf", "name": "Insecure pattern 'node_child_process' in apps/web/e2e/_isolated-web.ts:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/web/e2e/_isolated-web.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-41761fdd3f632f50", "name": "Insecure pattern 'node_child_process' in apps/web/e2e/attention.spec.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/web/e2e/attention.spec.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4db45b37078c327e", "name": "Insecure pattern 'node_child_process' in apps/web/e2e/block-renderer-shape-audit.spec.ts:1", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/web/e2e/block-renderer-shape-audit.spec.ts:1"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ac757886d7220bc5", "name": "Possible secret in apps/web/e2e/audit-ui-fixture.ts", "shortDescription": {"text": "Possible secret in apps/web/e2e/audit-ui-fixture.ts"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-61538c71822a2a73", "name": "Insecure pattern 'node_child_process' in apps/web/e2e/projects-list-activity.spec.ts:3", "shortDescription": {"text": "Insecure pattern 'node_child_process' in apps/web/e2e/projects-list-activity.spec.ts:3"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b85d08b6c7a630f4", "name": "Insecure pattern 'node_child_process' in scripts/web-e2e-staging.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/web-e2e-staging.mjs: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-650659b67e67d368", "name": "Insecure pattern 'node_child_process' in scripts/preflight.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/preflight.mjs: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-6773536aad869680", "name": "Insecure pattern 'node_child_process' in scripts/install-preflight-hook.mjs:2", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/install-preflight-hook.mjs: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-65aa740cba4a4a73", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "github/codeql-action/analyze@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": "medium", "confidence": 1.0}}, {"id": "scanner-7efbda965f283c17", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "docker/build-push-action@v6 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": "medium", "confidence": 1.0}}, {"id": "scanner-93b5dc94140a9b18", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "docker/build-push-action@v6 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": "medium", "confidence": 1.0}}, {"id": "scanner-12522bf27bea173c", "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@v7 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-736202d683f0f9bf", "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@v7 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-6ba9bfab5f283202", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "docker/build-push-action@v6 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": "medium", "confidence": 1.0}}, {"id": "scanner-7ffa33751be3d771", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ce8c5d8d8cbae7f5", "name": "Very large file: tests/parity/test_four_surface_parity.py (14007 lines)", "shortDescription": {"text": "Very large file: tests/parity/test_four_surface_parity.py (14007 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-e3e390930a5f3125", "name": "Very large file: apps/api/src/werkgraph_api/mcp.py (6564 lines)", "shortDescription": {"text": "Very large file: apps/api/src/werkgraph_api/mcp.py (6564 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-163c1fef07063249", "name": "Very large file: apps/api/src/werkgraph_api/models/db.py (1593 lines)", "shortDescription": {"text": "Very large file: apps/api/src/werkgraph_api/models/db.py (1593 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-f9d5a18b34af2733", "name": "Very large file: apps/api/src/werkgraph_api/services/workflows.py (2691 lines)", "shortDescription": {"text": "Very large file: apps/api/src/werkgraph_api/services/workflows.py (2691 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-f5b15dc54c819f1d", "name": "Very large file: apps/api/src/werkgraph_api/services/tools.py (2155 lines)", "shortDescription": {"text": "Very large file: apps/api/src/werkgraph_api/services/tools.py (2155 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-0f95e5b6c7d2838c", "name": "Very large file: apps/api/src/werkgraph_api/services/artifacts.py (1737 lines)", "shortDescription": {"text": "Very large file: apps/api/src/werkgraph_api/services/artifacts.py (1737 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-e440797ebe3b63d2", "name": "Very large file: apps/cli/tests/test_main.py (3365 lines)", "shortDescription": {"text": "Very large file: apps/cli/tests/test_main.py (3365 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-6ec5fbd079c5f370", "name": "Very large file: apps/web/app/lib/wg-substrate-types.d.ts (13491 lines)", "shortDescription": {"text": "Very large file: apps/web/app/lib/wg-substrate-types.d.ts (13491 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-2e583e1601e93fca", "name": "Very large file: apps/web/app/lib/job-detail.ts (2131 lines)", "shortDescription": {"text": "Very large file: apps/web/app/lib/job-detail.ts (2131 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-4a9eb7dc7c6e3880", "name": "Node manifest has dependencies but no lockfile: apps/web/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/web/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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 75 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 27 placeholder/mock markers across 9 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-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-fab2670cb2bc8140", "name": "Legacy-named symbol `template_deprecated` in tests/parity/test_four_surface_parity.py:7958", "shortDescription": {"text": "Legacy-named symbol `template_deprecated` in tests/parity/test_four_surface_parity.py:7958"}, "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-9e34dd7ade6ac44a", "name": "Legacy-named symbol `job_contract_v1` in tests/parity/test_audit_create_job_parity.py:26", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in tests/parity/test_audit_create_job_parity.py:26"}, "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-38f1a90025740f92", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_submit_cross_link_regression.py:6", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_submit_cross_link_regression.py:6"}, "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-ac2eb835558a868d", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_workflow_template_versioning.py:17", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_workflow_template_versioning.py:17"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8cdc58f58061d97b", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_job_add_screenshot_dod_mcp.py:11", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_job_add_screenshot_dod_mcp.py:11"}, "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-78378b490a8e40ea", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_submit_job_done.py:26", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_submit_job_done.py:26"}, "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-cbee0cc4475d7976", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_bulk_workflow_service.py:32", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_bulk_workflow_service.py:32"}, "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-3daa4a1cd213d076", "name": "Legacy-named symbol `model_copy` in apps/api/tests/test_workflows.py:426", "shortDescription": {"text": "Legacy-named symbol `model_copy` in apps/api/tests/test_workflows.py:426"}, "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-98d0f780dab52eda", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_cross_link_broader.py:16", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_cross_link_broader.py:16"}, "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-0999f2e829ad0231", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_models_bulk.py:6", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_models_bulk.py:6"}, "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-f95bdee5a01c4aae", "name": "Commented-code block (5 lines) in apps/api/tests/test_agent_attribution.py:35", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/tests/test_agent_attribution.py:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7cf614b984a9dbfb", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/_bulk_workflow_test_support.py:25", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/_bulk_workflow_test_support.py:25"}, "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-7674739b98450ec2", "name": "Legacy-named symbol `test_supersede_learning_creates_replacement_and_deactivates_old` in apps/api/tests/test_supersede_l", "shortDescription": {"text": "Legacy-named symbol `test_supersede_learning_creates_replacement_and_deactivates_old` in apps/api/tests/test_supersede_learning.py:56"}, "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-f76ad20d565354b8", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_bulk_cross_link_broader.py:27", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_bulk_cross_link_broader.py:27"}, "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-0d0a56820f9802c1", "name": "Legacy-named symbol `model_copy` in apps/api/tests/test_projects.py:343", "shortDescription": {"text": "Legacy-named symbol `model_copy` in apps/api/tests/test_projects.py:343"}, "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-5db42f7558caf6ea", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_cap10_edges.py:31", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_cap10_edges.py:31"}, "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-1ffdb5550e1a2b77", "name": "Legacy-named symbol `test_supersede_decision_sets_replacement_pointer_and_deactivates_old` in apps/api/tests/test_supers", "shortDescription": {"text": "Legacy-named symbol `test_supersede_decision_sets_replacement_pointer_and_deactivates_old` in apps/api/tests/test_supersede_decision.py:26"}, "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-52c7340bf9a48df9", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_cross_link_references.py:19", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_cross_link_references.py:19"}, "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-649a853836e2a60c", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_mcp_cross_link_errors.py:8", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_mcp_cross_link_errors.py:8"}, "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-6053582cfdc40cd8", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_canonical_hash.py:3", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_canonical_hash.py:3"}, "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-fcff72392568afe1", "name": "Legacy-named symbol `too_old` in apps/api/tests/test_artifact_time_travel.py:187", "shortDescription": {"text": "Legacy-named symbol `too_old` in apps/api/tests/test_artifact_time_travel.py:187"}, "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-76fb258fe823ac93", "name": "Legacy-named symbol `model_copy` in apps/api/tests/test_reusable_workflows_static.py:131", "shortDescription": {"text": "Legacy-named symbol `model_copy` in apps/api/tests/test_reusable_workflows_static.py:131"}, "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-f1e4125b5f3a4592", "name": "Legacy-named symbol `test_artifact_supersede_atomic_creates_replacement_and_deactivates_old` in apps/api/tests/test_arti", "shortDescription": {"text": "Legacy-named symbol `test_artifact_supersede_atomic_creates_replacement_and_deactivates_old` in apps/api/tests/test_artifacts.py:659"}, "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-f7aa333aeec75916", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_job_revision.py:11", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_job_revision.py:11"}, "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-19a69c2e7fe1e6eb", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_job_signals.py:8", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_job_signals.py:8"}, "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-7a918779e1a369a5", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_subject_tags_foundation.py:5", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_subject_tags_foundation.py:5"}, "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-c9e23428e8c1e186", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/_submit_job_test_support.py:26", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/_submit_job_test_support.py:26"}, "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-f9a39bcb09ef27ee", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_mcp_list_coercion.py:24", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_mcp_list_coercion.py:24"}, "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-7863dcca43d39188", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/_jobs_test_support.py:20", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/_jobs_test_support.py:20"}, "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-a955089c79766feb", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_cap10_foundation.py:18", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_cap10_foundation.py:18"}, "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-610c26be84fa1ca1", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_jobs.py:20", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_jobs.py:20"}, "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-2fc52ca799b0cc9d", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_clone_workflow_v2.py:17", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_clone_workflow_v2.py:17"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c41cdba02be18296", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/_workflow_template_deprecation_support.py:18", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/_workflow_template_deprecation_support.py:18"}, "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-857aeea000ebb0a2", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_unicode_roundtrip.py:9", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_unicode_roundtrip.py:9"}, "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-e73a6bcfd122b910", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_context_pack.py:15", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_context_pack.py:15"}, "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-5d5f334a3e3583cc", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_jobs_assignee.py:12", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_jobs_assignee.py:12"}, "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-e96df59943344aa5", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_job_contract_touches.py:18", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_job_contract_touches.py:18"}, "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-293dd1e4ee4b6c70", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_mcp_list_jobs.py:14", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_mcp_list_jobs.py:14"}, "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-6f7f917649a42f92", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_schema_export.py:9", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_schema_export.py:9"}, "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-bd8276551a55d2a7", "name": "Legacy-named symbol `set_template_deprecated` in apps/api/tests/test_clone_against_deprecated.py:8", "shortDescription": {"text": "Legacy-named symbol `set_template_deprecated` in apps/api/tests/test_clone_against_deprecated.py:8"}, "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-031c2a3224151f1a", "name": "Commented-code block (5 lines) in apps/api/tests/test_etag_conditional_get.py:156", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/tests/test_etag_conditional_get.py: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-971556553860dafb", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_bulk_cross_link_references.py:25", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_bulk_cross_link_references.py:25"}, "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-e84cb3715cf9e078", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_parity.py:20", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_parity.py:20"}, "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-a44ca2e75ff08106", "name": "Legacy-named symbol `_learning_drafts_v1` in apps/api/tests/test_survey.py:17", "shortDescription": {"text": "Legacy-named symbol `_learning_drafts_v1` in apps/api/tests/test_survey.py:17"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-98ff604cb3a4ec76", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_related_work.py:10", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_related_work.py:10"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-69f34f9d07832e14", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_workflow_template_visibility.py:16", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_workflow_template_visibility.py:16"}, "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-6de1b7048b08c787", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/integration/test_cross_links_decision_warning.py:18", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/integration/test_cross_links_decision_warning.py:18"}, "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-17c3b935e36f177b", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/services/test_subject_tag_dx.py:13", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/services/test_subject_tag_dx.py:13"}, "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-6c0cc7d7d91056ed", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/services/test_create_job_multi_error.py:11", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/services/test_create_job_multi_error.py:11"}, "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-815d994d90b6ebd0", "name": "Legacy-named symbol `job_contract_v1` in apps/api/tests/services/test_describe_operation_create_job.py:21", "shortDescription": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/services/test_describe_operation_create_job.py:21"}, "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-69cb19b0d4da12df", "name": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 apps/api/alembic/versions/0001_initial.py:16", "shortDescription": {"text": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 apps/api/alembic/versions/0001_initial.py:16"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fd374e7c22c3c9a7", "name": "Legacy-named symbol `0043_clone_workflow_v2` in apps/api/alembic/versions/0044_workflow_template_versioning.py:4", "shortDescription": {"text": "Legacy-named symbol `0043_clone_workflow_v2` in apps/api/alembic/versions/0044_workflow_template_versioning.py:4"}, "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-472f0943da32898b", "name": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 apps/api/alembic/versions/0037_project_read_permission_catchu", "shortDescription": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 apps/api/alembic/versions/0037_project_read_permission_catchup.py:40"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2be2b748b657d340", "name": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 apps/api/alembic/versions/0030_project_read_backfill.py:34", "shortDescription": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 apps/api/alembic/versions/0030_project_read_backfill.py:34"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dc549c8804d03c10", "name": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 apps/api/alembic/versions/0053_submission_record_cost.py:24", "shortDescription": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 apps/api/alembic/versions/0053_submission_record_cost.py:24"}, "fullDescription": {"text": "Likely an AI scaffold that was never filled in. Remove or implement."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3cb0f43e8d2d854a", "name": "Legacy-named symbol `0043_clone_workflow_v2` in apps/api/alembic/versions/0043_clone_workflow_v2.py:3", "shortDescription": {"text": "Legacy-named symbol `0043_clone_workflow_v2` in apps/api/alembic/versions/0043_clone_workflow_v2.py:3"}, "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-0d9f4c8b2f69af9a", "name": "Legacy-named symbol `is_deprecated_v1` in apps/api/src/werkgraph_api/models/jobs.py:490", "shortDescription": {"text": "Legacy-named symbol `is_deprecated_v1` in apps/api/src/werkgraph_api/models/jobs.py:490"}, "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-2654de3179522ce9", "name": "Legacy-named symbol `is_deprecated_v1` in apps/api/src/werkgraph_api/routes/jobs.py:180", "shortDescription": {"text": "Legacy-named symbol `is_deprecated_v1` in apps/api/src/werkgraph_api/routes/jobs.py:180"}, "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-56ea1aae750ac044", "name": "Legacy-named symbol `template_deprecated` in apps/api/src/werkgraph_api/services/workflows.py:1646", "shortDescription": {"text": "Legacy-named symbol `template_deprecated` in apps/api/src/werkgraph_api/services/workflows.py:1646"}, "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-1fd942cbf3b9d64c", "name": "Legacy-named symbol `validate_job_contract_if_v1` in apps/api/src/werkgraph_api/services/_contract_validator.py:11", "shortDescription": {"text": "Legacy-named symbol `validate_job_contract_if_v1` in apps/api/src/werkgraph_api/services/_contract_validator.py:11"}, "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-41da789c7236a780", "name": "Legacy-named symbol `validate_job_contract_if_v1` in apps/api/src/werkgraph_api/services/_job_contracts.py:169", "shortDescription": {"text": "Legacy-named symbol `validate_job_contract_if_v1` in apps/api/src/werkgraph_api/services/_job_contracts.py:169"}, "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-8dc5587d0c3737e9", "name": "Legacy-named symbol `model_copy` in apps/api/src/werkgraph_api/services/tools.py:1254", "shortDescription": {"text": "Legacy-named symbol `model_copy` in apps/api/src/werkgraph_api/services/tools.py:1254"}, "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-5b3e55b684e1279a", "name": "Legacy-named symbol `deprecated_v1` in apps/api/src/werkgraph_api/services/survey.py:58", "shortDescription": {"text": "Legacy-named symbol `deprecated_v1` in apps/api/src/werkgraph_api/services/survey.py:58"}, "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-153eedfa4b0e44b5", "name": "Legacy-named symbol `model_copy` in apps/api/src/werkgraph_api/services/bulk.py:169", "shortDescription": {"text": "Legacy-named symbol `model_copy` in apps/api/src/werkgraph_api/services/bulk.py:169"}, "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-4ce21f2653b30a5b", "name": "Legacy-named symbol `model_copy` in apps/api/src/werkgraph_api/services/artifacts.py:523", "shortDescription": {"text": "Legacy-named symbol `model_copy` in apps/api/src/werkgraph_api/services/artifacts.py:523"}, "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-ca375dd0d45646ae", "name": "Legacy-named symbol `model_copy` in apps/api/src/werkgraph_api/services/_response_cache.py:73", "shortDescription": {"text": "Legacy-named symbol `model_copy` in apps/api/src/werkgraph_api/services/_response_cache.py:73"}, "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-010f3d103b59fba9", "name": "Legacy-named symbol `model_copy` in apps/api/src/werkgraph_api/services/bulk_workflow.py:285", "shortDescription": {"text": "Legacy-named symbol `model_copy` in apps/api/src/werkgraph_api/services/bulk_workflow.py:285"}, "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-7b7caedad3f50fd1", "name": "Legacy-named symbol `model_copy` in apps/api/src/werkgraph_api/services/bulk_job.py:541", "shortDescription": {"text": "Legacy-named symbol `model_copy` in apps/api/src/werkgraph_api/services/bulk_job.py:541"}, "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-75d2e3ab5b07264d", "name": "Commented-code block (8 lines) in apps/api/src/werkgraph_api/services/admin_sweep.py:24", "shortDescription": {"text": "Commented-code block (8 lines) in apps/api/src/werkgraph_api/services/admin_sweep.py:24"}, "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-13f08d17f1b70e61", "name": "Legacy-named symbol `wg_old` in apps/cli/tests/test_main.py:541", "shortDescription": {"text": "Legacy-named symbol `wg_old` in apps/cli/tests/test_main.py:541"}, "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-3f6ffee9457a7410", "name": "Network/subprocess call without timeout or try/except \u2014 apps/cli/src/werkgraph_cli/_config.py:107", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 apps/cli/src/werkgraph_cli/_config.py:107"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1d7a3a733380b2cd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/components/wg/JobActivityTabs.tsx:49", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/components/wg/JobActivityTabs.tsx:49"}, "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-b5208b0e81321381", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/components/wg/DecisionsTabList.tsx:346", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/components/wg/DecisionsTabList.tsx:346"}, "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-3550586255af2ff2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/components/wg/LearningsTabList.tsx:281", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/components/wg/LearningsTabList.tsx:281"}, "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-8c16b38c0cbaf5c5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/components/wg/ProjectOverviewRealtimeScope.tsx:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/components/wg/ProjectOverviewRealtimeScope.tsx:16"}, "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-2fd90d87b9e6d040", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/components/wg/ProjectsList.tsx:46", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/components/wg/ProjectsList.tsx:46"}, "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-a62249678647cafd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/whoami/page.tsx:23", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/whoami/page.tsx:23"}, "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-96e3095c95b87495", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/events/route.ts:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/events/route.ts:27"}, "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-0137430a959ad732", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/api/setup/route.ts:85", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/api/setup/route.ts:85"}, "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-dafaf1c06b0a2d03", "name": "Commented-code block (5 lines) in apps/web/app/lib/job-detail.ts:167", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/app/lib/job-detail.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-4af8ae63e1ce1993", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/lib/setup-status.ts:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/lib/setup-status.ts:16"}, "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-2b05c067105caf98", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/api-keys/page.tsx:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/api-keys/page.tsx:39"}, "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-d6b2f1d94ccaab73", "name": "Commented-code block (9 lines) in apps/web/e2e/copy-feedback.spec.ts:217", "shortDescription": {"text": "Commented-code block (9 lines) in apps/web/e2e/copy-feedback.spec.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-eba6d331091f6871", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/tool_registry_launch_gate.py:229", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/tool_registry_launch_gate.py:229"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-33a74c444a0e130c", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/bootstrap-staging-keys.py:137", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/bootstrap-staging-keys.py:137"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cc10449e1a1516e3", "name": "Network/subprocess call without timeout or try/except \u2014 .github/scripts/vocabulary_scan.py:191", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 .github/scripts/vocabulary_scan.py:191"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-597231399356737a", "name": "43 env vars used in code but missing from .env.example", "shortDescription": {"text": "43 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AQ2_187_EVIDENCE_DIR`, `CI`, `NEXT_PUBLIC_PLAYWRIGHT`, `NEXT_PUBLIC_WG_REALTIME_ENABLED`, `NODE_ENV`, `PLAYWRIGHT`, `PLAYWRIGHT_USE_DOCKER`, `RUN_RETRY_SMOKE` + 35 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-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\napps/api/scripts/move_urgent_jobs.py:main, apps/api/scripts/refresh_inline_contracts.py:main, apps/api/scripts/cascade_existing_orphans.py:main\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\napps/api/alembic/versions/0001_initial.py:downgrade, apps/api/alembic/versions/0037_project_read_permission_catchup.py:downgrade, apps/api/alembic/versions/0030_project_read_backfill.py:downgrade, apps/api/alembic/versions/0053_submission_record_cost.py:downgrade\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\napps/api/alembic/versions/0039_global_skill_scope.py:upgrade, apps/api/alembic/versions/0039_global_skill_scope.py:downgrade\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\napps/api/alembic/versions/0028_audit_log_notify_trigger.py:upgrade, apps/api/alembic/versions/0049_actor_api_key_realtime_scope.py:upgrade, apps/api/alembic/versions/0049_actor_api_key_realtime_scope.py:downgrade, apps/api/alembic/versions/0031_realtime_job_id_notify_payload.py:upgrade\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-380b7cb95b387b9c", "name": "Near-duplicate function bodies in 11 places", "shortDescription": {"text": "Near-duplicate function bodies in 11 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\napps/api/src/werkgraph_api/models/components.py:created_at_must_be_utc, apps/api/src/werkgraph_api/models/skills.py:created_at_must_be_utc, apps/api/src/werkgraph_api/models/visuals.py:created_at_must_be_utc, apps/api/src/werkgraph_api/models/tools.py:created_at_must_be_utc\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c06785ac23e60b49", "name": "FastAPI POST `create_project` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/projects.py:70", "shortDescription": {"text": "FastAPI POST `create_project` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/projects.py:70"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-50635faae1d21cea", "name": "FastAPI PATCH `update_project` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/projects.py:165", "shortDescription": {"text": "FastAPI PATCH `update_project` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/projects.py:165"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b72b88eeb059c0b", "name": "FastAPI POST `archive_project` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/projects.py:178", "shortDescription": {"text": "FastAPI POST `archive_project` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/projects.py:178"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cf09b62ff635be67", "name": "FastAPI POST `create_objective` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/objectives.py:49", "shortDescription": {"text": "FastAPI POST `create_objective` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/objectives.py:49"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-53f291e69b98c7a9", "name": "FastAPI PATCH `update_objective` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/objectives.py:100", "shortDescription": {"text": "FastAPI PATCH `update_objective` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/objectives.py:100"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b47d3b7be8d319ca", "name": "FastAPI POST `create_component` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/components.py:52", "shortDescription": {"text": "FastAPI POST `create_component` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/components.py:52"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-393c689578886810", "name": "FastAPI PATCH `update_component` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/components.py:111", "shortDescription": {"text": "FastAPI PATCH `update_component` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/components.py:111"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7ff9e2d5aaa15550", "name": "FastAPI POST `create_skill` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/skills.py:52", "shortDescription": {"text": "FastAPI POST `create_skill` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/skills.py:52"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0d02c78232c416d3", "name": "FastAPI POST `supersede_skill` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/skills.py:64", "shortDescription": {"text": "FastAPI POST `supersede_skill` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/skills.py:64"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6c438b59402f93a3", "name": "FastAPI POST `deactivate_skill` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/skills.py:82", "shortDescription": {"text": "FastAPI POST `deactivate_skill` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/skills.py:82"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ba7d0bec84c32341", "name": "FastAPI PATCH `update_skill` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/skills.py:156", "shortDescription": {"text": "FastAPI PATCH `update_skill` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/skills.py:156"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-121a94741a705d92", "name": "FastAPI DELETE `revoke_api_key` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/api_keys.py:58", "shortDescription": {"text": "FastAPI DELETE `revoke_api_key` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/api_keys.py:58"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9079b062c11aaba6", "name": "FastAPI POST `create_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:118", "shortDescription": {"text": "FastAPI POST `create_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:118"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-764567f1be0ea3f2", "name": "FastAPI POST `supersede_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:173", "shortDescription": {"text": "FastAPI POST `supersede_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:173"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6d4c8ba98e33bcd5", "name": "FastAPI POST `archive_template` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:240", "shortDescription": {"text": "FastAPI POST `archive_template` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:240"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fbfa82177f0a216d", "name": "FastAPI POST `unarchive_template` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:255", "shortDescription": {"text": "FastAPI POST `unarchive_template` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:255"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-44c792bc8f078984", "name": "FastAPI POST `deprecate_workflow_template` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:305", "shortDescription": {"text": "FastAPI POST `deprecate_workflow_template` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:305"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-212fa4d732be2155", "name": "FastAPI POST `set_workflow_template_visibility` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py", "shortDescription": {"text": "FastAPI POST `set_workflow_template_visibility` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:320"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2a195c5b864397f3", "name": "FastAPI POST `supersede_workflow_template` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:340", "shortDescription": {"text": "FastAPI POST `supersede_workflow_template` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:340"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-08dbeb818165c415", "name": "FastAPI PATCH `update_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:400", "shortDescription": {"text": "FastAPI PATCH `update_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:400"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4d1b517e2cc7d5c4", "name": "FastAPI POST `clone_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:417", "shortDescription": {"text": "FastAPI POST `clone_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:417"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-15e3603ff3b2a350", "name": "FastAPI POST `archive_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:452", "shortDescription": {"text": "FastAPI POST `archive_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:452"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0fc83c930e5c6de6", "name": "FastAPI POST `close_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:464", "shortDescription": {"text": "FastAPI POST `close_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:464"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a7e3b21063758f72", "name": "FastAPI POST `unarchive_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:476", "shortDescription": {"text": "FastAPI POST `unarchive_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:476"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4f268f1c00298d89", "name": "FastAPI POST `create_visual` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/visuals.py:45", "shortDescription": {"text": "FastAPI POST `create_visual` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/visuals.py:45"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-35b09271836fbfa8", "name": "FastAPI PATCH `update_visual` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/visuals.py:96", "shortDescription": {"text": "FastAPI PATCH `update_visual` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/visuals.py:96"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-79358a08b435c4f2", "name": "FastAPI PATCH `update_tool` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:129", "shortDescription": {"text": "FastAPI PATCH `update_tool` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:129"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b8bcfaf38c1630af", "name": "FastAPI POST `reconcile_tool_methods` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:147", "shortDescription": {"text": "FastAPI POST `reconcile_tool_methods` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:147"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a8ed9043d546e7de", "name": "FastAPI POST `attach_tool_globally` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:168", "shortDescription": {"text": "FastAPI POST `attach_tool_globally` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:168"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0c66dfe9714d35bf", "name": "FastAPI POST `attach_tool_to_project` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:193", "shortDescription": {"text": "FastAPI POST `attach_tool_to_project` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:193"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7d37d3a237eb3c95", "name": "FastAPI POST `attach_tool_to_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:218", "shortDescription": {"text": "FastAPI POST `attach_tool_to_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:218"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0c6b695cef82f254", "name": "FastAPI DELETE `detach_tool` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:243", "shortDescription": {"text": "FastAPI DELETE `detach_tool` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:243"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ad6982b3a126b7ab", "name": "FastAPI POST `archive_tool` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:264", "shortDescription": {"text": "FastAPI POST `archive_tool` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:264"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9c4bbf76c3c8c172", "name": "FastAPI POST `unarchive_tool` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:276", "shortDescription": {"text": "FastAPI POST `unarchive_tool` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:276"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e9b58d70d361338", "name": "FastAPI POST `deactivate_tool` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:288", "shortDescription": {"text": "FastAPI POST `deactivate_tool` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:288"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c246f648744bd730", "name": "FastAPI POST `attach_subject_tags` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/subject_tags.py:74", "shortDescription": {"text": "FastAPI POST `attach_subject_tags` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/subject_tags.py:74"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d7ce3f525b3eac0", "name": "FastAPI POST `detach_subject_tags` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/subject_tags.py:86", "shortDescription": {"text": "FastAPI POST `detach_subject_tags` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/subject_tags.py:86"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-afb349793938ae01", "name": "FastAPI POST `deactivate_fixture_pollution` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/admin.py:53", "shortDescription": {"text": "FastAPI POST `deactivate_fixture_pollution` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/admin.py:53"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac08bb14d29bf595", "name": "FastAPI POST `admin_deactivate_actor` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/admin.py:72", "shortDescription": {"text": "FastAPI POST `admin_deactivate_actor` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/admin.py:72"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a47368978187b1b", "name": "FastAPI POST `admin_revoke_api_key` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/admin.py:91", "shortDescription": {"text": "FastAPI POST `admin_revoke_api_key` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/admin.py:91"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bae9926d80a605fc", "name": "FastAPI POST `admin_deactivate_decision` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/admin.py:110", "shortDescription": {"text": "FastAPI POST `admin_deactivate_decision` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/admin.py:110"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1b53159f270ce303", "name": "FastAPI POST `admin_deactivate_learning` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/admin.py:129", "shortDescription": {"text": "FastAPI POST `admin_deactivate_learning` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/admin.py:129"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5e570723cc7509fb", "name": "FastAPI POST `bulk_provision_project` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/bulk.py:60", "shortDescription": {"text": "FastAPI POST `bulk_provision_project` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/bulk.py:60"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7dced11796682120", "name": "FastAPI POST `bulk_provision_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/bulk.py:79", "shortDescription": {"text": "FastAPI POST `bulk_provision_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/bulk.py:79"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3cc8a3a59ac0bfe7", "name": "FastAPI POST `bulk_provision_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/bulk.py:98", "shortDescription": {"text": "FastAPI POST `bulk_provision_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/bulk.py:98"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-15de41c1119631d7", "name": "FastAPI POST `bulk_provision_decision` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/bulk.py:117", "shortDescription": {"text": "FastAPI POST `bulk_provision_decision` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/bulk.py:117"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3e8a674a7589b834", "name": "FastAPI POST `bulk_provision_learning` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/bulk.py:136", "shortDescription": {"text": "FastAPI POST `bulk_provision_learning` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/bulk.py:136"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-54fceea41e1bf3bf", "name": "FastAPI POST `bulk_archive_workflow_artifacts` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/bulk.py:155", "shortDescription": {"text": "FastAPI POST `bulk_archive_workflow_artifacts` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/bulk.py:155"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-66010d934c09573e", "name": "FastAPI POST `create_artifact` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/artifacts.py:96", "shortDescription": {"text": "FastAPI POST `create_artifact` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/artifacts.py:96"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-519294318b30fbde", "name": "FastAPI PATCH `update_artifact` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/artifacts.py:251", "shortDescription": {"text": "FastAPI PATCH `update_artifact` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/artifacts.py:251"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b00df51d9015083a", "name": "FastAPI POST `edit_artifact_blocks` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/artifacts.py:269", "shortDescription": {"text": "FastAPI POST `edit_artifact_blocks` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/artifacts.py:269"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3abbc488ca1d3ac9", "name": "FastAPI POST `archive_artifact` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/artifacts.py:287", "shortDescription": {"text": "FastAPI POST `archive_artifact` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/artifacts.py:287"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8474f285b5bb61cb", "name": "FastAPI POST `supersede_artifact` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/artifacts.py:305", "shortDescription": {"text": "FastAPI POST `supersede_artifact` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/artifacts.py:305"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6b05613724b0b3e6", "name": "FastAPI POST `create_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:110", "shortDescription": {"text": "FastAPI POST `create_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:110"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7cf98fbb5e5ac26a", "name": "FastAPI POST `claim_next_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:122", "shortDescription": {"text": "FastAPI POST `claim_next_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:122"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-64b8b940152fd0dc", "name": "FastAPI POST `claim_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:139", "shortDescription": {"text": "FastAPI POST `claim_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:139"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c9976623e619e724", "name": "FastAPI POST `renew_claim` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:152", "shortDescription": {"text": "FastAPI POST `renew_claim` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:152"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-10722730d02ee651", "name": "FastAPI POST `submit_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:165", "shortDescription": {"text": "FastAPI POST `submit_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:165"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-07cbcc9a46e26220", "name": "FastAPI POST `review_complete` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:187", "shortDescription": {"text": "FastAPI POST `review_complete` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:187"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ffd93d9a18013a1a", "name": "FastAPI POST `comment_on_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:205", "shortDescription": {"text": "FastAPI POST `comment_on_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:205"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-29029ae178ae6fed", "name": "FastAPI POST `cancel_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:289", "shortDescription": {"text": "FastAPI POST `cancel_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:289"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dc86ca0b9f074f6f", "name": "FastAPI POST `release_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:302", "shortDescription": {"text": "FastAPI POST `release_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:302"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2b8cd8c9f363d8bf", "name": "FastAPI POST `reset_claim` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:314", "shortDescription": {"text": "FastAPI POST `reset_claim` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:314"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2eb87680c2bf7bee", "name": "FastAPI POST `heartbeat_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:332", "shortDescription": {"text": "FastAPI POST `heartbeat_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:332"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26486d710bca9f04", "name": "FastAPI POST `move_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:454", "shortDescription": {"text": "FastAPI POST `move_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:454"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cdcf2b222d82592a", "name": "FastAPI PATCH `update_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:467", "shortDescription": {"text": "FastAPI PATCH `update_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:467"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-71d82594169ac568", "name": "FastAPI POST `add_screenshot_dod` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:480", "shortDescription": {"text": "FastAPI POST `add_screenshot_dod` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:480"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-10966d3cc3b85f6f", "name": "FastAPI POST `attach_label` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/labels.py:53", "shortDescription": {"text": "FastAPI POST `attach_label` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/labels.py:53"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ff210ba41d93ad03", "name": "FastAPI DELETE `detach_label` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/labels.py:66", "shortDescription": {"text": "FastAPI DELETE `detach_label` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/labels.py:66"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5426322d0a6186af", "name": "FastAPI POST `create_actor` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/actors.py:70", "shortDescription": {"text": "FastAPI POST `create_actor` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/actors.py:70"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9534b6788c756392", "name": "FastAPI DELETE `deactivate_actor` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/actors.py:82", "shortDescription": {"text": "FastAPI DELETE `deactivate_actor` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/actors.py:82"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1a7f26289fb51713", "name": "FastAPI POST `link_jobs` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/edges.py:60", "shortDescription": {"text": "FastAPI POST `link_jobs` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/edges.py:60"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-545376c7815f6e0e", "name": "FastAPI DELETE `unlink_jobs` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/edges.py:72", "shortDescription": {"text": "FastAPI DELETE `unlink_jobs` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/edges.py:72"}, "fullDescription": {"text": "`@router.delete` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-518200c8385338b1", "name": "FastAPI POST `create_decision` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/decisions.py:50", "shortDescription": {"text": "FastAPI POST `create_decision` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/decisions.py:50"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ec22576db2f3f79a", "name": "FastAPI POST `supersede_decision` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/decisions.py:171", "shortDescription": {"text": "FastAPI POST `supersede_decision` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/decisions.py:171"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a21fe1938e930ff7", "name": "FastAPI POST `create_document` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/documents.py:61", "shortDescription": {"text": "FastAPI POST `create_document` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/documents.py:61"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3db1d7d06853b7a0", "name": "FastAPI PATCH `update_document` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/documents.py:114", "shortDescription": {"text": "FastAPI PATCH `update_document` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/documents.py:114"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b324e0118dd27ab8", "name": "FastAPI POST `archive_document` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/documents.py:132", "shortDescription": {"text": "FastAPI POST `archive_document` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/documents.py:132"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0fc4a60f1b029c55", "name": "FastAPI POST `create_document_blob` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/documents.py:144", "shortDescription": {"text": "FastAPI POST `create_document_blob` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/documents.py:144"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-32d5dd60fae490fb", "name": "FastAPI POST `poll_local_bridge_session` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tool_bridge.py:35", "shortDescription": {"text": "FastAPI POST `poll_local_bridge_session` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tool_bridge.py:35"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bbe4cefe20aa96bd", "name": "FastAPI POST `complete_local_bridge_call` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tool_bridge.py:53", "shortDescription": {"text": "FastAPI POST `complete_local_bridge_call` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tool_bridge.py:53"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ef9727e85ce162ad", "name": "FastAPI POST `submit_learning` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/learnings.py:53", "shortDescription": {"text": "FastAPI POST `submit_learning` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/learnings.py:53"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6dd2a186f37ed95a", "name": "FastAPI PATCH `edit_learning` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/learnings.py:174", "shortDescription": {"text": "FastAPI PATCH `edit_learning` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/learnings.py:174"}, "fullDescription": {"text": "`@router.patch` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9be2450bfa8d0490", "name": "FastAPI POST `supersede_learning` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/learnings.py:192", "shortDescription": {"text": "FastAPI POST `supersede_learning` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/learnings.py:192"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0ba354051177675f", "name": "FastAPI POST `request_approval` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/approvals.py:45", "shortDescription": {"text": "FastAPI POST `request_approval` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/approvals.py:45"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-acf0b4f1835862b2", "name": "FastAPI POST `decide_approval` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/approvals.py:57", "shortDescription": {"text": "FastAPI POST `decide_approval` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/approvals.py:57"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a927643389002360", "name": "Dangling fetch: GET /api/artifacts?${params.toString()} (apps/web/components/wg/ArtifactsPanelClient.tsx:152)", "shortDescription": {"text": "Dangling fetch: GET /api/artifacts?${params.toString()} (apps/web/components/wg/ArtifactsPanelClient.tsx:152)"}, "fullDescription": {"text": "`apps/web/components/wg/ArtifactsPanelClient.tsx:152` calls `GET /api/artifacts?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/artifacts`\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-70f9efd04f3154f0", "name": "Dangling fetch: GET /api/realtime/revalidate (apps/web/components/wg/ProjectOverviewRealtimeScope.tsx:16)", "shortDescription": {"text": "Dangling fetch: GET /api/realtime/revalidate (apps/web/components/wg/ProjectOverviewRealtimeScope.tsx:16)"}, "fullDescription": {"text": "`apps/web/components/wg/ProjectOverviewRealtimeScope.tsx:16` calls `GET /api/realtime/revalidate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/realtime/revalidate`\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-f9de915fbe945524", "name": "Dangling fetch: GET /api/realtime/revalidate (apps/web/components/wg/ProjectsList.tsx:46)", "shortDescription": {"text": "Dangling fetch: GET /api/realtime/revalidate (apps/web/components/wg/ProjectsList.tsx:46)"}, "fullDescription": {"text": "`apps/web/components/wg/ProjectsList.tsx:46` calls `GET /api/realtime/revalidate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/realtime/revalidate`\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-e44585958f55b5da", "name": "Unused endpoint: GET /response-cache/stats", "shortDescription": {"text": "Unused endpoint: GET /response-cache/stats"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/app.py` declares `GET /response-cache/stats` 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-58666816ba500374", "name": "Unused endpoint: POST /projects", "shortDescription": {"text": "Unused endpoint: POST /projects"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/projects.py` declares `POST /projects` 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-c1e1ee09590b0a49", "name": "Unused endpoint: GET /projects", "shortDescription": {"text": "Unused endpoint: GET /projects"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/projects.py` declares `GET /projects` 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-69d20e2a10139a82", "name": "Unused endpoint: GET /projects/stats", "shortDescription": {"text": "Unused endpoint: GET /projects/stats"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/projects.py` declares `GET /projects/stats` 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-8d648a3c553b4f50", "name": "Unused endpoint: GET /projects/{project_id}/graph", "shortDescription": {"text": "Unused endpoint: GET /projects/{project_id}/graph"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/projects.py` declares `GET /projects/{project_id}/graph` 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-8276e9a42f5cb13a", "name": "Unused endpoint: GET /projects/{project_id}", "shortDescription": {"text": "Unused endpoint: GET /projects/{project_id}"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/projects.py` declares `GET /projects/{project_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-d1293cf39e94c35a", "name": "Unused endpoint: PATCH /projects/{project_id}", "shortDescription": {"text": "Unused endpoint: PATCH /projects/{project_id}"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/projects.py` declares `PATCH /projects/{project_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-6bd55c71c9fe5cc7", "name": "Unused endpoint: POST /projects/{project_id}/archive", "shortDescription": {"text": "Unused endpoint: POST /projects/{project_id}/archive"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/projects.py` declares `POST /projects/{project_id}/archive` 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-3be912c6187ea599", "name": "Unused endpoint: GET /runs", "shortDescription": {"text": "Unused endpoint: GET /runs"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/runs.py` declares `GET /runs` 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-55f8c8cf959a5664", "name": "Unused endpoint: GET /runs/{run_id}", "shortDescription": {"text": "Unused endpoint: GET /runs/{run_id}"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/runs.py` declares `GET /runs/{run_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-bc6f0bf7364b320b", "name": "Unused endpoint: POST /objectives", "shortDescription": {"text": "Unused endpoint: POST /objectives"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/objectives.py` declares `POST /objectives` 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-8b9c61a1acf4b8ac", "name": "Unused endpoint: GET /objectives", "shortDescription": {"text": "Unused endpoint: GET /objectives"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/objectives.py` declares `GET /objectives` 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-e60aae912c8955e1", "name": "Unused endpoint: GET /objectives/{objective_id}", "shortDescription": {"text": "Unused endpoint: GET /objectives/{objective_id}"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/objectives.py` declares `GET /objectives/{objective_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-4ad3f77f231231b6", "name": "Unused endpoint: PATCH /objectives/{objective_id}", "shortDescription": {"text": "Unused endpoint: PATCH /objectives/{objective_id}"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/objectives.py` declares `PATCH /objectives/{objective_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-1766723bf8fd0118", "name": "Unused endpoint: POST /components", "shortDescription": {"text": "Unused endpoint: POST /components"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/components.py` declares `POST /components` 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-12e2c7f30d583177", "name": "Unused endpoint: GET /components", "shortDescription": {"text": "Unused endpoint: GET /components"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/components.py` declares `GET /components` 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-7638b233a20ab482", "name": "Unused endpoint: GET /components/{component_id}", "shortDescription": {"text": "Unused endpoint: GET /components/{component_id}"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/components.py` declares `GET /components/{component_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-5ad2c2b271319515", "name": "Unused endpoint: PATCH /components/{component_id}", "shortDescription": {"text": "Unused endpoint: PATCH /components/{component_id}"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/components.py` declares `PATCH /components/{component_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-ce7fe565b4caff57", "name": "Unused endpoint: POST /skills", "shortDescription": {"text": "Unused endpoint: POST /skills"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/skills.py` declares `POST /skills` 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-a73e25a1e62aab6c", "name": "Unused endpoint: POST /skills/{skill_id}/supersede", "shortDescription": {"text": "Unused endpoint: POST /skills/{skill_id}/supersede"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/skills.py` declares `POST /skills/{skill_id}/supersede` 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-e8ec00c3dd6a7fdf", "name": "Unused endpoint: POST /skills/{skill_id}/deactivate", "shortDescription": {"text": "Unused endpoint: POST /skills/{skill_id}/deactivate"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/skills.py` declares `POST /skills/{skill_id}/deactivate` 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-660ae197d6b79be9", "name": "Unused endpoint: GET /skills/{skill_id}", "shortDescription": {"text": "Unused endpoint: GET /skills/{skill_id}"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/skills.py` declares `GET /skills/{skill_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-bb92891167cff715", "name": "Unused endpoint: PATCH /skills/{skill_id}", "shortDescription": {"text": "Unused endpoint: PATCH /skills/{skill_id}"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/skills.py` declares `PATCH /skills/{skill_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-c32b4607df0975e2", "name": "Unused endpoint: GET /api-keys", "shortDescription": {"text": "Unused endpoint: GET /api-keys"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/api_keys.py` declares `GET /api-keys` 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-a4d11782990ceaa7", "name": "Unused endpoint: DELETE /api-keys/{api_key_id}", "shortDescription": {"text": "Unused endpoint: DELETE /api-keys/{api_key_id}"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/api_keys.py` declares `DELETE /api-keys/{api_key_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-2a1587f78f77c864", "name": "Unused endpoint: GET /context_pack", "shortDescription": {"text": "Unused endpoint: GET /context_pack"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/context_pack.py` declares `GET /context_pack` 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-3f52adc774e06155", "name": "Unused endpoint: POST /workflows", "shortDescription": {"text": "Unused endpoint: POST /workflows"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/workflows.py` declares `POST /workflows` 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-8dbb92ac42125edf", "name": "Unused endpoint: GET /workflows", "shortDescription": {"text": "Unused endpoint: GET /workflows"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/workflows.py` declares `GET /workflows` 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-b04552cf633c6991", "name": "Unused endpoint: POST /workflows/{workflow_id}/supersede", "shortDescription": {"text": "Unused endpoint: POST /workflows/{workflow_id}/supersede"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/workflows.py` declares `POST /workflows/{workflow_id}/supersede` 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-bdff7664a4fea861", "name": "Unused endpoint: GET /workflows/state_counts", "shortDescription": {"text": "Unused endpoint: GET /workflows/state_counts"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/workflows.py` declares `GET /workflows/state_counts` 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-017394171548a2b2", "name": "Unused endpoint: GET /templates", "shortDescription": {"text": "Unused endpoint: GET /templates"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/workflows.py` declares `GET /templates` 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-a8fb0d37070fec67", "name": "Unused endpoint: POST /templates/{template_id}/archive", "shortDescription": {"text": "Unused endpoint: POST /templates/{template_id}/archive"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/workflows.py` declares `POST /templates/{template_id}/archive` 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-66bb314a3ddcb6c4", "name": "Unused endpoint: POST /templates/{template_id}/unarchive", "shortDescription": {"text": "Unused endpoint: POST /templates/{template_id}/unarchive"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/workflows.py` declares `POST /templates/{template_id}/unarchive` 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-42855c2af1922fc2", "name": "Unused endpoint: GET /workflow_templates/{template_id}", "shortDescription": {"text": "Unused endpoint: GET /workflow_templates/{template_id}"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/workflows.py` declares `GET /workflow_templates/{template_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-7ab32808383563ad", "name": "Unused endpoint: GET /workflow_templates/{template_id}/versions", "shortDescription": {"text": "Unused endpoint: GET /workflow_templates/{template_id}/versions"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/workflows.py` declares `GET /workflow_templates/{template_id}/versions` 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-e86b1a8ed6cb2e10", "name": "Unused endpoint: POST /workflow_templates/{template_id}/deprecate", "shortDescription": {"text": "Unused endpoint: POST /workflow_templates/{template_id}/deprecate"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/workflows.py` declares `POST /workflow_templates/{template_id}/deprecate` 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-7d56bf2e18548ff7", "name": "Unused endpoint: POST /workflow_templates/{template_id}/visibility", "shortDescription": {"text": "Unused endpoint: POST /workflow_templates/{template_id}/visibility"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/workflows.py` declares `POST /workflow_templates/{template_id}/visibility` 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-93b52205fec51af2", "name": "Unused endpoint: POST /workflow_templates/{template_id}/supersede", "shortDescription": {"text": "Unused endpoint: POST /workflow_templates/{template_id}/supersede"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/workflows.py` declares `POST /workflow_templates/{template_id}/supersede` 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-c64566a961e9011a", "name": "Unused endpoint: GET /workflows/{workflow_id}", "shortDescription": {"text": "Unused endpoint: GET /workflows/{workflow_id}"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/workflows.py` declares `GET /workflows/{workflow_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-1eef081fa871d084", "name": "Unused endpoint: PATCH /workflows/{workflow_id}", "shortDescription": {"text": "Unused endpoint: PATCH /workflows/{workflow_id}"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/workflows.py` declares `PATCH /workflows/{workflow_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-56c9ca5d06859af4", "name": "Unused endpoint: POST /workflows/{workflow_id}/clone", "shortDescription": {"text": "Unused endpoint: POST /workflows/{workflow_id}/clone"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/workflows.py` declares `POST /workflows/{workflow_id}/clone` 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-9ae14e936c376c5c", "name": "Unused endpoint: GET /workflows/{workflow_id}/template_params", "shortDescription": {"text": "Unused endpoint: GET /workflows/{workflow_id}/template_params"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/workflows.py` declares `GET /workflows/{workflow_id}/template_params` 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-b4171dca0fae6897", "name": "Unused endpoint: POST /workflows/{workflow_id}/archive", "shortDescription": {"text": "Unused endpoint: POST /workflows/{workflow_id}/archive"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/workflows.py` declares `POST /workflows/{workflow_id}/archive` 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-74daa89a0da0d03b", "name": "Unused endpoint: POST /workflows/{workflow_id}/close", "shortDescription": {"text": "Unused endpoint: POST /workflows/{workflow_id}/close"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/workflows.py` declares `POST /workflows/{workflow_id}/close` 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-3b2b276eb389002d", "name": "Unused endpoint: POST /workflows/{workflow_id}/unarchive", "shortDescription": {"text": "Unused endpoint: POST /workflows/{workflow_id}/unarchive"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/workflows.py` declares `POST /workflows/{workflow_id}/unarchive` 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-7e5a7079ad992922", "name": "Unused endpoint: GET /skill-gap-clusters", "shortDescription": {"text": "Unused endpoint: GET /skill-gap-clusters"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/skill_gap_clusters.py` declares `GET /skill-gap-clusters` 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-b9352ba76165602c", "name": "Unused endpoint: POST /visuals", "shortDescription": {"text": "Unused endpoint: POST /visuals"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/visuals.py` declares `POST /visuals` 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-87b52e10119d170a", "name": "Unused endpoint: GET /visuals", "shortDescription": {"text": "Unused endpoint: GET /visuals"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/visuals.py` declares `GET /visuals` 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-a3b81fe9d4a50e36", "name": "Unused endpoint: GET /visuals/{visual_id}", "shortDescription": {"text": "Unused endpoint: GET /visuals/{visual_id}"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/visuals.py` declares `GET /visuals/{visual_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-952db2a9fc7301fb", "name": "Unused endpoint: PATCH /visuals/{visual_id}", "shortDescription": {"text": "Unused endpoint: PATCH /visuals/{visual_id}"}, "fullDescription": {"text": "`apps/api/src/werkgraph_api/routes/visuals.py` declares `PATCH /visuals/{visual_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}}]}}, "automationDetails": {"id": "repobility/22670"}, "properties": {"repository": "werkgraph/wg", "repoUrl": "https://github.com/werkgraph/wg", "branch": "main"}, "results": [{"ruleId": "scanner-b9bfbad2a09219e1", "level": "note", "message": {"text": "Possibly dead Python function: current_actor"}, "properties": {"repobilityId": "c9b39c5dea742770", "scanner": "scanner-primary", "fingerprint": "b9bfbad2a09219e1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/_auth.py:64"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0b5fd8e6980e4c44", "level": "note", "message": {"text": "Possibly dead Python function: default_touches"}, "properties": {"repobilityId": "43983a38b8a702c4", "scanner": "scanner-primary", "fingerprint": "0b5fd8e6980e4c44", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/models/contract.py:670"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b19785fa81859eaf", "level": "note", "message": {"text": "Possibly dead Python function: is_commit_sha"}, "properties": {"repobilityId": "fe5bff8a2b545926", "scanner": "scanner-primary", "fingerprint": "b19785fa81859eaf", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/models/contract.py:996"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-68eda6c334e21b14", "level": "note", "message": {"text": "Possibly dead Python function: has_external_links"}, "properties": {"repobilityId": "cae515d12dbfa0cb", "scanner": "scanner-primary", "fingerprint": "68eda6c334e21b14", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/models/common.py:79"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-79654c63935992c4", "level": "note", "message": {"text": "Possibly dead Python function: refresh_permissions"}, "properties": {"repobilityId": "5fad491c38c1d243", "scanner": "scanner-primary", "fingerprint": "79654c63935992c4", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/events.py:174"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f301d8abb22ed7ce", "level": "note", "message": {"text": "Possibly dead Python function: list_project_stats"}, "properties": {"repobilityId": "69c8913e4c7ea500", "scanner": "scanner-primary", "fingerprint": "f301d8abb22ed7ce", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/services/projects.py:283"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-894cdea390a7903f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/components/wg/VisualRenderer.tsx:142"}, "properties": {"repobilityId": "c5e98dd3dce64dd2", "scanner": "scanner-primary", "fingerprint": "894cdea390a7903f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-9a8f863b753d8d68", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/components/wg/EquationBlock.tsx:63"}, "properties": {"repobilityId": "061d702b9bd75be5", "scanner": "scanner-primary", "fingerprint": "9a8f863b753d8d68", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-51b07a4787b80480", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/components/wg/MermaidBlock.tsx:87"}, "properties": {"repobilityId": "ad4a5c0b66e8009a", "scanner": "scanner-primary", "fingerprint": "51b07a4787b80480", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-c7fa9543be84e889", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/wg/Chip.tsx:30"}, "properties": {"repobilityId": "030eb8f0cbbd1894", "scanner": "scanner-primary", "fingerprint": "c7fa9543be84e889", "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-7783c89a9b2b8a66", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: ghcr.io/astral-sh/uv:0.7.21"}, "properties": {"repobilityId": "1814c4c8f0c2759a", "scanner": "scanner-primary", "fingerprint": "7783c89a9b2b8a66", "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-c36b30587c620ebd", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.12-slim"}, "properties": {"repobilityId": "eef8bc5ac5f72fe6", "scanner": "scanner-primary", "fingerprint": "c36b30587c620ebd", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-7673561931a5dd33", "level": "warning", "message": {"text": "Dockerfile runs as root: apps/web/Dockerfile"}, "properties": {"repobilityId": "d68d7937b96d047d", "scanner": "scanner-primary", "fingerprint": "7673561931a5dd33", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-74e2e2316f173b7a", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "a06183a8193bac3e", "scanner": "scanner-primary", "fingerprint": "74e2e2316f173b7a", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-74e2e2316f173b7a", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-alpine"}, "properties": {"repobilityId": "09168ccb4bcce5e8", "scanner": "scanner-primary", "fingerprint": "74e2e2316f173b7a", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/Dockerfile"}, "region": {"startLine": 22}}}]}, {"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-3120fa600ec0a955", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/web/scripts/profile-hot-routes.mjs:2"}, "properties": {"repobilityId": "218d55f5889df930", "scanner": "scanner-primary", "fingerprint": "3120fa600ec0a955", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/scripts/profile-hot-routes.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-c1ef8612f5492031", "level": "note", "message": {"text": "Insecure pattern 'document_write' in apps/web/components/wg/SetupCTA.tsx:41"}, "properties": {"repobilityId": "a431c76155a80acf", "scanner": "scanner-primary", "fingerprint": "c1ef8612f5492031", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/components/wg/SetupCTA.tsx"}, "region": {"startLine": 41}}}]}, {"ruleId": "scanner-8a41e420d940472c", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/components/wg/VisualRenderer.tsx:142"}, "properties": {"repobilityId": "34ada86fa19e5a3d", "scanner": "scanner-primary", "fingerprint": "8a41e420d940472c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/components/wg/VisualRenderer.tsx"}, "region": {"startLine": 142}}}]}, {"ruleId": "scanner-2bc6c40209e888f4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/web/components/wg/VisualRenderer.tsx:89"}, "properties": {"repobilityId": "fa6428e592a3f821", "scanner": "scanner-primary", "fingerprint": "2bc6c40209e888f4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/components/wg/VisualRenderer.tsx"}, "region": {"startLine": 89}}}]}, {"ruleId": "scanner-4406ca4859d6cf2d", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/components/wg/EquationBlock.tsx:63"}, "properties": {"repobilityId": "7961b9873c0dbf8f", "scanner": "scanner-primary", "fingerprint": "4406ca4859d6cf2d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/components/wg/EquationBlock.tsx"}, "region": {"startLine": 63}}}]}, {"ruleId": "scanner-8876d79d60737adb", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/components/wg/MermaidBlock.tsx:87"}, "properties": {"repobilityId": "e52f911f493806be", "scanner": "scanner-primary", "fingerprint": "8876d79d60737adb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/components/wg/MermaidBlock.tsx"}, "region": {"startLine": 87}}}]}, {"ruleId": "scanner-8fcbca589cab12a9", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in apps/web/components/wg/SignInForm.tsx:68"}, "properties": {"repobilityId": "791cdeae7d75b189", "scanner": "scanner-primary", "fingerprint": "8fcbca589cab12a9", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/components/wg/SignInForm.tsx"}, "region": {"startLine": 68}}}]}, {"ruleId": "scanner-3864451789c2badf", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/web/e2e/_isolated-web.ts:2"}, "properties": {"repobilityId": "89ad3b2dd7a73ecb", "scanner": "scanner-primary", "fingerprint": "3864451789c2badf", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/e2e/_isolated-web.ts"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-41761fdd3f632f50", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/web/e2e/attention.spec.ts:1"}, "properties": {"repobilityId": "3344b8d11de75b63", "scanner": "scanner-primary", "fingerprint": "41761fdd3f632f50", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/e2e/attention.spec.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4db45b37078c327e", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/web/e2e/block-renderer-shape-audit.spec.ts:1"}, "properties": {"repobilityId": "b61cf03daf98aa87", "scanner": "scanner-primary", "fingerprint": "4db45b37078c327e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/e2e/block-renderer-shape-audit.spec.ts"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ac757886d7220bc5", "level": "error", "message": {"text": "Possible secret in apps/web/e2e/audit-ui-fixture.ts"}, "properties": {"repobilityId": "713332e990dda977", "scanner": "scanner-primary", "fingerprint": "ac757886d7220bc5", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/e2e/audit-ui-fixture.ts"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-61538c71822a2a73", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in apps/web/e2e/projects-list-activity.spec.ts:3"}, "properties": {"repobilityId": "6b8258e8ec71fdbb", "scanner": "scanner-primary", "fingerprint": "61538c71822a2a73", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/e2e/projects-list-activity.spec.ts"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-b85d08b6c7a630f4", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/web-e2e-staging.mjs:2"}, "properties": {"repobilityId": "2cede0127caa19e9", "scanner": "scanner-primary", "fingerprint": "b85d08b6c7a630f4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/web-e2e-staging.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-650659b67e67d368", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/preflight.mjs:2"}, "properties": {"repobilityId": "5e6d1a668d1f08eb", "scanner": "scanner-primary", "fingerprint": "650659b67e67d368", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/preflight.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-6773536aad869680", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/install-preflight-hook.mjs:2"}, "properties": {"repobilityId": "d69d7297dec39628", "scanner": "scanner-primary", "fingerprint": "6773536aad869680", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/install-preflight-hook.mjs"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-65aa740cba4a4a73", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3130c0a2c5ea460e", "scanner": "scanner-primary", "fingerprint": "65aa740cba4a4a73", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/codeql.yml"}, "region": {"startLine": 40}}}]}, {"ruleId": "scanner-7efbda965f283c17", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "550b931b9a916a17", "scanner": "scanner-primary", "fingerprint": "7efbda965f283c17", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test.yml"}, "region": {"startLine": 77}}}]}, {"ruleId": "scanner-7efbda965f283c17", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3c5f7937c5980794", "scanner": "scanner-primary", "fingerprint": "7efbda965f283c17", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test.yml"}, "region": {"startLine": 92}}}]}, {"ruleId": "scanner-7efbda965f283c17", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "550b931b9a916a17", "scanner": "scanner-primary", "fingerprint": "7efbda965f283c17", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test.yml"}, "region": {"startLine": 100}}}]}, {"ruleId": "scanner-7efbda965f283c17", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "550b931b9a916a17", "scanner": "scanner-primary", "fingerprint": "7efbda965f283c17", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test.yml"}, "region": {"startLine": 250}}}]}, {"ruleId": "scanner-7efbda965f283c17", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3c5f7937c5980794", "scanner": "scanner-primary", "fingerprint": "7efbda965f283c17", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test.yml"}, "region": {"startLine": 265}}}]}, {"ruleId": "scanner-7efbda965f283c17", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "550b931b9a916a17", "scanner": "scanner-primary", "fingerprint": "7efbda965f283c17", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test.yml"}, "region": {"startLine": 273}}}]}, {"ruleId": "scanner-7efbda965f283c17", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "507f093d9448ab49", "scanner": "scanner-primary", "fingerprint": "7efbda965f283c17", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test.yml"}, "region": {"startLine": 308}}}]}, {"ruleId": "scanner-7efbda965f283c17", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "936d59e0fe228df4", "scanner": "scanner-primary", "fingerprint": "7efbda965f283c17", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test.yml"}, "region": {"startLine": 403}}}]}, {"ruleId": "scanner-7efbda965f283c17", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "936d59e0fe228df4", "scanner": "scanner-primary", "fingerprint": "7efbda965f283c17", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test.yml"}, "region": {"startLine": 411}}}]}, {"ruleId": "scanner-7efbda965f283c17", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "d6397cbe8605f1a3", "scanner": "scanner-primary", "fingerprint": "7efbda965f283c17", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test.yml"}, "region": {"startLine": 437}}}]}, {"ruleId": "scanner-7efbda965f283c17", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "936d59e0fe228df4", "scanner": "scanner-primary", "fingerprint": "7efbda965f283c17", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/test.yml"}, "region": {"startLine": 448}}}]}, {"ruleId": "scanner-93b5dc94140a9b18", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0ee31310e70b76c1", "scanner": "scanner-primary", "fingerprint": "93b5dc94140a9b18", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/visual-regression.yml"}, "region": {"startLine": 67}}}]}, {"ruleId": "scanner-93b5dc94140a9b18", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "c6c8d75f7857f7d4", "scanner": "scanner-primary", "fingerprint": "93b5dc94140a9b18", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/visual-regression.yml"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-93b5dc94140a9b18", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0ee31310e70b76c1", "scanner": "scanner-primary", "fingerprint": "93b5dc94140a9b18", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/visual-regression.yml"}, "region": {"startLine": 90}}}]}, {"ruleId": "scanner-93b5dc94140a9b18", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8170d5300d496e3d", "scanner": "scanner-primary", "fingerprint": "93b5dc94140a9b18", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/visual-regression.yml"}, "region": {"startLine": 158}}}]}, {"ruleId": "scanner-93b5dc94140a9b18", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "935c8339bf154173", "scanner": "scanner-primary", "fingerprint": "93b5dc94140a9b18", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/visual-regression.yml"}, "region": {"startLine": 187}}}]}, {"ruleId": "scanner-12522bf27bea173c", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5d33d98a020cbfd6", "scanner": "scanner-primary", "fingerprint": "12522bf27bea173c", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/secret-scan.yml"}, "region": {"startLine": 59}}}]}, {"ruleId": "scanner-736202d683f0f9bf", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2ae92c568e75386f", "scanner": "scanner-primary", "fingerprint": "736202d683f0f9bf", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/parity.yml"}, "region": {"startLine": 139}}}]}, {"ruleId": "scanner-6ba9bfab5f283202", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3a255e942786f887", "scanner": "scanner-primary", "fingerprint": "6ba9bfab5f283202", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/build.yml"}, "region": {"startLine": 55}}}]}, {"ruleId": "scanner-6ba9bfab5f283202", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "18a7e8b29eb8f70d", "scanner": "scanner-primary", "fingerprint": "6ba9bfab5f283202", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/build.yml"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-6ba9bfab5f283202", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3a255e942786f887", "scanner": "scanner-primary", "fingerprint": "6ba9bfab5f283202", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/build.yml"}, "region": {"startLine": 78}}}]}, {"ruleId": "scanner-7ffa33751be3d771", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "491a3ad29cbaf189", "scanner": "scanner-primary", "fingerprint": "7ffa33751be3d771", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ce8c5d8d8cbae7f5", "level": "note", "message": {"text": "Very large file: tests/parity/test_four_surface_parity.py (14007 lines)"}, "properties": {"repobilityId": "bef30d0667b22e8f", "scanner": "scanner-primary", "fingerprint": "ce8c5d8d8cbae7f5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e3e390930a5f3125", "level": "note", "message": {"text": "Very large file: apps/api/src/werkgraph_api/mcp.py (6564 lines)"}, "properties": {"repobilityId": "cca46a4d9f3acf61", "scanner": "scanner-primary", "fingerprint": "e3e390930a5f3125", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-163c1fef07063249", "level": "note", "message": {"text": "Very large file: apps/api/src/werkgraph_api/models/db.py (1593 lines)"}, "properties": {"repobilityId": "451c36fb18d4b9c6", "scanner": "scanner-primary", "fingerprint": "163c1fef07063249", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f9d5a18b34af2733", "level": "note", "message": {"text": "Very large file: apps/api/src/werkgraph_api/services/workflows.py (2691 lines)"}, "properties": {"repobilityId": "d13cd7ed31f5d282", "scanner": "scanner-primary", "fingerprint": "f9d5a18b34af2733", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f5b15dc54c819f1d", "level": "note", "message": {"text": "Very large file: apps/api/src/werkgraph_api/services/tools.py (2155 lines)"}, "properties": {"repobilityId": "9d7f3ac39fcc88f8", "scanner": "scanner-primary", "fingerprint": "f5b15dc54c819f1d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0f95e5b6c7d2838c", "level": "note", "message": {"text": "Very large file: apps/api/src/werkgraph_api/services/artifacts.py (1737 lines)"}, "properties": {"repobilityId": "2fa0ee996d5bc509", "scanner": "scanner-primary", "fingerprint": "0f95e5b6c7d2838c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e440797ebe3b63d2", "level": "note", "message": {"text": "Very large file: apps/cli/tests/test_main.py (3365 lines)"}, "properties": {"repobilityId": "7a3568e7ea615072", "scanner": "scanner-primary", "fingerprint": "e440797ebe3b63d2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6ec5fbd079c5f370", "level": "note", "message": {"text": "Very large file: apps/web/app/lib/wg-substrate-types.d.ts (13491 lines)"}, "properties": {"repobilityId": "e4d6d87b9b8370e6", "scanner": "scanner-primary", "fingerprint": "6ec5fbd079c5f370", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2e583e1601e93fca", "level": "note", "message": {"text": "Very large file: apps/web/app/lib/job-detail.ts (2131 lines)"}, "properties": {"repobilityId": "f61fa49c7e7b5055", "scanner": "scanner-primary", "fingerprint": "2e583e1601e93fca", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4a9eb7dc7c6e3880", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/web/package.json"}, "properties": {"repobilityId": "6c1704bf24cf19ac", "scanner": "scanner-primary", "fingerprint": "4a9eb7dc7c6e3880", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "adcf0c695be6bae9", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "20dce565b36ccfe9", "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": "9889f7d9d584ca2d", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "34bcc925ab5c8afe", "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": "95b5aed1a8c69294", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-fab2670cb2bc8140", "level": "note", "message": {"text": "Legacy-named symbol `template_deprecated` in tests/parity/test_four_surface_parity.py:7958"}, "properties": {"repobilityId": "4e5458eb49e16e57", "scanner": "scanner-primary", "fingerprint": "fab2670cb2bc8140", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9e34dd7ade6ac44a", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in tests/parity/test_audit_create_job_parity.py:26"}, "properties": {"repobilityId": "7ea95dd4266b2cd7", "scanner": "scanner-primary", "fingerprint": "9e34dd7ade6ac44a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-38f1a90025740f92", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_submit_cross_link_regression.py:6"}, "properties": {"repobilityId": "213248e08fe2bfee", "scanner": "scanner-primary", "fingerprint": "38f1a90025740f92", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ac2eb835558a868d", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_workflow_template_versioning.py:17"}, "properties": {"repobilityId": "4f8555df0cce9287", "scanner": "scanner-primary", "fingerprint": "ac2eb835558a868d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8cdc58f58061d97b", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_job_add_screenshot_dod_mcp.py:11"}, "properties": {"repobilityId": "849f674ac4024337", "scanner": "scanner-primary", "fingerprint": "8cdc58f58061d97b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-78378b490a8e40ea", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_submit_job_done.py:26"}, "properties": {"repobilityId": "6eb5e8c78901c013", "scanner": "scanner-primary", "fingerprint": "78378b490a8e40ea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-cbee0cc4475d7976", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_bulk_workflow_service.py:32"}, "properties": {"repobilityId": "dad0ffd2d76b06e5", "scanner": "scanner-primary", "fingerprint": "cbee0cc4475d7976", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3daa4a1cd213d076", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in apps/api/tests/test_workflows.py:426"}, "properties": {"repobilityId": "0721fe3872440317", "scanner": "scanner-primary", "fingerprint": "3daa4a1cd213d076", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-98d0f780dab52eda", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_cross_link_broader.py:16"}, "properties": {"repobilityId": "c41587f2f7a73db3", "scanner": "scanner-primary", "fingerprint": "98d0f780dab52eda", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0999f2e829ad0231", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_models_bulk.py:6"}, "properties": {"repobilityId": "71333f2927fd39d6", "scanner": "scanner-primary", "fingerprint": "0999f2e829ad0231", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f95bdee5a01c4aae", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/tests/test_agent_attribution.py:35"}, "properties": {"repobilityId": "0f481007bed9e05c", "scanner": "scanner-primary", "fingerprint": "f95bdee5a01c4aae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7cf614b984a9dbfb", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/_bulk_workflow_test_support.py:25"}, "properties": {"repobilityId": "df3a3f1998b7c20a", "scanner": "scanner-primary", "fingerprint": "7cf614b984a9dbfb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7674739b98450ec2", "level": "note", "message": {"text": "Legacy-named symbol `test_supersede_learning_creates_replacement_and_deactivates_old` in apps/api/tests/test_supersede_learning.py:56"}, "properties": {"repobilityId": "b930ca18d5b4021a", "scanner": "scanner-primary", "fingerprint": "7674739b98450ec2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f76ad20d565354b8", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_bulk_cross_link_broader.py:27"}, "properties": {"repobilityId": "a86d77a0d3ae7135", "scanner": "scanner-primary", "fingerprint": "f76ad20d565354b8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0d0a56820f9802c1", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in apps/api/tests/test_projects.py:343"}, "properties": {"repobilityId": "0b17a90466432f01", "scanner": "scanner-primary", "fingerprint": "0d0a56820f9802c1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5db42f7558caf6ea", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_cap10_edges.py:31"}, "properties": {"repobilityId": "08b86181e0a20dd2", "scanner": "scanner-primary", "fingerprint": "5db42f7558caf6ea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1ffdb5550e1a2b77", "level": "note", "message": {"text": "Legacy-named symbol `test_supersede_decision_sets_replacement_pointer_and_deactivates_old` in apps/api/tests/test_supersede_decision.py:26"}, "properties": {"repobilityId": "7652611955e0a38b", "scanner": "scanner-primary", "fingerprint": "1ffdb5550e1a2b77", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-52c7340bf9a48df9", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_cross_link_references.py:19"}, "properties": {"repobilityId": "19169d361567f355", "scanner": "scanner-primary", "fingerprint": "52c7340bf9a48df9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-649a853836e2a60c", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_mcp_cross_link_errors.py:8"}, "properties": {"repobilityId": "55ed8d4326cdd236", "scanner": "scanner-primary", "fingerprint": "649a853836e2a60c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6053582cfdc40cd8", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_canonical_hash.py:3"}, "properties": {"repobilityId": "2a0a3b8c9f6ad07a", "scanner": "scanner-primary", "fingerprint": "6053582cfdc40cd8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-fcff72392568afe1", "level": "note", "message": {"text": "Legacy-named symbol `too_old` in apps/api/tests/test_artifact_time_travel.py:187"}, "properties": {"repobilityId": "733985e3973c817a", "scanner": "scanner-primary", "fingerprint": "fcff72392568afe1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-76fb258fe823ac93", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in apps/api/tests/test_reusable_workflows_static.py:131"}, "properties": {"repobilityId": "3481b793d7cf1049", "scanner": "scanner-primary", "fingerprint": "76fb258fe823ac93", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f1e4125b5f3a4592", "level": "note", "message": {"text": "Legacy-named symbol `test_artifact_supersede_atomic_creates_replacement_and_deactivates_old` in apps/api/tests/test_artifacts.py:659"}, "properties": {"repobilityId": "c20156a64e4736b3", "scanner": "scanner-primary", "fingerprint": "f1e4125b5f3a4592", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f7aa333aeec75916", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_job_revision.py:11"}, "properties": {"repobilityId": "d44b52680d30f0e7", "scanner": "scanner-primary", "fingerprint": "f7aa333aeec75916", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-19a69c2e7fe1e6eb", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_job_signals.py:8"}, "properties": {"repobilityId": "c5bee5680a7ab26e", "scanner": "scanner-primary", "fingerprint": "19a69c2e7fe1e6eb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7a918779e1a369a5", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_subject_tags_foundation.py:5"}, "properties": {"repobilityId": "216a323f95d485e1", "scanner": "scanner-primary", "fingerprint": "7a918779e1a369a5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c9e23428e8c1e186", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/_submit_job_test_support.py:26"}, "properties": {"repobilityId": "a00b900ed746c481", "scanner": "scanner-primary", "fingerprint": "c9e23428e8c1e186", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f9a39bcb09ef27ee", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_mcp_list_coercion.py:24"}, "properties": {"repobilityId": "f219bb6b0edf699d", "scanner": "scanner-primary", "fingerprint": "f9a39bcb09ef27ee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7863dcca43d39188", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/_jobs_test_support.py:20"}, "properties": {"repobilityId": "dff524a20024fc5f", "scanner": "scanner-primary", "fingerprint": "7863dcca43d39188", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a955089c79766feb", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_cap10_foundation.py:18"}, "properties": {"repobilityId": "2cf6e9e78aa541fe", "scanner": "scanner-primary", "fingerprint": "a955089c79766feb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-610c26be84fa1ca1", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_jobs.py:20"}, "properties": {"repobilityId": "670dd5fee8a08b75", "scanner": "scanner-primary", "fingerprint": "610c26be84fa1ca1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2fc52ca799b0cc9d", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_clone_workflow_v2.py:17"}, "properties": {"repobilityId": "8118b55878054930", "scanner": "scanner-primary", "fingerprint": "2fc52ca799b0cc9d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c41cdba02be18296", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/_workflow_template_deprecation_support.py:18"}, "properties": {"repobilityId": "3f2021a36c9eb1e0", "scanner": "scanner-primary", "fingerprint": "c41cdba02be18296", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-857aeea000ebb0a2", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_unicode_roundtrip.py:9"}, "properties": {"repobilityId": "e2a94dd8c1c37538", "scanner": "scanner-primary", "fingerprint": "857aeea000ebb0a2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e73a6bcfd122b910", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_context_pack.py:15"}, "properties": {"repobilityId": "35329eca04808516", "scanner": "scanner-primary", "fingerprint": "e73a6bcfd122b910", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5d5f334a3e3583cc", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_jobs_assignee.py:12"}, "properties": {"repobilityId": "f86f6456473b13e0", "scanner": "scanner-primary", "fingerprint": "5d5f334a3e3583cc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e96df59943344aa5", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_job_contract_touches.py:18"}, "properties": {"repobilityId": "dc186fcbaa87114b", "scanner": "scanner-primary", "fingerprint": "e96df59943344aa5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-293dd1e4ee4b6c70", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_mcp_list_jobs.py:14"}, "properties": {"repobilityId": "8ebd1afe69a7fa1f", "scanner": "scanner-primary", "fingerprint": "293dd1e4ee4b6c70", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6f7f917649a42f92", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_schema_export.py:9"}, "properties": {"repobilityId": "c6ab0f19f424dde5", "scanner": "scanner-primary", "fingerprint": "6f7f917649a42f92", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bd8276551a55d2a7", "level": "note", "message": {"text": "Legacy-named symbol `set_template_deprecated` in apps/api/tests/test_clone_against_deprecated.py:8"}, "properties": {"repobilityId": "20f5a7b1ece229e4", "scanner": "scanner-primary", "fingerprint": "bd8276551a55d2a7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-031c2a3224151f1a", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/tests/test_etag_conditional_get.py:156"}, "properties": {"repobilityId": "04ae4f9ec74a5d7c", "scanner": "scanner-primary", "fingerprint": "031c2a3224151f1a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-971556553860dafb", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_bulk_cross_link_references.py:25"}, "properties": {"repobilityId": "909bebcc11ae3b29", "scanner": "scanner-primary", "fingerprint": "971556553860dafb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e84cb3715cf9e078", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_parity.py:20"}, "properties": {"repobilityId": "b95a86f0f85fbca0", "scanner": "scanner-primary", "fingerprint": "e84cb3715cf9e078", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a44ca2e75ff08106", "level": "note", "message": {"text": "Legacy-named symbol `_learning_drafts_v1` in apps/api/tests/test_survey.py:17"}, "properties": {"repobilityId": "19fe453575661374", "scanner": "scanner-primary", "fingerprint": "a44ca2e75ff08106", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-98ff604cb3a4ec76", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_related_work.py:10"}, "properties": {"repobilityId": "49cbf88e6cba0fa6", "scanner": "scanner-primary", "fingerprint": "98ff604cb3a4ec76", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-69f34f9d07832e14", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/test_workflow_template_visibility.py:16"}, "properties": {"repobilityId": "31477a51fa3cc05e", "scanner": "scanner-primary", "fingerprint": "69f34f9d07832e14", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6de1b7048b08c787", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/integration/test_cross_links_decision_warning.py:18"}, "properties": {"repobilityId": "ade5a7f1e2dee120", "scanner": "scanner-primary", "fingerprint": "6de1b7048b08c787", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-17c3b935e36f177b", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/services/test_subject_tag_dx.py:13"}, "properties": {"repobilityId": "5393aa25be9f2db7", "scanner": "scanner-primary", "fingerprint": "17c3b935e36f177b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-6c0cc7d7d91056ed", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/services/test_create_job_multi_error.py:11"}, "properties": {"repobilityId": "b6f84e4ded74e1d2", "scanner": "scanner-primary", "fingerprint": "6c0cc7d7d91056ed", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-815d994d90b6ebd0", "level": "note", "message": {"text": "Legacy-named symbol `job_contract_v1` in apps/api/tests/services/test_describe_operation_create_job.py:21"}, "properties": {"repobilityId": "842d6b4c3f4f0d0a", "scanner": "scanner-primary", "fingerprint": "815d994d90b6ebd0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-69cb19b0d4da12df", "level": "note", "message": {"text": "Stub function `upgrade` (body is just `pass`/`return`) \u2014 apps/api/alembic/versions/0001_initial.py:16"}, "properties": {"repobilityId": "8d271d16a077d073", "scanner": "scanner-primary", "fingerprint": "69cb19b0d4da12df", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-fd374e7c22c3c9a7", "level": "note", "message": {"text": "Legacy-named symbol `0043_clone_workflow_v2` in apps/api/alembic/versions/0044_workflow_template_versioning.py:4"}, "properties": {"repobilityId": "2a91d1e9491f2444", "scanner": "scanner-primary", "fingerprint": "fd374e7c22c3c9a7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-472f0943da32898b", "level": "note", "message": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 apps/api/alembic/versions/0037_project_read_permission_catchup.py:40"}, "properties": {"repobilityId": "9db303c9ec040e2f", "scanner": "scanner-primary", "fingerprint": "472f0943da32898b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-2be2b748b657d340", "level": "note", "message": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 apps/api/alembic/versions/0030_project_read_backfill.py:34"}, "properties": {"repobilityId": "de89784200c42c36", "scanner": "scanner-primary", "fingerprint": "2be2b748b657d340", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-dc549c8804d03c10", "level": "note", "message": {"text": "Stub function `downgrade` (body is just `pass`/`return`) \u2014 apps/api/alembic/versions/0053_submission_record_cost.py:24"}, "properties": {"repobilityId": "71f04d61bce5efb4", "scanner": "scanner-primary", "fingerprint": "dc549c8804d03c10", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "empty-handler", "dead-code"]}}, {"ruleId": "scanner-3cb0f43e8d2d854a", "level": "note", "message": {"text": "Legacy-named symbol `0043_clone_workflow_v2` in apps/api/alembic/versions/0043_clone_workflow_v2.py:3"}, "properties": {"repobilityId": "8b9acf283d1dd6a5", "scanner": "scanner-primary", "fingerprint": "3cb0f43e8d2d854a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0d9f4c8b2f69af9a", "level": "note", "message": {"text": "Legacy-named symbol `is_deprecated_v1` in apps/api/src/werkgraph_api/models/jobs.py:490"}, "properties": {"repobilityId": "cf8bf14bf5823fd1", "scanner": "scanner-primary", "fingerprint": "0d9f4c8b2f69af9a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2654de3179522ce9", "level": "note", "message": {"text": "Legacy-named symbol `is_deprecated_v1` in apps/api/src/werkgraph_api/routes/jobs.py:180"}, "properties": {"repobilityId": "8f38d9c36de5285f", "scanner": "scanner-primary", "fingerprint": "2654de3179522ce9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-56ea1aae750ac044", "level": "note", "message": {"text": "Legacy-named symbol `template_deprecated` in apps/api/src/werkgraph_api/services/workflows.py:1646"}, "properties": {"repobilityId": "4314294642e47824", "scanner": "scanner-primary", "fingerprint": "56ea1aae750ac044", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1fd942cbf3b9d64c", "level": "note", "message": {"text": "Legacy-named symbol `validate_job_contract_if_v1` in apps/api/src/werkgraph_api/services/_contract_validator.py:11"}, "properties": {"repobilityId": "7fd3260510472464", "scanner": "scanner-primary", "fingerprint": "1fd942cbf3b9d64c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-41da789c7236a780", "level": "note", "message": {"text": "Legacy-named symbol `validate_job_contract_if_v1` in apps/api/src/werkgraph_api/services/_job_contracts.py:169"}, "properties": {"repobilityId": "61dc0d187d64690d", "scanner": "scanner-primary", "fingerprint": "41da789c7236a780", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8dc5587d0c3737e9", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in apps/api/src/werkgraph_api/services/tools.py:1254"}, "properties": {"repobilityId": "bc87ab52e7dd2920", "scanner": "scanner-primary", "fingerprint": "8dc5587d0c3737e9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5b3e55b684e1279a", "level": "note", "message": {"text": "Legacy-named symbol `deprecated_v1` in apps/api/src/werkgraph_api/services/survey.py:58"}, "properties": {"repobilityId": "5a25df7aa8322f58", "scanner": "scanner-primary", "fingerprint": "5b3e55b684e1279a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-153eedfa4b0e44b5", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in apps/api/src/werkgraph_api/services/bulk.py:169"}, "properties": {"repobilityId": "77c7a44517a695fb", "scanner": "scanner-primary", "fingerprint": "153eedfa4b0e44b5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4ce21f2653b30a5b", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in apps/api/src/werkgraph_api/services/artifacts.py:523"}, "properties": {"repobilityId": "d2533029318246f1", "scanner": "scanner-primary", "fingerprint": "4ce21f2653b30a5b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ca375dd0d45646ae", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in apps/api/src/werkgraph_api/services/_response_cache.py:73"}, "properties": {"repobilityId": "b15e18586b65ac0f", "scanner": "scanner-primary", "fingerprint": "ca375dd0d45646ae", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-010f3d103b59fba9", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in apps/api/src/werkgraph_api/services/bulk_workflow.py:285"}, "properties": {"repobilityId": "149ee778de6d1c1e", "scanner": "scanner-primary", "fingerprint": "010f3d103b59fba9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-7b7caedad3f50fd1", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in apps/api/src/werkgraph_api/services/bulk_job.py:541"}, "properties": {"repobilityId": "1ab27ff15ba8ec7c", "scanner": "scanner-primary", "fingerprint": "7b7caedad3f50fd1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-75d2e3ab5b07264d", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/api/src/werkgraph_api/services/admin_sweep.py:24"}, "properties": {"repobilityId": "57a06f3a63df5869", "scanner": "scanner-primary", "fingerprint": "75d2e3ab5b07264d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-13f08d17f1b70e61", "level": "note", "message": {"text": "Legacy-named symbol `wg_old` in apps/cli/tests/test_main.py:541"}, "properties": {"repobilityId": "530ab25372b52db4", "scanner": "scanner-primary", "fingerprint": "13f08d17f1b70e61", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3f6ffee9457a7410", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 apps/cli/src/werkgraph_cli/_config.py:107"}, "properties": {"repobilityId": "cc57e1f4e158fc0d", "scanner": "scanner-primary", "fingerprint": "3f6ffee9457a7410", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1d7a3a733380b2cd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/components/wg/JobActivityTabs.tsx:49"}, "properties": {"repobilityId": "3913a2cafd913738", "scanner": "scanner-primary", "fingerprint": "1d7a3a733380b2cd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b5208b0e81321381", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/components/wg/DecisionsTabList.tsx:346"}, "properties": {"repobilityId": "c47c471c76721247", "scanner": "scanner-primary", "fingerprint": "b5208b0e81321381", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3550586255af2ff2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/components/wg/LearningsTabList.tsx:281"}, "properties": {"repobilityId": "183ab09f580839cc", "scanner": "scanner-primary", "fingerprint": "3550586255af2ff2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8c16b38c0cbaf5c5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/components/wg/ProjectOverviewRealtimeScope.tsx:16"}, "properties": {"repobilityId": "a82de4d64b2d72b2", "scanner": "scanner-primary", "fingerprint": "8c16b38c0cbaf5c5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2fd90d87b9e6d040", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/components/wg/ProjectsList.tsx:46"}, "properties": {"repobilityId": "c7485f929d089285", "scanner": "scanner-primary", "fingerprint": "2fd90d87b9e6d040", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a62249678647cafd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/whoami/page.tsx:23"}, "properties": {"repobilityId": "ec5e274283f36b2b", "scanner": "scanner-primary", "fingerprint": "a62249678647cafd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-96e3095c95b87495", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/events/route.ts:27"}, "properties": {"repobilityId": "692182a392bdf97a", "scanner": "scanner-primary", "fingerprint": "96e3095c95b87495", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0137430a959ad732", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/api/setup/route.ts:85"}, "properties": {"repobilityId": "c830696804e7a731", "scanner": "scanner-primary", "fingerprint": "0137430a959ad732", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dafaf1c06b0a2d03", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/app/lib/job-detail.ts:167"}, "properties": {"repobilityId": "67f26f9c03610c7c", "scanner": "scanner-primary", "fingerprint": "dafaf1c06b0a2d03", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4af8ae63e1ce1993", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/lib/setup-status.ts:16"}, "properties": {"repobilityId": "51cd1eed9b6f8f9f", "scanner": "scanner-primary", "fingerprint": "4af8ae63e1ce1993", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2b05c067105caf98", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/api-keys/page.tsx:39"}, "properties": {"repobilityId": "524092ad4c57d93d", "scanner": "scanner-primary", "fingerprint": "2b05c067105caf98", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d6b2f1d94ccaab73", "level": "none", "message": {"text": "Commented-code block (9 lines) in apps/web/e2e/copy-feedback.spec.ts:217"}, "properties": {"repobilityId": "f6218cd2c9305325", "scanner": "scanner-primary", "fingerprint": "d6b2f1d94ccaab73", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eba6d331091f6871", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/tool_registry_launch_gate.py:229"}, "properties": {"repobilityId": "7bbf57b63c47b833", "scanner": "scanner-primary", "fingerprint": "eba6d331091f6871", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-33a74c444a0e130c", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/bootstrap-staging-keys.py:137"}, "properties": {"repobilityId": "71c32644dd0999f9", "scanner": "scanner-primary", "fingerprint": "33a74c444a0e130c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cc10449e1a1516e3", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 .github/scripts/vocabulary_scan.py:191"}, "properties": {"repobilityId": "9dd42b126e527eb0", "scanner": "scanner-primary", "fingerprint": "cc10449e1a1516e3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-597231399356737a", "level": "note", "message": {"text": "43 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "99dff1e7af9292d7", "scanner": "scanner-primary", "fingerprint": "597231399356737a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "f71f416b22f52379", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "d7695cdddc114bdf", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "9bbab108be6f5c6b", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "919448b16e053453", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "cd96ec60f642e10f", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "62ca7d37720b8ca8", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "955f40983e9dacaa", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "152703186fdb4319", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "11c67e2a427085cf", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "3969543a9d1f98ea", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "6c1d1f14dd7dbc4a", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "8c49482e6839c270", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "1823f09932076c0b", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "8bdd5a1c60ca24d3", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "d319d2643f864b87", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "68935f52ee4e605c", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-380b7cb95b387b9c", "level": "note", "message": {"text": "Near-duplicate function bodies in 11 places"}, "properties": {"repobilityId": "a3c30ef43e89d803", "scanner": "scanner-primary", "fingerprint": "380b7cb95b387b9c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "7e6d4c5168dc7d16", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "ad39eb068ed1a104", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-380b7cb95b387b9c", "level": "note", "message": {"text": "Near-duplicate function bodies in 11 places"}, "properties": {"repobilityId": "ba75f108e525a596", "scanner": "scanner-primary", "fingerprint": "380b7cb95b387b9c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-c06785ac23e60b49", "level": "error", "message": {"text": "FastAPI POST `create_project` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/projects.py:70"}, "properties": {"repobilityId": "6a90b251de4e0366", "scanner": "scanner-primary", "fingerprint": "c06785ac23e60b49", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/projects.py"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-50635faae1d21cea", "level": "error", "message": {"text": "FastAPI PATCH `update_project` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/projects.py:165"}, "properties": {"repobilityId": "624d27db181e3a39", "scanner": "scanner-primary", "fingerprint": "50635faae1d21cea", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/projects.py"}, "region": {"startLine": 165}}}]}, {"ruleId": "scanner-8b72b88eeb059c0b", "level": "error", "message": {"text": "FastAPI POST `archive_project` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/projects.py:178"}, "properties": {"repobilityId": "0de65c79a6d70bdf", "scanner": "scanner-primary", "fingerprint": "8b72b88eeb059c0b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/projects.py"}, "region": {"startLine": 178}}}]}, {"ruleId": "scanner-cf09b62ff635be67", "level": "error", "message": {"text": "FastAPI POST `create_objective` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/objectives.py:49"}, "properties": {"repobilityId": "ddd323683b0e5f8e", "scanner": "scanner-primary", "fingerprint": "cf09b62ff635be67", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/objectives.py"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-53f291e69b98c7a9", "level": "error", "message": {"text": "FastAPI PATCH `update_objective` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/objectives.py:100"}, "properties": {"repobilityId": "6fbccf59236f0beb", "scanner": "scanner-primary", "fingerprint": "53f291e69b98c7a9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/objectives.py"}, "region": {"startLine": 100}}}]}, {"ruleId": "scanner-b47d3b7be8d319ca", "level": "error", "message": {"text": "FastAPI POST `create_component` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/components.py:52"}, "properties": {"repobilityId": "4fafb8dabd24ec06", "scanner": "scanner-primary", "fingerprint": "b47d3b7be8d319ca", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/components.py"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-393c689578886810", "level": "error", "message": {"text": "FastAPI PATCH `update_component` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/components.py:111"}, "properties": {"repobilityId": "4abc6f6394143e51", "scanner": "scanner-primary", "fingerprint": "393c689578886810", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/components.py"}, "region": {"startLine": 111}}}]}, {"ruleId": "scanner-7ff9e2d5aaa15550", "level": "error", "message": {"text": "FastAPI POST `create_skill` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/skills.py:52"}, "properties": {"repobilityId": "53876e664e16491c", "scanner": "scanner-primary", "fingerprint": "7ff9e2d5aaa15550", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/skills.py"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-0d02c78232c416d3", "level": "error", "message": {"text": "FastAPI POST `supersede_skill` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/skills.py:64"}, "properties": {"repobilityId": "524ad76891f03124", "scanner": "scanner-primary", "fingerprint": "0d02c78232c416d3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/skills.py"}, "region": {"startLine": 64}}}]}, {"ruleId": "scanner-6c438b59402f93a3", "level": "error", "message": {"text": "FastAPI POST `deactivate_skill` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/skills.py:82"}, "properties": {"repobilityId": "b9172bdf8fc83d71", "scanner": "scanner-primary", "fingerprint": "6c438b59402f93a3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/skills.py"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-ba7d0bec84c32341", "level": "error", "message": {"text": "FastAPI PATCH `update_skill` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/skills.py:156"}, "properties": {"repobilityId": "e48029f5b779ecc7", "scanner": "scanner-primary", "fingerprint": "ba7d0bec84c32341", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/skills.py"}, "region": {"startLine": 156}}}]}, {"ruleId": "scanner-121a94741a705d92", "level": "error", "message": {"text": "FastAPI DELETE `revoke_api_key` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/api_keys.py:58"}, "properties": {"repobilityId": "cb900ed06fba9a4b", "scanner": "scanner-primary", "fingerprint": "121a94741a705d92", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/api_keys.py"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-9079b062c11aaba6", "level": "error", "message": {"text": "FastAPI POST `create_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:118"}, "properties": {"repobilityId": "5847afb5691f1863", "scanner": "scanner-primary", "fingerprint": "9079b062c11aaba6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/workflows.py"}, "region": {"startLine": 118}}}]}, {"ruleId": "scanner-764567f1be0ea3f2", "level": "error", "message": {"text": "FastAPI POST `supersede_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:173"}, "properties": {"repobilityId": "0aea169c4df8455b", "scanner": "scanner-primary", "fingerprint": "764567f1be0ea3f2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/workflows.py"}, "region": {"startLine": 173}}}]}, {"ruleId": "scanner-6d4c8ba98e33bcd5", "level": "error", "message": {"text": "FastAPI POST `archive_template` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:240"}, "properties": {"repobilityId": "7aa43a17dc2889be", "scanner": "scanner-primary", "fingerprint": "6d4c8ba98e33bcd5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/workflows.py"}, "region": {"startLine": 240}}}]}, {"ruleId": "scanner-fbfa82177f0a216d", "level": "error", "message": {"text": "FastAPI POST `unarchive_template` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:255"}, "properties": {"repobilityId": "9cd829adf007868f", "scanner": "scanner-primary", "fingerprint": "fbfa82177f0a216d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/workflows.py"}, "region": {"startLine": 255}}}]}, {"ruleId": "scanner-44c792bc8f078984", "level": "error", "message": {"text": "FastAPI POST `deprecate_workflow_template` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:305"}, "properties": {"repobilityId": "7c29763df69cd76f", "scanner": "scanner-primary", "fingerprint": "44c792bc8f078984", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/workflows.py"}, "region": {"startLine": 305}}}]}, {"ruleId": "scanner-212fa4d732be2155", "level": "error", "message": {"text": "FastAPI POST `set_workflow_template_visibility` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:320"}, "properties": {"repobilityId": "fb6323d77ae52025", "scanner": "scanner-primary", "fingerprint": "212fa4d732be2155", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/workflows.py"}, "region": {"startLine": 320}}}]}, {"ruleId": "scanner-2a195c5b864397f3", "level": "error", "message": {"text": "FastAPI POST `supersede_workflow_template` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:340"}, "properties": {"repobilityId": "f86fdae314e5a29d", "scanner": "scanner-primary", "fingerprint": "2a195c5b864397f3", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/workflows.py"}, "region": {"startLine": 340}}}]}, {"ruleId": "scanner-08dbeb818165c415", "level": "error", "message": {"text": "FastAPI PATCH `update_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:400"}, "properties": {"repobilityId": "902016fedccd4558", "scanner": "scanner-primary", "fingerprint": "08dbeb818165c415", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/workflows.py"}, "region": {"startLine": 400}}}]}, {"ruleId": "scanner-4d1b517e2cc7d5c4", "level": "error", "message": {"text": "FastAPI POST `clone_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:417"}, "properties": {"repobilityId": "7caa2a24a05c0181", "scanner": "scanner-primary", "fingerprint": "4d1b517e2cc7d5c4", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/workflows.py"}, "region": {"startLine": 417}}}]}, {"ruleId": "scanner-15e3603ff3b2a350", "level": "error", "message": {"text": "FastAPI POST `archive_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:452"}, "properties": {"repobilityId": "29031984d65f6f98", "scanner": "scanner-primary", "fingerprint": "15e3603ff3b2a350", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/workflows.py"}, "region": {"startLine": 452}}}]}, {"ruleId": "scanner-0fc83c930e5c6de6", "level": "error", "message": {"text": "FastAPI POST `close_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:464"}, "properties": {"repobilityId": "f53f0f00f2cc6700", "scanner": "scanner-primary", "fingerprint": "0fc83c930e5c6de6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/workflows.py"}, "region": {"startLine": 464}}}]}, {"ruleId": "scanner-a7e3b21063758f72", "level": "error", "message": {"text": "FastAPI POST `unarchive_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/workflows.py:476"}, "properties": {"repobilityId": "aac18ec231e9499b", "scanner": "scanner-primary", "fingerprint": "a7e3b21063758f72", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/workflows.py"}, "region": {"startLine": 476}}}]}, {"ruleId": "scanner-4f268f1c00298d89", "level": "error", "message": {"text": "FastAPI POST `create_visual` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/visuals.py:45"}, "properties": {"repobilityId": "8f0aedc8aeffa5af", "scanner": "scanner-primary", "fingerprint": "4f268f1c00298d89", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/visuals.py"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-35b09271836fbfa8", "level": "error", "message": {"text": "FastAPI PATCH `update_visual` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/visuals.py:96"}, "properties": {"repobilityId": "d82b3a910015a00e", "scanner": "scanner-primary", "fingerprint": "35b09271836fbfa8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/visuals.py"}, "region": {"startLine": 96}}}]}, {"ruleId": "scanner-79358a08b435c4f2", "level": "error", "message": {"text": "FastAPI PATCH `update_tool` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:129"}, "properties": {"repobilityId": "996dec342aa77d2f", "scanner": "scanner-primary", "fingerprint": "79358a08b435c4f2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/tools.py"}, "region": {"startLine": 129}}}]}, {"ruleId": "scanner-b8bcfaf38c1630af", "level": "error", "message": {"text": "FastAPI POST `reconcile_tool_methods` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:147"}, "properties": {"repobilityId": "48e97ce0aa581842", "scanner": "scanner-primary", "fingerprint": "b8bcfaf38c1630af", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/tools.py"}, "region": {"startLine": 147}}}]}, {"ruleId": "scanner-a8ed9043d546e7de", "level": "error", "message": {"text": "FastAPI POST `attach_tool_globally` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:168"}, "properties": {"repobilityId": "f2d238c13b3671dc", "scanner": "scanner-primary", "fingerprint": "a8ed9043d546e7de", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/tools.py"}, "region": {"startLine": 168}}}]}, {"ruleId": "scanner-0c66dfe9714d35bf", "level": "error", "message": {"text": "FastAPI POST `attach_tool_to_project` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:193"}, "properties": {"repobilityId": "568510965e00e7c2", "scanner": "scanner-primary", "fingerprint": "0c66dfe9714d35bf", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/tools.py"}, "region": {"startLine": 193}}}]}, {"ruleId": "scanner-7d37d3a237eb3c95", "level": "error", "message": {"text": "FastAPI POST `attach_tool_to_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:218"}, "properties": {"repobilityId": "89ed006851dcb244", "scanner": "scanner-primary", "fingerprint": "7d37d3a237eb3c95", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/tools.py"}, "region": {"startLine": 218}}}]}, {"ruleId": "scanner-0c6b695cef82f254", "level": "error", "message": {"text": "FastAPI DELETE `detach_tool` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:243"}, "properties": {"repobilityId": "813485781401a5c1", "scanner": "scanner-primary", "fingerprint": "0c6b695cef82f254", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/tools.py"}, "region": {"startLine": 243}}}]}, {"ruleId": "scanner-ad6982b3a126b7ab", "level": "error", "message": {"text": "FastAPI POST `archive_tool` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:264"}, "properties": {"repobilityId": "43e154fdffdaba8c", "scanner": "scanner-primary", "fingerprint": "ad6982b3a126b7ab", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/tools.py"}, "region": {"startLine": 264}}}]}, {"ruleId": "scanner-9c4bbf76c3c8c172", "level": "error", "message": {"text": "FastAPI POST `unarchive_tool` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:276"}, "properties": {"repobilityId": "144110fe7a530ad1", "scanner": "scanner-primary", "fingerprint": "9c4bbf76c3c8c172", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/tools.py"}, "region": {"startLine": 276}}}]}, {"ruleId": "scanner-6e9b58d70d361338", "level": "error", "message": {"text": "FastAPI POST `deactivate_tool` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tools.py:288"}, "properties": {"repobilityId": "e32b01974d16abd4", "scanner": "scanner-primary", "fingerprint": "6e9b58d70d361338", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/tools.py"}, "region": {"startLine": 288}}}]}, {"ruleId": "scanner-c246f648744bd730", "level": "error", "message": {"text": "FastAPI POST `attach_subject_tags` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/subject_tags.py:74"}, "properties": {"repobilityId": "1a0919d94ff0e705", "scanner": "scanner-primary", "fingerprint": "c246f648744bd730", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/subject_tags.py"}, "region": {"startLine": 74}}}]}, {"ruleId": "scanner-1d7ce3f525b3eac0", "level": "error", "message": {"text": "FastAPI POST `detach_subject_tags` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/subject_tags.py:86"}, "properties": {"repobilityId": "9101ffbae790233f", "scanner": "scanner-primary", "fingerprint": "1d7ce3f525b3eac0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/subject_tags.py"}, "region": {"startLine": 86}}}]}, {"ruleId": "scanner-afb349793938ae01", "level": "error", "message": {"text": "FastAPI POST `deactivate_fixture_pollution` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/admin.py:53"}, "properties": {"repobilityId": "5c115145cd1efffb", "scanner": "scanner-primary", "fingerprint": "afb349793938ae01", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/admin.py"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-ac08bb14d29bf595", "level": "error", "message": {"text": "FastAPI POST `admin_deactivate_actor` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/admin.py:72"}, "properties": {"repobilityId": "7fd467bceb708f2f", "scanner": "scanner-primary", "fingerprint": "ac08bb14d29bf595", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/admin.py"}, "region": {"startLine": 72}}}]}, {"ruleId": "scanner-3a47368978187b1b", "level": "error", "message": {"text": "FastAPI POST `admin_revoke_api_key` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/admin.py:91"}, "properties": {"repobilityId": "17f6c351f1787ab7", "scanner": "scanner-primary", "fingerprint": "3a47368978187b1b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/admin.py"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-bae9926d80a605fc", "level": "error", "message": {"text": "FastAPI POST `admin_deactivate_decision` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/admin.py:110"}, "properties": {"repobilityId": "134bb31c7c9d0582", "scanner": "scanner-primary", "fingerprint": "bae9926d80a605fc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/admin.py"}, "region": {"startLine": 110}}}]}, {"ruleId": "scanner-1b53159f270ce303", "level": "error", "message": {"text": "FastAPI POST `admin_deactivate_learning` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/admin.py:129"}, "properties": {"repobilityId": "737ebc1d6c03b3ea", "scanner": "scanner-primary", "fingerprint": "1b53159f270ce303", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/admin.py"}, "region": {"startLine": 129}}}]}, {"ruleId": "scanner-5e570723cc7509fb", "level": "error", "message": {"text": "FastAPI POST `bulk_provision_project` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/bulk.py:60"}, "properties": {"repobilityId": "849c2fff5a5d0e91", "scanner": "scanner-primary", "fingerprint": "5e570723cc7509fb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/bulk.py"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-7dced11796682120", "level": "error", "message": {"text": "FastAPI POST `bulk_provision_workflow` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/bulk.py:79"}, "properties": {"repobilityId": "721cc6a86fbe2b00", "scanner": "scanner-primary", "fingerprint": "7dced11796682120", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/bulk.py"}, "region": {"startLine": 79}}}]}, {"ruleId": "scanner-3cc8a3a59ac0bfe7", "level": "error", "message": {"text": "FastAPI POST `bulk_provision_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/bulk.py:98"}, "properties": {"repobilityId": "6b00e0f82b0949c5", "scanner": "scanner-primary", "fingerprint": "3cc8a3a59ac0bfe7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/bulk.py"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-15de41c1119631d7", "level": "error", "message": {"text": "FastAPI POST `bulk_provision_decision` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/bulk.py:117"}, "properties": {"repobilityId": "82fb69abd49e16e5", "scanner": "scanner-primary", "fingerprint": "15de41c1119631d7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/bulk.py"}, "region": {"startLine": 117}}}]}, {"ruleId": "scanner-3e8a674a7589b834", "level": "error", "message": {"text": "FastAPI POST `bulk_provision_learning` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/bulk.py:136"}, "properties": {"repobilityId": "e86be5dd37e77726", "scanner": "scanner-primary", "fingerprint": "3e8a674a7589b834", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/bulk.py"}, "region": {"startLine": 136}}}]}, {"ruleId": "scanner-54fceea41e1bf3bf", "level": "error", "message": {"text": "FastAPI POST `bulk_archive_workflow_artifacts` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/bulk.py:155"}, "properties": {"repobilityId": "57be50129107a8f3", "scanner": "scanner-primary", "fingerprint": "54fceea41e1bf3bf", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/bulk.py"}, "region": {"startLine": 155}}}]}, {"ruleId": "scanner-66010d934c09573e", "level": "error", "message": {"text": "FastAPI POST `create_artifact` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/artifacts.py:96"}, "properties": {"repobilityId": "92fd3050b8937a0f", "scanner": "scanner-primary", "fingerprint": "66010d934c09573e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/artifacts.py"}, "region": {"startLine": 96}}}]}, {"ruleId": "scanner-519294318b30fbde", "level": "error", "message": {"text": "FastAPI PATCH `update_artifact` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/artifacts.py:251"}, "properties": {"repobilityId": "9fddf99d95ef4a5b", "scanner": "scanner-primary", "fingerprint": "519294318b30fbde", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/artifacts.py"}, "region": {"startLine": 251}}}]}, {"ruleId": "scanner-b00df51d9015083a", "level": "error", "message": {"text": "FastAPI POST `edit_artifact_blocks` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/artifacts.py:269"}, "properties": {"repobilityId": "fff3d4a600af3d7d", "scanner": "scanner-primary", "fingerprint": "b00df51d9015083a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/artifacts.py"}, "region": {"startLine": 269}}}]}, {"ruleId": "scanner-3abbc488ca1d3ac9", "level": "error", "message": {"text": "FastAPI POST `archive_artifact` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/artifacts.py:287"}, "properties": {"repobilityId": "292c3691330fde26", "scanner": "scanner-primary", "fingerprint": "3abbc488ca1d3ac9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/artifacts.py"}, "region": {"startLine": 287}}}]}, {"ruleId": "scanner-8474f285b5bb61cb", "level": "error", "message": {"text": "FastAPI POST `supersede_artifact` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/artifacts.py:305"}, "properties": {"repobilityId": "086d83bf7bf10745", "scanner": "scanner-primary", "fingerprint": "8474f285b5bb61cb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/artifacts.py"}, "region": {"startLine": 305}}}]}, {"ruleId": "scanner-6b05613724b0b3e6", "level": "error", "message": {"text": "FastAPI POST `create_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:110"}, "properties": {"repobilityId": "a8278a7c827ccdb7", "scanner": "scanner-primary", "fingerprint": "6b05613724b0b3e6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/jobs.py"}, "region": {"startLine": 110}}}]}, {"ruleId": "scanner-7cf98fbb5e5ac26a", "level": "error", "message": {"text": "FastAPI POST `claim_next_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:122"}, "properties": {"repobilityId": "a5159e0df0855245", "scanner": "scanner-primary", "fingerprint": "7cf98fbb5e5ac26a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/jobs.py"}, "region": {"startLine": 122}}}]}, {"ruleId": "scanner-64b8b940152fd0dc", "level": "error", "message": {"text": "FastAPI POST `claim_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:139"}, "properties": {"repobilityId": "d1a88b73f8cdeab5", "scanner": "scanner-primary", "fingerprint": "64b8b940152fd0dc", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/jobs.py"}, "region": {"startLine": 139}}}]}, {"ruleId": "scanner-c9976623e619e724", "level": "error", "message": {"text": "FastAPI POST `renew_claim` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:152"}, "properties": {"repobilityId": "1a2a1021c9e9c3c6", "scanner": "scanner-primary", "fingerprint": "c9976623e619e724", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/jobs.py"}, "region": {"startLine": 152}}}]}, {"ruleId": "scanner-10722730d02ee651", "level": "error", "message": {"text": "FastAPI POST `submit_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:165"}, "properties": {"repobilityId": "c74c7f60efd6f473", "scanner": "scanner-primary", "fingerprint": "10722730d02ee651", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/jobs.py"}, "region": {"startLine": 165}}}]}, {"ruleId": "scanner-07cbcc9a46e26220", "level": "error", "message": {"text": "FastAPI POST `review_complete` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:187"}, "properties": {"repobilityId": "5ac0d6a740aa8e01", "scanner": "scanner-primary", "fingerprint": "07cbcc9a46e26220", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/jobs.py"}, "region": {"startLine": 187}}}]}, {"ruleId": "scanner-ffd93d9a18013a1a", "level": "error", "message": {"text": "FastAPI POST `comment_on_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:205"}, "properties": {"repobilityId": "91ee0c5cf3e42216", "scanner": "scanner-primary", "fingerprint": "ffd93d9a18013a1a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/jobs.py"}, "region": {"startLine": 205}}}]}, {"ruleId": "scanner-29029ae178ae6fed", "level": "error", "message": {"text": "FastAPI POST `cancel_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:289"}, "properties": {"repobilityId": "6bc52cd59d1b52e1", "scanner": "scanner-primary", "fingerprint": "29029ae178ae6fed", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/jobs.py"}, "region": {"startLine": 289}}}]}, {"ruleId": "scanner-dc86ca0b9f074f6f", "level": "error", "message": {"text": "FastAPI POST `release_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:302"}, "properties": {"repobilityId": "d1e86b945cbf4429", "scanner": "scanner-primary", "fingerprint": "dc86ca0b9f074f6f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/jobs.py"}, "region": {"startLine": 302}}}]}, {"ruleId": "scanner-2b8cd8c9f363d8bf", "level": "error", "message": {"text": "FastAPI POST `reset_claim` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:314"}, "properties": {"repobilityId": "621ee14362fa5ef6", "scanner": "scanner-primary", "fingerprint": "2b8cd8c9f363d8bf", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/jobs.py"}, "region": {"startLine": 314}}}]}, {"ruleId": "scanner-2eb87680c2bf7bee", "level": "error", "message": {"text": "FastAPI POST `heartbeat_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:332"}, "properties": {"repobilityId": "38ab9faf14cfe5f4", "scanner": "scanner-primary", "fingerprint": "2eb87680c2bf7bee", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/jobs.py"}, "region": {"startLine": 332}}}]}, {"ruleId": "scanner-26486d710bca9f04", "level": "error", "message": {"text": "FastAPI POST `move_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:454"}, "properties": {"repobilityId": "79877e5871c30a01", "scanner": "scanner-primary", "fingerprint": "26486d710bca9f04", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/jobs.py"}, "region": {"startLine": 454}}}]}, {"ruleId": "scanner-cdcf2b222d82592a", "level": "error", "message": {"text": "FastAPI PATCH `update_job` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:467"}, "properties": {"repobilityId": "e46ad622dc32bcf0", "scanner": "scanner-primary", "fingerprint": "cdcf2b222d82592a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/jobs.py"}, "region": {"startLine": 467}}}]}, {"ruleId": "scanner-71d82594169ac568", "level": "error", "message": {"text": "FastAPI POST `add_screenshot_dod` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/jobs.py:480"}, "properties": {"repobilityId": "efc8797343bb2a71", "scanner": "scanner-primary", "fingerprint": "71d82594169ac568", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/jobs.py"}, "region": {"startLine": 480}}}]}, {"ruleId": "scanner-10966d3cc3b85f6f", "level": "error", "message": {"text": "FastAPI POST `attach_label` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/labels.py:53"}, "properties": {"repobilityId": "1a8dc2e2c937d147", "scanner": "scanner-primary", "fingerprint": "10966d3cc3b85f6f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/labels.py"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-ff210ba41d93ad03", "level": "error", "message": {"text": "FastAPI DELETE `detach_label` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/labels.py:66"}, "properties": {"repobilityId": "72200e0ff75a4962", "scanner": "scanner-primary", "fingerprint": "ff210ba41d93ad03", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/labels.py"}, "region": {"startLine": 66}}}]}, {"ruleId": "scanner-5426322d0a6186af", "level": "error", "message": {"text": "FastAPI POST `create_actor` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/actors.py:70"}, "properties": {"repobilityId": "fda6b86d47b6dc8f", "scanner": "scanner-primary", "fingerprint": "5426322d0a6186af", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/actors.py"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-9534b6788c756392", "level": "error", "message": {"text": "FastAPI DELETE `deactivate_actor` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/actors.py:82"}, "properties": {"repobilityId": "78cb2b6fdb83c15a", "scanner": "scanner-primary", "fingerprint": "9534b6788c756392", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/actors.py"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-1a7f26289fb51713", "level": "error", "message": {"text": "FastAPI POST `link_jobs` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/edges.py:60"}, "properties": {"repobilityId": "b467c3e2c99f0ea9", "scanner": "scanner-primary", "fingerprint": "1a7f26289fb51713", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/edges.py"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-545376c7815f6e0e", "level": "error", "message": {"text": "FastAPI DELETE `unlink_jobs` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/edges.py:72"}, "properties": {"repobilityId": "94b242ef12b0a233", "scanner": "scanner-primary", "fingerprint": "545376c7815f6e0e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/edges.py"}, "region": {"startLine": 72}}}]}, {"ruleId": "scanner-518200c8385338b1", "level": "error", "message": {"text": "FastAPI POST `create_decision` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/decisions.py:50"}, "properties": {"repobilityId": "910684ce3e2d947a", "scanner": "scanner-primary", "fingerprint": "518200c8385338b1", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/decisions.py"}, "region": {"startLine": 50}}}]}, {"ruleId": "scanner-ec22576db2f3f79a", "level": "error", "message": {"text": "FastAPI POST `supersede_decision` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/decisions.py:171"}, "properties": {"repobilityId": "0331d140069dabad", "scanner": "scanner-primary", "fingerprint": "ec22576db2f3f79a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/decisions.py"}, "region": {"startLine": 171}}}]}, {"ruleId": "scanner-a21fe1938e930ff7", "level": "error", "message": {"text": "FastAPI POST `create_document` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/documents.py:61"}, "properties": {"repobilityId": "93f962fc98193fd5", "scanner": "scanner-primary", "fingerprint": "a21fe1938e930ff7", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/documents.py"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-3db1d7d06853b7a0", "level": "error", "message": {"text": "FastAPI PATCH `update_document` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/documents.py:114"}, "properties": {"repobilityId": "597a4705a80d1204", "scanner": "scanner-primary", "fingerprint": "3db1d7d06853b7a0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/documents.py"}, "region": {"startLine": 114}}}]}, {"ruleId": "scanner-b324e0118dd27ab8", "level": "error", "message": {"text": "FastAPI POST `archive_document` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/documents.py:132"}, "properties": {"repobilityId": "75eeab473c9967fe", "scanner": "scanner-primary", "fingerprint": "b324e0118dd27ab8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/documents.py"}, "region": {"startLine": 132}}}]}, {"ruleId": "scanner-0fc4a60f1b029c55", "level": "error", "message": {"text": "FastAPI POST `create_document_blob` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/documents.py:144"}, "properties": {"repobilityId": "f237988fcbd5bd9e", "scanner": "scanner-primary", "fingerprint": "0fc4a60f1b029c55", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/documents.py"}, "region": {"startLine": 144}}}]}, {"ruleId": "scanner-32d5dd60fae490fb", "level": "error", "message": {"text": "FastAPI POST `poll_local_bridge_session` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tool_bridge.py:35"}, "properties": {"repobilityId": "84ed2c7535400283", "scanner": "scanner-primary", "fingerprint": "32d5dd60fae490fb", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/tool_bridge.py"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-bbe4cefe20aa96bd", "level": "error", "message": {"text": "FastAPI POST `complete_local_bridge_call` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/tool_bridge.py:53"}, "properties": {"repobilityId": "9f4426ee18d8daa0", "scanner": "scanner-primary", "fingerprint": "bbe4cefe20aa96bd", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/tool_bridge.py"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-ef9727e85ce162ad", "level": "error", "message": {"text": "FastAPI POST `submit_learning` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/learnings.py:53"}, "properties": {"repobilityId": "b973edde0ca241c7", "scanner": "scanner-primary", "fingerprint": "ef9727e85ce162ad", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/learnings.py"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-6dd2a186f37ed95a", "level": "error", "message": {"text": "FastAPI PATCH `edit_learning` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/learnings.py:174"}, "properties": {"repobilityId": "d73d6c13e29b07ea", "scanner": "scanner-primary", "fingerprint": "6dd2a186f37ed95a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/learnings.py"}, "region": {"startLine": 174}}}]}, {"ruleId": "scanner-9be2450bfa8d0490", "level": "error", "message": {"text": "FastAPI POST `supersede_learning` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/learnings.py:192"}, "properties": {"repobilityId": "689a38515237a246", "scanner": "scanner-primary", "fingerprint": "9be2450bfa8d0490", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/learnings.py"}, "region": {"startLine": 192}}}]}, {"ruleId": "scanner-0ba354051177675f", "level": "error", "message": {"text": "FastAPI POST `request_approval` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/approvals.py:45"}, "properties": {"repobilityId": "755af760e742af61", "scanner": "scanner-primary", "fingerprint": "0ba354051177675f", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/approvals.py"}, "region": {"startLine": 45}}}]}, {"ruleId": "scanner-acf0b4f1835862b2", "level": "error", "message": {"text": "FastAPI POST `decide_approval` without auth dependency \u2014 apps/api/src/werkgraph_api/routes/approvals.py:57"}, "properties": {"repobilityId": "16871a463923128e", "scanner": "scanner-primary", "fingerprint": "acf0b4f1835862b2", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/werkgraph_api/routes/approvals.py"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-a927643389002360", "level": "error", "message": {"text": "Dangling fetch: GET /api/artifacts?${params.toString()} (apps/web/components/wg/ArtifactsPanelClient.tsx:152)"}, "properties": {"repobilityId": "210199101428d471", "scanner": "scanner-primary", "fingerprint": "a927643389002360", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-70f9efd04f3154f0", "level": "error", "message": {"text": "Dangling fetch: GET /api/realtime/revalidate (apps/web/components/wg/ProjectOverviewRealtimeScope.tsx:16)"}, "properties": {"repobilityId": "dacb3e3854f01c61", "scanner": "scanner-primary", "fingerprint": "70f9efd04f3154f0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f9de915fbe945524", "level": "error", "message": {"text": "Dangling fetch: GET /api/realtime/revalidate (apps/web/components/wg/ProjectsList.tsx:46)"}, "properties": {"repobilityId": "3e5bedb308fae71b", "scanner": "scanner-primary", "fingerprint": "f9de915fbe945524", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e44585958f55b5da", "level": "note", "message": {"text": "Unused endpoint: GET /response-cache/stats"}, "properties": {"repobilityId": "8e6c2a69e18aec09", "scanner": "scanner-primary", "fingerprint": "e44585958f55b5da", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-58666816ba500374", "level": "note", "message": {"text": "Unused endpoint: POST /projects"}, "properties": {"repobilityId": "6df6d46ae2253dfa", "scanner": "scanner-primary", "fingerprint": "58666816ba500374", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c1e1ee09590b0a49", "level": "note", "message": {"text": "Unused endpoint: GET /projects"}, "properties": {"repobilityId": "7d5dd079a6bba8d8", "scanner": "scanner-primary", "fingerprint": "c1e1ee09590b0a49", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-69d20e2a10139a82", "level": "note", "message": {"text": "Unused endpoint: GET /projects/stats"}, "properties": {"repobilityId": "01ed3c7fb307cf5d", "scanner": "scanner-primary", "fingerprint": "69d20e2a10139a82", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d648a3c553b4f50", "level": "note", "message": {"text": "Unused endpoint: GET /projects/{project_id}/graph"}, "properties": {"repobilityId": "4e0ef150ee3a91f9", "scanner": "scanner-primary", "fingerprint": "8d648a3c553b4f50", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8276e9a42f5cb13a", "level": "note", "message": {"text": "Unused endpoint: GET /projects/{project_id}"}, "properties": {"repobilityId": "4752c7d2bf9d97b0", "scanner": "scanner-primary", "fingerprint": "8276e9a42f5cb13a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d1293cf39e94c35a", "level": "note", "message": {"text": "Unused endpoint: PATCH /projects/{project_id}"}, "properties": {"repobilityId": "097f1f5a0eb9317a", "scanner": "scanner-primary", "fingerprint": "d1293cf39e94c35a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6bd55c71c9fe5cc7", "level": "note", "message": {"text": "Unused endpoint: POST /projects/{project_id}/archive"}, "properties": {"repobilityId": "97f1c950e0c0fd25", "scanner": "scanner-primary", "fingerprint": "6bd55c71c9fe5cc7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3be912c6187ea599", "level": "note", "message": {"text": "Unused endpoint: GET /runs"}, "properties": {"repobilityId": "098cf68fd4eefaa8", "scanner": "scanner-primary", "fingerprint": "3be912c6187ea599", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-55f8c8cf959a5664", "level": "note", "message": {"text": "Unused endpoint: GET /runs/{run_id}"}, "properties": {"repobilityId": "6a40636cf2a2f49c", "scanner": "scanner-primary", "fingerprint": "55f8c8cf959a5664", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bc6f0bf7364b320b", "level": "note", "message": {"text": "Unused endpoint: POST /objectives"}, "properties": {"repobilityId": "e4f7b4596f67b32d", "scanner": "scanner-primary", "fingerprint": "bc6f0bf7364b320b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8b9c61a1acf4b8ac", "level": "note", "message": {"text": "Unused endpoint: GET /objectives"}, "properties": {"repobilityId": "17e294a7437809ef", "scanner": "scanner-primary", "fingerprint": "8b9c61a1acf4b8ac", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e60aae912c8955e1", "level": "note", "message": {"text": "Unused endpoint: GET /objectives/{objective_id}"}, "properties": {"repobilityId": "d5fbf4928d5f9f55", "scanner": "scanner-primary", "fingerprint": "e60aae912c8955e1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4ad3f77f231231b6", "level": "note", "message": {"text": "Unused endpoint: PATCH /objectives/{objective_id}"}, "properties": {"repobilityId": "2b9ef540cf5c2aab", "scanner": "scanner-primary", "fingerprint": "4ad3f77f231231b6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1766723bf8fd0118", "level": "note", "message": {"text": "Unused endpoint: POST /components"}, "properties": {"repobilityId": "6fdaa17eaf5f834f", "scanner": "scanner-primary", "fingerprint": "1766723bf8fd0118", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-12e2c7f30d583177", "level": "note", "message": {"text": "Unused endpoint: GET /components"}, "properties": {"repobilityId": "f7b4225071c69185", "scanner": "scanner-primary", "fingerprint": "12e2c7f30d583177", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7638b233a20ab482", "level": "note", "message": {"text": "Unused endpoint: GET /components/{component_id}"}, "properties": {"repobilityId": "07151dad4b8a70c0", "scanner": "scanner-primary", "fingerprint": "7638b233a20ab482", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5ad2c2b271319515", "level": "note", "message": {"text": "Unused endpoint: PATCH /components/{component_id}"}, "properties": {"repobilityId": "037cd0b1167665d0", "scanner": "scanner-primary", "fingerprint": "5ad2c2b271319515", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ce7fe565b4caff57", "level": "note", "message": {"text": "Unused endpoint: POST /skills"}, "properties": {"repobilityId": "612f0c4c1eb7532f", "scanner": "scanner-primary", "fingerprint": "ce7fe565b4caff57", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a73e25a1e62aab6c", "level": "note", "message": {"text": "Unused endpoint: POST /skills/{skill_id}/supersede"}, "properties": {"repobilityId": "9e8420cd60fcdb62", "scanner": "scanner-primary", "fingerprint": "a73e25a1e62aab6c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e8ec00c3dd6a7fdf", "level": "note", "message": {"text": "Unused endpoint: POST /skills/{skill_id}/deactivate"}, "properties": {"repobilityId": "40db91b57cbc4983", "scanner": "scanner-primary", "fingerprint": "e8ec00c3dd6a7fdf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-660ae197d6b79be9", "level": "note", "message": {"text": "Unused endpoint: GET /skills/{skill_id}"}, "properties": {"repobilityId": "a9649c68990a20e5", "scanner": "scanner-primary", "fingerprint": "660ae197d6b79be9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bb92891167cff715", "level": "note", "message": {"text": "Unused endpoint: PATCH /skills/{skill_id}"}, "properties": {"repobilityId": "38979c6a66f8df6b", "scanner": "scanner-primary", "fingerprint": "bb92891167cff715", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c32b4607df0975e2", "level": "note", "message": {"text": "Unused endpoint: GET /api-keys"}, "properties": {"repobilityId": "cbaec7dbfbcd2d57", "scanner": "scanner-primary", "fingerprint": "c32b4607df0975e2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a4d11782990ceaa7", "level": "note", "message": {"text": "Unused endpoint: DELETE /api-keys/{api_key_id}"}, "properties": {"repobilityId": "aae6e6ea823859a6", "scanner": "scanner-primary", "fingerprint": "a4d11782990ceaa7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2a1587f78f77c864", "level": "note", "message": {"text": "Unused endpoint: GET /context_pack"}, "properties": {"repobilityId": "3bc794c26359cd0e", "scanner": "scanner-primary", "fingerprint": "2a1587f78f77c864", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3f52adc774e06155", "level": "note", "message": {"text": "Unused endpoint: POST /workflows"}, "properties": {"repobilityId": "8b3486d47be5da63", "scanner": "scanner-primary", "fingerprint": "3f52adc774e06155", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8dbb92ac42125edf", "level": "note", "message": {"text": "Unused endpoint: GET /workflows"}, "properties": {"repobilityId": "548e443508393bad", "scanner": "scanner-primary", "fingerprint": "8dbb92ac42125edf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b04552cf633c6991", "level": "note", "message": {"text": "Unused endpoint: POST /workflows/{workflow_id}/supersede"}, "properties": {"repobilityId": "b87f41cd4a824f2b", "scanner": "scanner-primary", "fingerprint": "b04552cf633c6991", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bdff7664a4fea861", "level": "note", "message": {"text": "Unused endpoint: GET /workflows/state_counts"}, "properties": {"repobilityId": "e54d0b0219c2f217", "scanner": "scanner-primary", "fingerprint": "bdff7664a4fea861", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-017394171548a2b2", "level": "note", "message": {"text": "Unused endpoint: GET /templates"}, "properties": {"repobilityId": "f90dfe253a65b645", "scanner": "scanner-primary", "fingerprint": "017394171548a2b2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a8fb0d37070fec67", "level": "note", "message": {"text": "Unused endpoint: POST /templates/{template_id}/archive"}, "properties": {"repobilityId": "4807dedb171394bc", "scanner": "scanner-primary", "fingerprint": "a8fb0d37070fec67", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-66bb314a3ddcb6c4", "level": "note", "message": {"text": "Unused endpoint: POST /templates/{template_id}/unarchive"}, "properties": {"repobilityId": "d0839d074334f3ee", "scanner": "scanner-primary", "fingerprint": "66bb314a3ddcb6c4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-42855c2af1922fc2", "level": "note", "message": {"text": "Unused endpoint: GET /workflow_templates/{template_id}"}, "properties": {"repobilityId": "30fdb0b50b9b4b06", "scanner": "scanner-primary", "fingerprint": "42855c2af1922fc2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7ab32808383563ad", "level": "note", "message": {"text": "Unused endpoint: GET /workflow_templates/{template_id}/versions"}, "properties": {"repobilityId": "fa944ae5702f2f4d", "scanner": "scanner-primary", "fingerprint": "7ab32808383563ad", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e86b1a8ed6cb2e10", "level": "note", "message": {"text": "Unused endpoint: POST /workflow_templates/{template_id}/deprecate"}, "properties": {"repobilityId": "6ddc16f23f8eee12", "scanner": "scanner-primary", "fingerprint": "e86b1a8ed6cb2e10", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7d56bf2e18548ff7", "level": "note", "message": {"text": "Unused endpoint: POST /workflow_templates/{template_id}/visibility"}, "properties": {"repobilityId": "0d084ed02093d3be", "scanner": "scanner-primary", "fingerprint": "7d56bf2e18548ff7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-93b52205fec51af2", "level": "note", "message": {"text": "Unused endpoint: POST /workflow_templates/{template_id}/supersede"}, "properties": {"repobilityId": "54d983afe4ec0b04", "scanner": "scanner-primary", "fingerprint": "93b52205fec51af2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c64566a961e9011a", "level": "note", "message": {"text": "Unused endpoint: GET /workflows/{workflow_id}"}, "properties": {"repobilityId": "657f78e0c727ae74", "scanner": "scanner-primary", "fingerprint": "c64566a961e9011a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1eef081fa871d084", "level": "note", "message": {"text": "Unused endpoint: PATCH /workflows/{workflow_id}"}, "properties": {"repobilityId": "d5304aec966b8d7a", "scanner": "scanner-primary", "fingerprint": "1eef081fa871d084", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-56c9ca5d06859af4", "level": "note", "message": {"text": "Unused endpoint: POST /workflows/{workflow_id}/clone"}, "properties": {"repobilityId": "d9771283e6c6d3ce", "scanner": "scanner-primary", "fingerprint": "56c9ca5d06859af4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9ae14e936c376c5c", "level": "note", "message": {"text": "Unused endpoint: GET /workflows/{workflow_id}/template_params"}, "properties": {"repobilityId": "e286b8eb966eb1c7", "scanner": "scanner-primary", "fingerprint": "9ae14e936c376c5c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b4171dca0fae6897", "level": "note", "message": {"text": "Unused endpoint: POST /workflows/{workflow_id}/archive"}, "properties": {"repobilityId": "43a173ae81899a7c", "scanner": "scanner-primary", "fingerprint": "b4171dca0fae6897", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-74daa89a0da0d03b", "level": "note", "message": {"text": "Unused endpoint: POST /workflows/{workflow_id}/close"}, "properties": {"repobilityId": "06ff000a2bfa1216", "scanner": "scanner-primary", "fingerprint": "74daa89a0da0d03b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3b2b276eb389002d", "level": "note", "message": {"text": "Unused endpoint: POST /workflows/{workflow_id}/unarchive"}, "properties": {"repobilityId": "e17fea9fb59f00e6", "scanner": "scanner-primary", "fingerprint": "3b2b276eb389002d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7e5a7079ad992922", "level": "note", "message": {"text": "Unused endpoint: GET /skill-gap-clusters"}, "properties": {"repobilityId": "ccf262e574ee8c7f", "scanner": "scanner-primary", "fingerprint": "7e5a7079ad992922", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b9352ba76165602c", "level": "note", "message": {"text": "Unused endpoint: POST /visuals"}, "properties": {"repobilityId": "22b7163cde4f6300", "scanner": "scanner-primary", "fingerprint": "b9352ba76165602c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-87b52e10119d170a", "level": "note", "message": {"text": "Unused endpoint: GET /visuals"}, "properties": {"repobilityId": "762230233655b58b", "scanner": "scanner-primary", "fingerprint": "87b52e10119d170a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a3b81fe9d4a50e36", "level": "note", "message": {"text": "Unused endpoint: GET /visuals/{visual_id}"}, "properties": {"repobilityId": "2a9ff4e62b41c3d8", "scanner": "scanner-primary", "fingerprint": "a3b81fe9d4a50e36", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-952db2a9fc7301fb", "level": "note", "message": {"text": "Unused endpoint: PATCH /visuals/{visual_id}"}, "properties": {"repobilityId": "d0ce22b0f963686b", "scanner": "scanner-primary", "fingerprint": "952db2a9fc7301fb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}