{"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-7d1c106873882050", "name": "Possibly dead Python function: save_context", "shortDescription": {"text": "Possibly dead Python function: save_context"}, "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-6dda372a444b4940", "name": "Possibly dead Python function: clear", "shortDescription": {"text": "Possibly dead Python function: clear"}, "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-822fcca3e79cd21d", "name": "Stray `console.log` in TS/JS \u2014 sdk/node/test.ts:4", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 sdk/node/test.ts:4"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-dc9a520960850ac8", "name": "Stray `console.log` in TS/JS \u2014 sdk/node/examples/lifecycle.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 sdk/node/examples/lifecycle.ts:10"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cc3a34526b61e0cd", "name": "Stray `console.log` in TS/JS \u2014 sdk/node/examples/quickstart.ts:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 sdk/node/examples/quickstart.ts:11"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5ab62e81a3270040", "name": "Stray `console.log` in TS/JS \u2014 sdk/node/examples/cognitive-loop.ts:10", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 sdk/node/examples/cognitive-loop.ts:10"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d63da3583b14afc0", "name": "Dockerfile runs as root: Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: 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-ecb3516fdd22a148", "name": "Docker base image is tag-pinned but not digest-pinned: golang:1.24-bookworm", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: golang:1.24-bookworm"}, "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-84019dfd8d98a34d", "name": "Docker base image is tag-pinned but not digest-pinned: debian:bookworm-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: debian:bookworm-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-e2f1cddf8cbe14d3", "name": "Dockerfile pipes a remote installer into a shell", "shortDescription": {"text": "Dockerfile pipes a remote installer into a shell"}, "fullDescription": {"text": "Executing downloaded code during image build gives the remote endpoint build-time code execution. Prefer pinned packages or verify downloaded installers by checksum/signature."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "high", "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-ae80ad687536b413", "name": "Possible secret in internal/auth/bootstrap.go", "shortDescription": {"text": "Possible secret in internal/auth/bootstrap.go"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-1d1e5423b197c029", "name": "Insecure pattern 'cors_wildcard' in internal/mcp/server.go:349", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in internal/mcp/server.go:349"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1b4fb077ee46e60a", "name": "Possible secret in web/e2e/global-setup.ts", "shortDescription": {"text": "Possible secret in web/e2e/global-setup.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-b841c61fdfcff569", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "docker/setup-buildx-action@v3 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-076b03a16e76601d", "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-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/cache@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-46c644c6227e4d4a", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/cache@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1838a141491ce38c", "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-e5245f5925fb135e", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "pypa/gh-action-pypi-publish@release/v1 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-6ce3b24f43cf649e", "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-ad8d3a11634a3294", "name": "Very large file: internal/mcp/handlers.go (1859 lines)", "shortDescription": {"text": "Very large file: internal/mcp/handlers.go (1859 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-85358324c3b1114c", "name": "Very large file: internal/mcp/handlers_test.go (3559 lines)", "shortDescription": {"text": "Very large file: internal/mcp/handlers_test.go (3559 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-2c05b8c743788ff1", "name": "Very large file: internal/replication/coordinator.go (2296 lines)", "shortDescription": {"text": "Very large file: internal/replication/coordinator.go (2296 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-e32f4ee57a1eb9ee", "name": "Very large file: internal/transport/rest/server_test.go (2481 lines)", "shortDescription": {"text": "Very large file: internal/transport/rest/server_test.go (2481 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-a300ca013bccfcd2", "name": "Very large file: internal/transport/rest/server.go (1953 lines)", "shortDescription": {"text": "Very large file: internal/transport/rest/server.go (1953 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-12aea2a4e3ae7235", "name": "Very large file: internal/engine/engine.go (3396 lines)", "shortDescription": {"text": "Very large file: internal/engine/engine.go (3396 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-7b94623d73a8bdc9", "name": "Very large file: internal/engine/engine_test.go (2427 lines)", "shortDescription": {"text": "Very large file: internal/engine/engine_test.go (2427 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-0813658a2347e280", "name": "Very large file: internal/engine/activation/engine.go (2042 lines)", "shortDescription": {"text": "Very large file: internal/engine/activation/engine.go (2042 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-82161f03c0ddd88d", "name": "Very large file: internal/engine/activation/helpers_test.go (2279 lines)", "shortDescription": {"text": "Very large file: internal/engine/activation/helpers_test.go (2279 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-6cbd6a6d73205f90", "name": "Very large file: cmd/muninn/coverage_hardening_test.go (2397 lines)", "shortDescription": {"text": "Very large file: cmd/muninn/coverage_hardening_test.go (2397 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-69ec2dac316c1098", "name": "Very large file: cmd/muninn/server.go (1662 lines)", "shortDescription": {"text": "Very large file: cmd/muninn/server.go (1662 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-4882eafada3aac29", "name": "Very large file: web/static/js/app.js (3120 lines)", "shortDescription": {"text": "Very large file: web/static/js/app.js (3120 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-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 156 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 372 placeholder/mock markers across 57 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-d20cb2f8a992d769", "name": "Commented-code block (5 lines) in web/static/js/app.js:613", "shortDescription": {"text": "Commented-code block (5 lines) in web/static/js/app.js:613"}, "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-2ec9a1ee9b168162", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/app.js:2800", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/app.js:2800"}, "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-7520ef8e8065dbc8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/e2e/cluster_settings.spec.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/e2e/cluster_settings.spec.ts:7"}, "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-abd94d9a229543a2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/e2e/smoke.spec.ts:50", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/e2e/smoke.spec.ts:50"}, "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-45fe572e51997ec9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 web/e2e/settings.spec.ts:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/e2e/settings.spec.ts:41"}, "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-d83e38d1c0a461ff", "name": "Dangling fetch: GET /api/health (web/static/js/app.js:322)", "shortDescription": {"text": "Dangling fetch: GET /api/health (web/static/js/app.js:322)"}, "fullDescription": {"text": "`web/static/js/app.js:322` calls `GET /api/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/health`\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-4647fcafd04a7301", "name": "Dangling fetch: POST /api/hello (web/static/js/app.js:1359)", "shortDescription": {"text": "Dangling fetch: POST /api/hello (web/static/js/app.js:1359)"}, "fullDescription": {"text": "`web/static/js/app.js:1359` calls `POST /api/hello` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/hello`\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-09b001966e451b30", "name": "Dangling fetch: GET /api/admin/cluster/token (web/static/js/app.js:2259)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/cluster/token (web/static/js/app.js:2259)"}, "fullDescription": {"text": "`web/static/js/app.js:2259` calls `GET /api/admin/cluster/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cluster/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2eb70547aab79bf4", "name": "Dangling fetch: POST /api/admin/cluster/enable (web/static/js/app.js:2352)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/cluster/enable (web/static/js/app.js:2352)"}, "fullDescription": {"text": "`web/static/js/app.js:2352` calls `POST /api/admin/cluster/enable` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cluster/enable`\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-af3b2374a28b5b4a", "name": "Dangling fetch: POST /api/admin/cluster/nodes/test (web/static/js/app.js:2381)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/cluster/nodes/test (web/static/js/app.js:2381)"}, "fullDescription": {"text": "`web/static/js/app.js:2381` calls `POST /api/admin/cluster/nodes/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cluster/nodes/test`\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-71400788aefa0976", "name": "Dangling fetch: POST /api/admin/cluster/nodes (web/static/js/app.js:2401)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/cluster/nodes (web/static/js/app.js:2401)"}, "fullDescription": {"text": "`web/static/js/app.js:2401` calls `POST /api/admin/cluster/nodes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cluster/nodes`\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-70de6943259e730a", "name": "Dangling fetch: DELETE /api/admin/cluster/nodes/${this.removeNodeTarget.nodeId}${drain} (web/static/js/app.js:2429)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/cluster/nodes/${this.removeNodeTarget.nodeId}${drain} (web/static/js/app.js:2429)"}, "fullDescription": {"text": "`web/static/js/app.js:2429` calls `DELETE /api/admin/cluster/nodes/${this.removeNodeTarget.nodeId}${drain}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cluster/nodes/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-10da5ac89436efdb", "name": "Dangling fetch: POST /api/admin/cluster/failover (web/static/js/app.js:2452)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/cluster/failover (web/static/js/app.js:2452)"}, "fullDescription": {"text": "`web/static/js/app.js:2452` calls `POST /api/admin/cluster/failover` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cluster/failover`\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-134dd41f7735e216", "name": "Dangling fetch: GET /api/admin/cluster/token (web/static/js/app.js:2499)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/cluster/token (web/static/js/app.js:2499)"}, "fullDescription": {"text": "`web/static/js/app.js:2499` calls `GET /api/admin/cluster/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cluster/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6a4df1196427cd42", "name": "Dangling fetch: POST /api/admin/cluster/token/regenerate (web/static/js/app.js:2509)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/cluster/token/regenerate (web/static/js/app.js:2509)"}, "fullDescription": {"text": "`web/static/js/app.js:2509` calls `POST /api/admin/cluster/token/regenerate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cluster/token/regenerate`\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-2c7ba1240f50ae6f", "name": "Dangling fetch: GET /api/admin/cluster/settings (web/static/js/app.js:2548)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/cluster/settings (web/static/js/app.js:2548)"}, "fullDescription": {"text": "`web/static/js/app.js:2548` calls `GET /api/admin/cluster/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cluster/settings`\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-9153865fbf9d84c2", "name": "Dangling fetch: PUT /api/admin/cluster/settings (web/static/js/app.js:2567)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/cluster/settings (web/static/js/app.js:2567)"}, "fullDescription": {"text": "`web/static/js/app.js:2567` calls `PUT /api/admin/cluster/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cluster/settings`\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-d2353df4bc67adc4", "name": "Dangling fetch: POST /api/admin/cluster/tls/rotate (web/static/js/app.js:2584)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/cluster/tls/rotate (web/static/js/app.js:2584)"}, "fullDescription": {"text": "`web/static/js/app.js:2584` calls `POST /api/admin/cluster/tls/rotate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cluster/tls/rotate`\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-8e0d52caad91f656", "name": "Dangling fetch: GET http://localhost:11434/api/tags (web/static/js/app.js:2979)", "shortDescription": {"text": "Dangling fetch: GET http://localhost:11434/api/tags (web/static/js/app.js:2979)"}, "fullDescription": {"text": "`web/static/js/app.js:2979` calls `GET http://localhost:11434/api/tags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/localhost:11434/api/tags`\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-5f91416dbac9ee64", "name": "Dangling fetch: GET /api/auth/check (web/static/js/app.js:346)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/check (web/static/js/app.js:346)"}, "fullDescription": {"text": "`web/static/js/app.js:346` calls `GET /api/auth/check` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/auth/check`\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-77ce896fc1579dc2", "name": "Dangling fetch: POST /api/auth/logout (web/static/js/app.js:376)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/logout (web/static/js/app.js:376)"}, "fullDescription": {"text": "`web/static/js/app.js:376` calls `POST /api/auth/logout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/auth/logout`\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-92a9bed1c7f9366b", "name": "Dangling fetch: PUT /api/admin/password (web/static/js/app.js:389)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/password (web/static/js/app.js:389)"}, "fullDescription": {"text": "`web/static/js/app.js:389` calls `PUT /api/admin/password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/admin/password`\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-e84a903291199110", "name": "Dangling fetch: GET /api/workers (web/static/js/app.js:677)", "shortDescription": {"text": "Dangling fetch: GET /api/workers (web/static/js/app.js:677)"}, "fullDescription": {"text": "`web/static/js/app.js:677` calls `GET /api/workers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/workers`\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-7629d4213b9ea064", "name": "Dangling fetch: GET /api/vaults (web/static/js/app.js:772)", "shortDescription": {"text": "Dangling fetch: GET /api/vaults (web/static/js/app.js:772)"}, "fullDescription": {"text": "`web/static/js/app.js:772` calls `GET /api/vaults` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/vaults`\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-f7f76976669078c8", "name": "Dangling fetch: GET /api/vaults/stats (web/static/js/app.js:791)", "shortDescription": {"text": "Dangling fetch: GET /api/vaults/stats (web/static/js/app.js:791)"}, "fullDescription": {"text": "`web/static/js/app.js:791` calls `GET /api/vaults/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/vaults/stats`\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-ce315a738ea6ce15", "name": "Dangling fetch: POST /api/admin/backup (web/static/js/app.js:1828)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/backup (web/static/js/app.js:1828)"}, "fullDescription": {"text": "`web/static/js/app.js:1828` calls `POST /api/admin/backup` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/admin/backup`\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-9dddeafad4593587", "name": "Dangling fetch: GET /api/admin/observability (web/static/js/app.js:1843)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/observability (web/static/js/app.js:1843)"}, "fullDescription": {"text": "`web/static/js/app.js:1843` calls `GET /api/admin/observability` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/admin/observability`\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-c5a09c9b31444895", "name": "Dangling fetch: GET /api/admin/embed/status (web/static/js/app.js:1852)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/embed/status (web/static/js/app.js:1852)"}, "fullDescription": {"text": "`web/static/js/app.js:1852` calls `GET /api/admin/embed/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/admin/embed/status`\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-545eda5012af978b", "name": "Dangling fetch: GET /api/admin/mcp-info (web/static/js/app.js:1875)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/mcp-info (web/static/js/app.js:1875)"}, "fullDescription": {"text": "`web/static/js/app.js:1875` calls `GET /api/admin/mcp-info` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/admin/mcp-info`\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-a8e5d9e216f456db", "name": "Dangling fetch: POST /api/admin/keys (web/static/js/app.js:1898)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/keys (web/static/js/app.js:1898)"}, "fullDescription": {"text": "`web/static/js/app.js:1898` calls `POST /api/admin/keys` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/admin/keys`\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-65cedfbfe7713d8f", "name": "Dangling fetch: GET /api/admin/plugins (web/static/js/app.js:1922)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/plugins (web/static/js/app.js:1922)"}, "fullDescription": {"text": "`web/static/js/app.js:1922` calls `GET /api/admin/plugins` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/admin/plugins`\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-e906e7292e4bfdcc", "name": "Dangling fetch: GET /api/admin/plugin-config (web/static/js/app.js:1930)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/plugin-config (web/static/js/app.js:1930)"}, "fullDescription": {"text": "`web/static/js/app.js:1930` calls `GET /api/admin/plugin-config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/admin/plugin-config`\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-475624e42325b0ea", "name": "Dangling fetch: GET /api/workers (web/static/js/app.js:1948)", "shortDescription": {"text": "Dangling fetch: GET /api/workers (web/static/js/app.js:1948)"}, "fullDescription": {"text": "`web/static/js/app.js:1948` calls `GET /api/workers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/workers`\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-01ce6d946c8b1ed2", "name": "Dangling fetch: GET /v1/cluster/info (web/static/js/app.js:2251)", "shortDescription": {"text": "Dangling fetch: GET /v1/cluster/info (web/static/js/app.js:2251)"}, "fullDescription": {"text": "`web/static/js/app.js:2251` calls `GET /v1/cluster/info` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/cluster/info`\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-09f0ba6a366e03cd", "name": "Dangling fetch: GET /v1/cluster/nodes (web/static/js/app.js:2276)", "shortDescription": {"text": "Dangling fetch: GET /v1/cluster/nodes (web/static/js/app.js:2276)"}, "fullDescription": {"text": "`web/static/js/app.js:2276` calls `GET /v1/cluster/nodes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/cluster/nodes`\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-a85b5e69ca29163f", "name": "Dangling fetch: GET /v1/cluster/health (web/static/js/app.js:2277)", "shortDescription": {"text": "Dangling fetch: GET /v1/cluster/health (web/static/js/app.js:2277)"}, "fullDescription": {"text": "`web/static/js/app.js:2277` calls `GET /v1/cluster/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/cluster/health`\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-c465a4bf0e3a0b77", "name": "Dangling fetch: GET /v1/cluster/health (web/static/js/app.js:2303)", "shortDescription": {"text": "Dangling fetch: GET /v1/cluster/health (web/static/js/app.js:2303)"}, "fullDescription": {"text": "`web/static/js/app.js:2303` calls `GET /v1/cluster/health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/cluster/health`\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-44de5869297975e0", "name": "Dangling fetch: GET /v1/cluster/cognitive/consistency (web/static/js/app.js:2311)", "shortDescription": {"text": "Dangling fetch: GET /v1/cluster/cognitive/consistency (web/static/js/app.js:2311)"}, "fullDescription": {"text": "`web/static/js/app.js:2311` calls `GET /v1/cluster/cognitive/consistency` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/cluster/cognitive/consistency`\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-1732d9714fa7898b", "name": "Dangling fetch: PUT /api/admin/plugin-config (web/static/js/app.js:2667)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/plugin-config (web/static/js/app.js:2667)"}, "fullDescription": {"text": "`web/static/js/app.js:2667` calls `PUT /api/admin/plugin-config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:apiCall\nNormalized path used for matching: `/admin/plugin-config`\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-a824b581772d6db8", "name": "Dangling fetch: GET /api/admin/cluster/settings (web/e2e/cluster_settings.spec.ts:7)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/cluster/settings (web/e2e/cluster_settings.spec.ts:7)"}, "fullDescription": {"text": "`web/e2e/cluster_settings.spec.ts:7` calls `GET /api/admin/cluster/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cluster/settings`\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-f320e82954bb7bfa", "name": "Dangling fetch: PUT /api/admin/cluster/settings (web/e2e/cluster_settings.spec.ts:23)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/cluster/settings (web/e2e/cluster_settings.spec.ts:23)"}, "fullDescription": {"text": "`web/e2e/cluster_settings.spec.ts:23` calls `PUT /api/admin/cluster/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cluster/settings`\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-cf9a21124453273b", "name": "Dangling fetch: GET /api/admin/cluster/settings (web/e2e/cluster_settings.spec.ts:37)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/cluster/settings (web/e2e/cluster_settings.spec.ts:37)"}, "fullDescription": {"text": "`web/e2e/cluster_settings.spec.ts:37` calls `GET /api/admin/cluster/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cluster/settings`\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-5fdb6814b74455f2", "name": "Dangling fetch: PUT /api/admin/cluster/settings (web/e2e/cluster_settings.spec.ts:49)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/cluster/settings (web/e2e/cluster_settings.spec.ts:49)"}, "fullDescription": {"text": "`web/e2e/cluster_settings.spec.ts:49` calls `PUT /api/admin/cluster/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cluster/settings`\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-39bdcf5bfa6fe449", "name": "Dangling fetch: GET /api/admin/cluster/settings (web/e2e/cluster_settings.spec.ts:57)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/cluster/settings (web/e2e/cluster_settings.spec.ts:57)"}, "fullDescription": {"text": "`web/e2e/cluster_settings.spec.ts:57` calls `GET /api/admin/cluster/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cluster/settings`\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-9b64edb2830bedd2", "name": "Dangling fetch: PUT /api/admin/cluster/settings (web/e2e/cluster_settings.spec.ts:92)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/cluster/settings (web/e2e/cluster_settings.spec.ts:92)"}, "fullDescription": {"text": "`web/e2e/cluster_settings.spec.ts:92` calls `PUT /api/admin/cluster/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cluster/settings`\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-a9012fb64414f2b5", "name": "Dangling fetch: GET /api/admin/plugin-config (web/e2e/smoke.spec.ts:50)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/plugin-config (web/e2e/smoke.spec.ts:50)"}, "fullDescription": {"text": "`web/e2e/smoke.spec.ts:50` calls `GET /api/admin/plugin-config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/plugin-config`\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-82de19a8b3654b79", "name": "Dangling fetch: GET /api/admin/plugin-config (web/e2e/settings.spec.ts:41)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/plugin-config (web/e2e/settings.spec.ts:41)"}, "fullDescription": {"text": "`web/e2e/settings.spec.ts:41` calls `GET /api/admin/plugin-config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/plugin-config`\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}}]}}, "automationDetails": {"id": "repobility/19110"}, "properties": {"repository": "scrypster/muninndb", "repoUrl": "https://github.com/scrypster/muninndb", "branch": "main"}, "results": [{"ruleId": "scanner-7d1c106873882050", "level": "note", "message": {"text": "Possibly dead Python function: save_context"}, "properties": {"repobilityId": "06561821d1007299", "scanner": "scanner-primary", "fingerprint": "7d1c106873882050", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sdk/python/muninn/langchain.py:133"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6dda372a444b4940", "level": "note", "message": {"text": "Possibly dead Python function: clear"}, "properties": {"repobilityId": "6a258a943234091d", "scanner": "scanner-primary", "fingerprint": "6dda372a444b4940", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sdk/python/muninn/langchain.py:151"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-822fcca3e79cd21d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 sdk/node/test.ts:4"}, "properties": {"repobilityId": "9fa3d3abe1a4d56b", "scanner": "scanner-primary", "fingerprint": "822fcca3e79cd21d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-dc9a520960850ac8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 sdk/node/examples/lifecycle.ts:10"}, "properties": {"repobilityId": "e2c4753ea5dd7e68", "scanner": "scanner-primary", "fingerprint": "dc9a520960850ac8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cc3a34526b61e0cd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 sdk/node/examples/quickstart.ts:11"}, "properties": {"repobilityId": "c4c5a379e6ee8c9a", "scanner": "scanner-primary", "fingerprint": "cc3a34526b61e0cd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5ab62e81a3270040", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 sdk/node/examples/cognitive-loop.ts:10"}, "properties": {"repobilityId": "465f19142e0b0096", "scanner": "scanner-primary", "fingerprint": "5ab62e81a3270040", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d63da3583b14afc0", "level": "warning", "message": {"text": "Dockerfile runs as root: Dockerfile"}, "properties": {"repobilityId": "a2ed1bd120e507db", "scanner": "scanner-primary", "fingerprint": "d63da3583b14afc0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-ecb3516fdd22a148", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: golang:1.24-bookworm"}, "properties": {"repobilityId": "196975d322693766", "scanner": "scanner-primary", "fingerprint": "ecb3516fdd22a148", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-84019dfd8d98a34d", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: debian:bookworm-slim"}, "properties": {"repobilityId": "915ecf9de544b865", "scanner": "scanner-primary", "fingerprint": "84019dfd8d98a34d", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-e2f1cddf8cbe14d3", "level": "error", "message": {"text": "Dockerfile pipes a remote installer into a shell"}, "properties": {"repobilityId": "d21aa1249a6c42d3", "scanner": "scanner-primary", "fingerprint": "e2f1cddf8cbe14d3", "layer": "hardware", "severity": "high", "confidence": 1.0, "tags": ["supply-chain", "docker", "remote-installer"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 15}}}]}, {"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-ae80ad687536b413", "level": "error", "message": {"text": "Possible secret in internal/auth/bootstrap.go"}, "properties": {"repobilityId": "1fe015a06200fedd", "scanner": "scanner-primary", "fingerprint": "ae80ad687536b413", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "internal/auth/bootstrap.go"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-1d1e5423b197c029", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in internal/mcp/server.go:349"}, "properties": {"repobilityId": "41ca29c4251f644e", "scanner": "scanner-primary", "fingerprint": "1d1e5423b197c029", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "internal/mcp/server.go"}, "region": {"startLine": 349}}}]}, {"ruleId": "scanner-1b4fb077ee46e60a", "level": "error", "message": {"text": "Possible secret in web/e2e/global-setup.ts"}, "properties": {"repobilityId": "2c06d5657215968e", "scanner": "scanner-primary", "fingerprint": "1b4fb077ee46e60a", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/e2e/global-setup.ts"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-b841c61fdfcff569", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "92a252f237fefd54", "scanner": "scanner-primary", "fingerprint": "b841c61fdfcff569", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-publish.yml"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-b841c61fdfcff569", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9865da7d2b2ff924", "scanner": "scanner-primary", "fingerprint": "b841c61fdfcff569", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-publish.yml"}, "region": {"startLine": 39}}}]}, {"ruleId": "scanner-b841c61fdfcff569", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3ced3a497e6628d3", "scanner": "scanner-primary", "fingerprint": "b841c61fdfcff569", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-publish.yml"}, "region": {"startLine": 47}}}]}, {"ruleId": "scanner-b841c61fdfcff569", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "81e5f06397892af9", "scanner": "scanner-primary", "fingerprint": "b841c61fdfcff569", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-publish.yml"}, "region": {"startLine": 53}}}]}, {"ruleId": "scanner-b841c61fdfcff569", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5f0d43a012bcd0ff", "scanner": "scanner-primary", "fingerprint": "b841c61fdfcff569", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-publish.yml"}, "region": {"startLine": 70}}}]}, {"ruleId": "scanner-b841c61fdfcff569", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3ae64070fc791eee", "scanner": "scanner-primary", "fingerprint": "b841c61fdfcff569", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-publish.yml"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-b841c61fdfcff569", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "92a252f237fefd54", "scanner": "scanner-primary", "fingerprint": "b841c61fdfcff569", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-publish.yml"}, "region": {"startLine": 90}}}]}, {"ruleId": "scanner-b841c61fdfcff569", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "9865da7d2b2ff924", "scanner": "scanner-primary", "fingerprint": "b841c61fdfcff569", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-publish.yml"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-b841c61fdfcff569", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "3ced3a497e6628d3", "scanner": "scanner-primary", "fingerprint": "b841c61fdfcff569", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-publish.yml"}, "region": {"startLine": 101}}}]}, {"ruleId": "scanner-076b03a16e76601d", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "a42462ccbe3d06f2", "scanner": "scanner-primary", "fingerprint": "076b03a16e76601d", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/docker-publish.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "54c8f1b47dd62535", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bd7f3c1c34d83159", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 76}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "54c8f1b47dd62535", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 96}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "54c8f1b47dd62535", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 135}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "54c8f1b47dd62535", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 233}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "54c8f1b47dd62535", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 322}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bd7f3c1c34d83159", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 351}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e040b5c136c9f9b8", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5ab0c5bd71e63ad8", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "e040b5c136c9f9b8", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 120}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "5ab0c5bd71e63ad8", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 162}}}]}, {"ruleId": "scanner-46c644c6227e4d4a", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "2644034c718fb80d", "scanner": "scanner-primary", "fingerprint": "46c644c6227e4d4a", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 234}}}]}, {"ruleId": "scanner-1838a141491ce38c", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "b8fd4f5048f96576", "scanner": "scanner-primary", "fingerprint": "1838a141491ce38c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/release.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e5245f5925fb135e", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "b19f339b1a259769", "scanner": "scanner-primary", "fingerprint": "e5245f5925fb135e", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-sdk.yml"}, "region": {"startLine": 72}}}]}, {"ruleId": "scanner-6ce3b24f43cf649e", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "011d0afdcc8813d1", "scanner": "scanner-primary", "fingerprint": "6ce3b24f43cf649e", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/publish-sdk.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ad8d3a11634a3294", "level": "note", "message": {"text": "Very large file: internal/mcp/handlers.go (1859 lines)"}, "properties": {"repobilityId": "fc4df9a3be467a4d", "scanner": "scanner-primary", "fingerprint": "ad8d3a11634a3294", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-85358324c3b1114c", "level": "note", "message": {"text": "Very large file: internal/mcp/handlers_test.go (3559 lines)"}, "properties": {"repobilityId": "3ee5a1b582b97059", "scanner": "scanner-primary", "fingerprint": "85358324c3b1114c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2c05b8c743788ff1", "level": "note", "message": {"text": "Very large file: internal/replication/coordinator.go (2296 lines)"}, "properties": {"repobilityId": "3ef547c841a4f86e", "scanner": "scanner-primary", "fingerprint": "2c05b8c743788ff1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e32f4ee57a1eb9ee", "level": "note", "message": {"text": "Very large file: internal/transport/rest/server_test.go (2481 lines)"}, "properties": {"repobilityId": "2f91affc73446d21", "scanner": "scanner-primary", "fingerprint": "e32f4ee57a1eb9ee", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a300ca013bccfcd2", "level": "note", "message": {"text": "Very large file: internal/transport/rest/server.go (1953 lines)"}, "properties": {"repobilityId": "cc0cb2cb6b182046", "scanner": "scanner-primary", "fingerprint": "a300ca013bccfcd2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-12aea2a4e3ae7235", "level": "note", "message": {"text": "Very large file: internal/engine/engine.go (3396 lines)"}, "properties": {"repobilityId": "a66620cc56134f57", "scanner": "scanner-primary", "fingerprint": "12aea2a4e3ae7235", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7b94623d73a8bdc9", "level": "note", "message": {"text": "Very large file: internal/engine/engine_test.go (2427 lines)"}, "properties": {"repobilityId": "cb640f4c10ad613b", "scanner": "scanner-primary", "fingerprint": "7b94623d73a8bdc9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0813658a2347e280", "level": "note", "message": {"text": "Very large file: internal/engine/activation/engine.go (2042 lines)"}, "properties": {"repobilityId": "62bf78d2dd177b83", "scanner": "scanner-primary", "fingerprint": "0813658a2347e280", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-82161f03c0ddd88d", "level": "note", "message": {"text": "Very large file: internal/engine/activation/helpers_test.go (2279 lines)"}, "properties": {"repobilityId": "1c4cd62dc0786bf9", "scanner": "scanner-primary", "fingerprint": "82161f03c0ddd88d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6cbd6a6d73205f90", "level": "note", "message": {"text": "Very large file: cmd/muninn/coverage_hardening_test.go (2397 lines)"}, "properties": {"repobilityId": "b2771a52d52eceaf", "scanner": "scanner-primary", "fingerprint": "6cbd6a6d73205f90", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-69ec2dac316c1098", "level": "note", "message": {"text": "Very large file: cmd/muninn/server.go (1662 lines)"}, "properties": {"repobilityId": "d732572fa489f624", "scanner": "scanner-primary", "fingerprint": "69ec2dac316c1098", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4882eafada3aac29", "level": "note", "message": {"text": "Very large file: web/static/js/app.js (3120 lines)"}, "properties": {"repobilityId": "e4528485b2a88b95", "scanner": "scanner-primary", "fingerprint": "4882eafada3aac29", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "a4016eddb61c013a", "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": "41510f2466239f29", "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": "209d56a093225b6c", "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": "4b0aca3ae65fef0b", "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": "758304ec9bc0c10d", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-d20cb2f8a992d769", "level": "none", "message": {"text": "Commented-code block (5 lines) in web/static/js/app.js:613"}, "properties": {"repobilityId": "96fefbd0dcd77451", "scanner": "scanner-primary", "fingerprint": "d20cb2f8a992d769", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2ec9a1ee9b168162", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/static/js/app.js:2800"}, "properties": {"repobilityId": "176c9ce5e0428479", "scanner": "scanner-primary", "fingerprint": "2ec9a1ee9b168162", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7520ef8e8065dbc8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/e2e/cluster_settings.spec.ts:7"}, "properties": {"repobilityId": "b6d3490ec300450e", "scanner": "scanner-primary", "fingerprint": "7520ef8e8065dbc8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-abd94d9a229543a2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/e2e/smoke.spec.ts:50"}, "properties": {"repobilityId": "3b2717bc3f839f63", "scanner": "scanner-primary", "fingerprint": "abd94d9a229543a2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-45fe572e51997ec9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 web/e2e/settings.spec.ts:41"}, "properties": {"repobilityId": "dd7c8d72c87c24bb", "scanner": "scanner-primary", "fingerprint": "45fe572e51997ec9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d83e38d1c0a461ff", "level": "error", "message": {"text": "Dangling fetch: GET /api/health (web/static/js/app.js:322)"}, "properties": {"repobilityId": "ac90af2418d9a577", "scanner": "scanner-primary", "fingerprint": "d83e38d1c0a461ff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4647fcafd04a7301", "level": "error", "message": {"text": "Dangling fetch: POST /api/hello (web/static/js/app.js:1359)"}, "properties": {"repobilityId": "0ea9b8fdd6193e43", "scanner": "scanner-primary", "fingerprint": "4647fcafd04a7301", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-09b001966e451b30", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/cluster/token (web/static/js/app.js:2259)"}, "properties": {"repobilityId": "1a46b00af4462f53", "scanner": "scanner-primary", "fingerprint": "09b001966e451b30", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2eb70547aab79bf4", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/cluster/enable (web/static/js/app.js:2352)"}, "properties": {"repobilityId": "496c646a109a9f32", "scanner": "scanner-primary", "fingerprint": "2eb70547aab79bf4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-af3b2374a28b5b4a", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/cluster/nodes/test (web/static/js/app.js:2381)"}, "properties": {"repobilityId": "2d470a16f2c31f58", "scanner": "scanner-primary", "fingerprint": "af3b2374a28b5b4a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-71400788aefa0976", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/cluster/nodes (web/static/js/app.js:2401)"}, "properties": {"repobilityId": "47dba758c6172e4d", "scanner": "scanner-primary", "fingerprint": "71400788aefa0976", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-70de6943259e730a", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/cluster/nodes/${this.removeNodeTarget.nodeId}${drain} (web/static/js/app.js:2429)"}, "properties": {"repobilityId": "244a13a5f2c7d434", "scanner": "scanner-primary", "fingerprint": "70de6943259e730a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-10da5ac89436efdb", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/cluster/failover (web/static/js/app.js:2452)"}, "properties": {"repobilityId": "3d60401bfbdbba73", "scanner": "scanner-primary", "fingerprint": "10da5ac89436efdb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-134dd41f7735e216", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/cluster/token (web/static/js/app.js:2499)"}, "properties": {"repobilityId": "f6f0a45632fe12dc", "scanner": "scanner-primary", "fingerprint": "134dd41f7735e216", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6a4df1196427cd42", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/cluster/token/regenerate (web/static/js/app.js:2509)"}, "properties": {"repobilityId": "31a5582bbc45a170", "scanner": "scanner-primary", "fingerprint": "6a4df1196427cd42", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c7ba1240f50ae6f", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/cluster/settings (web/static/js/app.js:2548)"}, "properties": {"repobilityId": "09398d54c5cb4a93", "scanner": "scanner-primary", "fingerprint": "2c7ba1240f50ae6f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9153865fbf9d84c2", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/cluster/settings (web/static/js/app.js:2567)"}, "properties": {"repobilityId": "646e991fe0d5f7b2", "scanner": "scanner-primary", "fingerprint": "9153865fbf9d84c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d2353df4bc67adc4", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/cluster/tls/rotate (web/static/js/app.js:2584)"}, "properties": {"repobilityId": "072d639a0763e996", "scanner": "scanner-primary", "fingerprint": "d2353df4bc67adc4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8e0d52caad91f656", "level": "error", "message": {"text": "Dangling fetch: GET http://localhost:11434/api/tags (web/static/js/app.js:2979)"}, "properties": {"repobilityId": "9ffd138c61bfa417", "scanner": "scanner-primary", "fingerprint": "8e0d52caad91f656", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5f91416dbac9ee64", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/check (web/static/js/app.js:346)"}, "properties": {"repobilityId": "35991c1756f09299", "scanner": "scanner-primary", "fingerprint": "5f91416dbac9ee64", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-77ce896fc1579dc2", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/logout (web/static/js/app.js:376)"}, "properties": {"repobilityId": "b002c51ab89b9ea5", "scanner": "scanner-primary", "fingerprint": "77ce896fc1579dc2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-92a9bed1c7f9366b", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/password (web/static/js/app.js:389)"}, "properties": {"repobilityId": "140c89ea6839ae6d", "scanner": "scanner-primary", "fingerprint": "92a9bed1c7f9366b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-e84a903291199110", "level": "error", "message": {"text": "Dangling fetch: GET /api/workers (web/static/js/app.js:677)"}, "properties": {"repobilityId": "a6a149d5f4740e8f", "scanner": "scanner-primary", "fingerprint": "e84a903291199110", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-7629d4213b9ea064", "level": "error", "message": {"text": "Dangling fetch: GET /api/vaults (web/static/js/app.js:772)"}, "properties": {"repobilityId": "ce67ddd4c7e7f7bf", "scanner": "scanner-primary", "fingerprint": "7629d4213b9ea064", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-f7f76976669078c8", "level": "error", "message": {"text": "Dangling fetch: GET /api/vaults/stats (web/static/js/app.js:791)"}, "properties": {"repobilityId": "c30c8d587af7b956", "scanner": "scanner-primary", "fingerprint": "f7f76976669078c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-ce315a738ea6ce15", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/backup (web/static/js/app.js:1828)"}, "properties": {"repobilityId": "f7c0a05784d5ec46", "scanner": "scanner-primary", "fingerprint": "ce315a738ea6ce15", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-9dddeafad4593587", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/observability (web/static/js/app.js:1843)"}, "properties": {"repobilityId": "0f48d256c7b4fd8e", "scanner": "scanner-primary", "fingerprint": "9dddeafad4593587", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-c5a09c9b31444895", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/embed/status (web/static/js/app.js:1852)"}, "properties": {"repobilityId": "6317480886f64c07", "scanner": "scanner-primary", "fingerprint": "c5a09c9b31444895", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-545eda5012af978b", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/mcp-info (web/static/js/app.js:1875)"}, "properties": {"repobilityId": "4994c2f84f7e350d", "scanner": "scanner-primary", "fingerprint": "545eda5012af978b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-a8e5d9e216f456db", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/keys (web/static/js/app.js:1898)"}, "properties": {"repobilityId": "4e8dcaabe7c5a5f9", "scanner": "scanner-primary", "fingerprint": "a8e5d9e216f456db", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-65cedfbfe7713d8f", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/plugins (web/static/js/app.js:1922)"}, "properties": {"repobilityId": "ce578c2b6d364adc", "scanner": "scanner-primary", "fingerprint": "65cedfbfe7713d8f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-e906e7292e4bfdcc", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/plugin-config (web/static/js/app.js:1930)"}, "properties": {"repobilityId": "9603747d7b3db017", "scanner": "scanner-primary", "fingerprint": "e906e7292e4bfdcc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-475624e42325b0ea", "level": "error", "message": {"text": "Dangling fetch: GET /api/workers (web/static/js/app.js:1948)"}, "properties": {"repobilityId": "18cdabf8cf1bc78f", "scanner": "scanner-primary", "fingerprint": "475624e42325b0ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-01ce6d946c8b1ed2", "level": "error", "message": {"text": "Dangling fetch: GET /v1/cluster/info (web/static/js/app.js:2251)"}, "properties": {"repobilityId": "a72141f8d948f1a4", "scanner": "scanner-primary", "fingerprint": "01ce6d946c8b1ed2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-09f0ba6a366e03cd", "level": "error", "message": {"text": "Dangling fetch: GET /v1/cluster/nodes (web/static/js/app.js:2276)"}, "properties": {"repobilityId": "bc1191ff6ebb1206", "scanner": "scanner-primary", "fingerprint": "09f0ba6a366e03cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-a85b5e69ca29163f", "level": "error", "message": {"text": "Dangling fetch: GET /v1/cluster/health (web/static/js/app.js:2277)"}, "properties": {"repobilityId": "606fbe4b666b6716", "scanner": "scanner-primary", "fingerprint": "a85b5e69ca29163f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-c465a4bf0e3a0b77", "level": "error", "message": {"text": "Dangling fetch: GET /v1/cluster/health (web/static/js/app.js:2303)"}, "properties": {"repobilityId": "9fc6e8b23b087f63", "scanner": "scanner-primary", "fingerprint": "c465a4bf0e3a0b77", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-44de5869297975e0", "level": "error", "message": {"text": "Dangling fetch: GET /v1/cluster/cognitive/consistency (web/static/js/app.js:2311)"}, "properties": {"repobilityId": "c46d09eac963e56d", "scanner": "scanner-primary", "fingerprint": "44de5869297975e0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-1732d9714fa7898b", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/plugin-config (web/static/js/app.js:2667)"}, "properties": {"repobilityId": "5d5b00c4abcb5a08", "scanner": "scanner-primary", "fingerprint": "1732d9714fa7898b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:apiCall"]}}, {"ruleId": "scanner-a824b581772d6db8", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/cluster/settings (web/e2e/cluster_settings.spec.ts:7)"}, "properties": {"repobilityId": "3531d01c5ce5818a", "scanner": "scanner-primary", "fingerprint": "a824b581772d6db8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f320e82954bb7bfa", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/cluster/settings (web/e2e/cluster_settings.spec.ts:23)"}, "properties": {"repobilityId": "fe3215d16ebc7642", "scanner": "scanner-primary", "fingerprint": "f320e82954bb7bfa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf9a21124453273b", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/cluster/settings (web/e2e/cluster_settings.spec.ts:37)"}, "properties": {"repobilityId": "84b21abbf12a7677", "scanner": "scanner-primary", "fingerprint": "cf9a21124453273b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5fdb6814b74455f2", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/cluster/settings (web/e2e/cluster_settings.spec.ts:49)"}, "properties": {"repobilityId": "dd17e413ed519b92", "scanner": "scanner-primary", "fingerprint": "5fdb6814b74455f2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-39bdcf5bfa6fe449", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/cluster/settings (web/e2e/cluster_settings.spec.ts:57)"}, "properties": {"repobilityId": "431540269775af7b", "scanner": "scanner-primary", "fingerprint": "39bdcf5bfa6fe449", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b64edb2830bedd2", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/cluster/settings (web/e2e/cluster_settings.spec.ts:92)"}, "properties": {"repobilityId": "63df1ae926fd6dbd", "scanner": "scanner-primary", "fingerprint": "9b64edb2830bedd2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a9012fb64414f2b5", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/plugin-config (web/e2e/smoke.spec.ts:50)"}, "properties": {"repobilityId": "1d0ad546dec37ae1", "scanner": "scanner-primary", "fingerprint": "a9012fb64414f2b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-82de19a8b3654b79", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/plugin-config (web/e2e/settings.spec.ts:41)"}, "properties": {"repobilityId": "adf160c6c50ee333", "scanner": "scanner-primary", "fingerprint": "82de19a8b3654b79", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}]}]}