{"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-e6c7afc57d4527eb", "name": "Stray `console.log` in TS/JS \u2014 server.js:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server.js:72"}, "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-8c61360b13e47672", "name": "Icon-only button without accessible name \u2014 ui/src/components/ArchHelpModal.vue:6", "shortDescription": {"text": "Icon-only button without accessible name \u2014 ui/src/components/ArchHelpModal.vue:6"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8f1803292571768d", "name": "Icon-only button without accessible name \u2014 ui/src/components/ModelEditor.vue:302", "shortDescription": {"text": "Icon-only button without accessible name \u2014 ui/src/components/ModelEditor.vue:302"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6fa2fb76b9b9e6b7", "name": "Stray `console.log` in TS/JS \u2014 src/routes/generate.js:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/routes/generate.js:62"}, "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-ac786d3f51deced9", "name": "Stray `console.log` in TS/JS \u2014 src/services/skillRefresher.js:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/skillRefresher.js:45"}, "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-b52dba371387a714", "name": "Stray `console.log` in TS/JS \u2014 src/services/comfyui.js:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/services/comfyui.js:74"}, "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-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7642401110c571bb", "name": "Insecure pattern 'vue_v_html' in ui/src/components/ArchHelpModal.vue:11", "shortDescription": {"text": "Insecure pattern 'vue_v_html' in ui/src/components/ArchHelpModal.vue:11"}, "fullDescription": {"text": "Found a known-risky pattern (vue_v_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 32 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd019494e7974720", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/queue-routes.test.js:39", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/queue-routes.test.js: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-49b8d636e80113d2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/upscale.test.js:124", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/upscale.test.js:124"}, "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-0b4bacbfad805b9c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/pose-fallback.test.js:87", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/pose-fallback.test.js:87"}, "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-2de6b804d0f0e974", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/capabilities.test.js:88", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/capabilities.test.js:88"}, "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-55487eee3fd36fea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/references.test.js:80", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/references.test.js:80"}, "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-a513d252f959c461", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/video.test.js:121", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/video.test.js:121"}, "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-042a45964954d420", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/sdapi.test.js:84", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/sdapi.test.js:84"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b0d3d7636229898c", "name": "Legacy-named symbol `anima_v1` in test/integration/loras.test.js:24", "shortDescription": {"text": "Legacy-named symbol `anima_v1` in test/integration/loras.test.js: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-16816e883e44c2d0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/generate.test.js:148", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/generate.test.js:148"}, "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-770826e6072c0a42", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/archHelp.test.js:54", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/archHelp.test.js:54"}, "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-2153484a9d7b5183", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/loras-pose.test.js:116", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/loras-pose.test.js:116"}, "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-75dd6a63a003f20d", "name": "Legacy-named symbol `sd_v1` in test/unit/loraMeta.test.js:7", "shortDescription": {"text": "Legacy-named symbol `sd_v1` in test/unit/loraMeta.test.js:7"}, "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-57b307ffc7ef33ea", "name": "Legacy-named symbol `sdxl_base_v1` in test/unit/comfyui-assets.test.js:35", "shortDescription": {"text": "Legacy-named symbol `sdxl_base_v1` in test/unit/comfyui-assets.test.js:35"}, "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-f7c5dff9c5019219", "name": "`fetch()` without try/.catch or AbortSignal \u2014 test/support/fakeServers.js:243", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/support/fakeServers.js:243"}, "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-9bd5a6d831b364e7", "name": "Legacy-named symbol `sd_v1` in src/lib/loraMeta.js:9", "shortDescription": {"text": "Legacy-named symbol `sd_v1` in src/lib/loraMeta.js: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-9e25419b523c8d03", "name": "Commented-code block (5 lines) in src/lib/loraTools.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/loraTools.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f10838f3e62755a", "name": "Commented-code block (6 lines) in src/routes/generate.js:139", "shortDescription": {"text": "Commented-code block (6 lines) in src/routes/generate.js:139"}, "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-d9fbce79a6167c82", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/routes/generate.js:160", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/routes/generate.js:160"}, "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-362d74539bbb2e14", "name": "Commented-code block (17 lines) in src/routes/sdapi.js:6", "shortDescription": {"text": "Commented-code block (17 lines) in src/routes/sdapi.js:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a3fc3960f29e71fc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/steps/upscale.js:24", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/steps/upscale.js:24"}, "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-9e1918a0a5319312", "name": "Commented-code block (5 lines) in src/steps/generate.js:102", "shortDescription": {"text": "Commented-code block (5 lines) in src/steps/generate.js:102"}, "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-112d3d5d2b18d5a1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/steps/generate.js:112", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/steps/generate.js:112"}, "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-6f490ff2526c61e0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/steps/video.js:27", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/steps/video.js: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-191efc2a65685c9d", "name": "Commented-code block (9 lines) in src/services/agent.js:5", "shortDescription": {"text": "Commented-code block (9 lines) in src/services/agent.js:5"}, "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-9a145928d517cb8a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/ollama.js:8", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/ollama.js:8"}, "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-b7641a4da139ad10", "name": "Commented-code block (5 lines) in src/services/llm.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/services/llm.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df57978b42c1ec44", "name": "Commented-code block (6 lines) in src/services/pose.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/services/pose.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0600dafb7f013e57", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/pose.js:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/pose.js:76"}, "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-65dc354444eac2ff", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/comfyui.js:20", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/comfyui.js:20"}, "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-61ad7fdcc78c36b1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/providers/ollama.js:5", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/providers/ollama.js:5"}, "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-679590cad826919d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/providers/openai.js:40", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/providers/openai.js:40"}, "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-d9bfe368955b3585", "name": "Commented-code block (6 lines) in src/workflows/lib/preprocessors.js:6", "shortDescription": {"text": "Commented-code block (6 lines) in src/workflows/lib/preprocessors.js:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e948b4f86236b5b2", "name": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/queue (test/integration/queue-routes.test.js:39)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/queue (test/integration/queue-routes.test.js:39)"}, "fullDescription": {"text": "`test/integration/queue-routes.test.js:39` calls `GET http://127.0.0.1:${appPort}/api/queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/queue`\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-84cc48672e1de457", "name": "Dangling fetch: DELETE http://127.0.0.1:${appPort}/api/queue/nonexistent-id (test/integration/queue-routes.test.js:48)", "shortDescription": {"text": "Dangling fetch: DELETE http://127.0.0.1:${appPort}/api/queue/nonexistent-id (test/integration/queue-routes.test.js:48)"}, "fullDescription": {"text": "`test/integration/queue-routes.test.js:48` calls `DELETE http://127.0.0.1:${appPort}/api/queue/nonexistent-id` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/queue/nonexistent-id`\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-dd26e57d01da183a", "name": "Dangling fetch: POST http://127.0.0.1:${appPort}/api/queue/nonexistent-id/stop (test/integration/queue-routes.test.js:55", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${appPort}/api/queue/nonexistent-id/stop (test/integration/queue-routes.test.js:55)"}, "fullDescription": {"text": "`test/integration/queue-routes.test.js:55` calls `POST http://127.0.0.1:${appPort}/api/queue/nonexistent-id/stop` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/queue/nonexistent-id/stop`\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-51ce452be03ff3b8", "name": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/queue/events (test/integration/queue-routes.test.js:63)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/queue/events (test/integration/queue-routes.test.js:63)"}, "fullDescription": {"text": "`test/integration/queue-routes.test.js:63` calls `GET http://127.0.0.1:${appPort}/api/queue/events` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/queue/events`\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-7a1cecfa21922068", "name": "Dangling fetch: POST http://127.0.0.1:${appPort}/api/references/upload (test/integration/references.test.js:80)", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${appPort}/api/references/upload (test/integration/references.test.js:80)"}, "fullDescription": {"text": "`test/integration/references.test.js:80` calls `POST http://127.0.0.1:${appPort}/api/references/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/references/upload`\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-b2e9dbd5bb236f2b", "name": "Dangling fetch: POST http://127.0.0.1:${appPort}/api/references/upload (test/integration/references.test.js:96)", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${appPort}/api/references/upload (test/integration/references.test.js:96)"}, "fullDescription": {"text": "`test/integration/references.test.js:96` calls `POST http://127.0.0.1:${appPort}/api/references/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/references/upload`\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-7818e56d57ce1b4a", "name": "Dangling fetch: POST http://127.0.0.1:${appPort}/api/references/upload (test/integration/references.test.js:106)", "shortDescription": {"text": "Dangling fetch: POST http://127.0.0.1:${appPort}/api/references/upload (test/integration/references.test.js:106)"}, "fullDescription": {"text": "`test/integration/references.test.js:106` calls `POST http://127.0.0.1:${appPort}/api/references/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/references/upload`\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-714f67441fdbfc3c", "name": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/generate/sessions/${sessionId} (test/integration/references.test.js:", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/generate/sessions/${sessionId} (test/integration/references.test.js:126)"}, "fullDescription": {"text": "`test/integration/references.test.js:126` calls `GET http://127.0.0.1:${appPort}/api/generate/sessions/${sessionId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/generate/sessions/<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-41f04d0c18f099ea", "name": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/generate/sessions/${sessionId} (test/integration/references.test.js:", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/generate/sessions/${sessionId} (test/integration/references.test.js:136)"}, "fullDescription": {"text": "`test/integration/references.test.js:136` calls `GET http://127.0.0.1:${appPort}/api/generate/sessions/${sessionId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/generate/sessions/<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-86018efb8f7b8f5c", "name": "Dangling fetch: DELETE http://127.0.0.1:${appPort}/api/generate/sessions?status=error (test/integration/generate.test.js", "shortDescription": {"text": "Dangling fetch: DELETE http://127.0.0.1:${appPort}/api/generate/sessions?status=error (test/integration/generate.test.js:346)"}, "fullDescription": {"text": "`test/integration/generate.test.js:346` calls `DELETE http://127.0.0.1:${appPort}/api/generate/sessions?status=error` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/generate/sessions`\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-7aafef3cc993ff3a", "name": "Dangling fetch: DELETE http://127.0.0.1:${appPort}/api/generate/sessions?status=all (test/integration/generate.test.js:3", "shortDescription": {"text": "Dangling fetch: DELETE http://127.0.0.1:${appPort}/api/generate/sessions?status=all (test/integration/generate.test.js:366)"}, "fullDescription": {"text": "`test/integration/generate.test.js:366` calls `DELETE http://127.0.0.1:${appPort}/api/generate/sessions?status=all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/generate/sessions`\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-7805424fa9be5ed9", "name": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/arch-help/sd15 (test/integration/archHelp.test.js:54)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/arch-help/sd15 (test/integration/archHelp.test.js:54)"}, "fullDescription": {"text": "`test/integration/archHelp.test.js:54` calls `GET http://127.0.0.1:${appPort}/api/arch-help/sd15` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/arch-help/sd15`\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-9fbd2c3771402ca8", "name": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/arch-help/nonexistent (test/integration/archHelp.test.js:62)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/arch-help/nonexistent (test/integration/archHelp.test.js:62)"}, "fullDescription": {"text": "`test/integration/archHelp.test.js:62` calls `GET http://127.0.0.1:${appPort}/api/arch-help/nonexistent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/arch-help/nonexistent`\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-f3aeb3b5ed9eb218", "name": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/arch-help/..%2Fconfig (test/integration/archHelp.test.js:67)", "shortDescription": {"text": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/arch-help/..%2Fconfig (test/integration/archHelp.test.js:67)"}, "fullDescription": {"text": "`test/integration/archHelp.test.js:67` calls `GET http://127.0.0.1:${appPort}/api/arch-help/..%2Fconfig` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/127.0.0.1:/<p>/api/arch-help/..%2fconfig`\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-390a0847277856b5", "name": "Dangling fetch: POST /api/generate (ui/src/stores/generate.js:315)", "shortDescription": {"text": "Dangling fetch: POST /api/generate (ui/src/stores/generate.js:315)"}, "fullDescription": {"text": "`ui/src/stores/generate.js:315` calls `POST /api/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/generate`\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-d02bb406e28b2cb7", "name": "Dangling fetch: POST /api/generate/continue/${sessionId} (ui/src/stores/generate.js:337)", "shortDescription": {"text": "Dangling fetch: POST /api/generate/continue/${sessionId} (ui/src/stores/generate.js:337)"}, "fullDescription": {"text": "`ui/src/stores/generate.js:337` calls `POST /api/generate/continue/${sessionId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/generate/continue/<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-3ccccfa777c51302", "name": "Dangling fetch: GET /api/generate/events (ui/src/stores/generate.js:434)", "shortDescription": {"text": "Dangling fetch: GET /api/generate/events (ui/src/stores/generate.js:434)"}, "fullDescription": {"text": "`ui/src/stores/generate.js:434` calls `GET /api/generate/events` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/generate/events`\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-e7c854418ff13696", "name": "Dangling fetch: POST http://${host}/api/generate/kill (src/routes/sdapi.js:285)", "shortDescription": {"text": "Dangling fetch: POST http://${host}/api/generate/kill (src/routes/sdapi.js:285)"}, "fullDescription": {"text": "`src/routes/sdapi.js:285` calls `POST http://${host}/api/generate/kill` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/http:/<p>/api/generate/kill`\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-fe7d71cab8bad3f5", "name": "Unused endpoint: USE /api/generate", "shortDescription": {"text": "Unused endpoint: USE /api/generate"}, "fullDescription": {"text": "`server.js` declares `USE /api/generate` 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-8636dd48e48d1da9", "name": "Unused endpoint: USE /api/sessions", "shortDescription": {"text": "Unused endpoint: USE /api/sessions"}, "fullDescription": {"text": "`server.js` declares `USE /api/sessions` 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-37da95c433fd6010", "name": "Unused endpoint: USE /api/references", "shortDescription": {"text": "Unused endpoint: USE /api/references"}, "fullDescription": {"text": "`server.js` declares `USE /api/references` 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-319ee6f8c285e5a0", "name": "Unused endpoint: USE /api/arch-help", "shortDescription": {"text": "Unused endpoint: USE /api/arch-help"}, "fullDescription": {"text": "`server.js` declares `USE /api/arch-help` 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-206f7e8691829c7a", "name": "Unused endpoint: USE /api/queue", "shortDescription": {"text": "Unused endpoint: USE /api/queue"}, "fullDescription": {"text": "`server.js` declares `USE /api/queue` 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-20d5b7a7e36c07f4", "name": "Unused endpoint: USE /sdapi/v1", "shortDescription": {"text": "Unused endpoint: USE /sdapi/v1"}, "fullDescription": {"text": "`server.js` declares `USE /sdapi/v1` 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-cf57cceeeec670af", "name": "Unused endpoint: GET /api/image", "shortDescription": {"text": "Unused endpoint: GET /api/image"}, "fullDescription": {"text": "`server.js` declares `GET /api/image` 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-1ce46532672bdba1", "name": "Unused endpoint: GET /api/video", "shortDescription": {"text": "Unused endpoint: GET /api/video"}, "fullDescription": {"text": "`server.js` declares `GET /api/video` 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-6236b283b79811b8", "name": "Unused endpoint: POST /upload", "shortDescription": {"text": "Unused endpoint: POST /upload"}, "fullDescription": {"text": "`src/routes/references.js` declares `POST /upload` 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-5baa8971ebe192a1", "name": "Unused endpoint: GET /", "shortDescription": {"text": "Unused endpoint: GET /"}, "fullDescription": {"text": "`src/routes/queue.js` declares `GET /` 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-43269e4e79c2e69e", "name": "Unused endpoint: GET /events", "shortDescription": {"text": "Unused endpoint: GET /events"}, "fullDescription": {"text": "`src/routes/queue.js` declares `GET /events` 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-7a61c112b611f4bb", "name": "Unused endpoint: DELETE /:id", "shortDescription": {"text": "Unused endpoint: DELETE /:id"}, "fullDescription": {"text": "`src/routes/queue.js` declares `DELETE /: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-e50502ba7be62a94", "name": "Unused endpoint: POST /:id/stop", "shortDescription": {"text": "Unused endpoint: POST /:id/stop"}, "fullDescription": {"text": "`src/routes/queue.js` declares `POST /:id/stop` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`src/routes/generate.js` declares `POST /` 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-71a21ab0eb06937c", "name": "Unused endpoint: POST /continue/:id", "shortDescription": {"text": "Unused endpoint: POST /continue/:id"}, "fullDescription": {"text": "`src/routes/generate.js` declares `POST /continue/: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-b15d518d538de57d", "name": "Unused endpoint: GET /sessions", "shortDescription": {"text": "Unused endpoint: GET /sessions"}, "fullDescription": {"text": "`src/routes/generate.js` declares `GET /sessions` 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-705591b11ba78b85", "name": "Unused endpoint: GET /sessions/:id", "shortDescription": {"text": "Unused endpoint: GET /sessions/:id"}, "fullDescription": {"text": "`src/routes/generate.js` declares `GET /sessions/: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-7b52fcc22ba5e3d2", "name": "Unused endpoint: DELETE /sessions", "shortDescription": {"text": "Unused endpoint: DELETE /sessions"}, "fullDescription": {"text": "`src/routes/generate.js` declares `DELETE /sessions` 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-da3556d0f0fab24f", "name": "Unused endpoint: DELETE /sessions/:id", "shortDescription": {"text": "Unused endpoint: DELETE /sessions/:id"}, "fullDescription": {"text": "`src/routes/generate.js` declares `DELETE /sessions/: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-69a693dfc33637f4", "name": "Unused endpoint: POST /run", "shortDescription": {"text": "Unused endpoint: POST /run"}, "fullDescription": {"text": "`src/routes/generate.js` declares `POST /run` 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-81d9a3c5abd26f97", "name": "Unused endpoint: POST /human-review/:sessionId", "shortDescription": {"text": "Unused endpoint: POST /human-review/:sessionId"}, "fullDescription": {"text": "`src/routes/generate.js` declares `POST /human-review/:sessionId` 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-1cad6397af2f393a", "name": "Unused endpoint: POST /sessions/:id/refuse-accepted", "shortDescription": {"text": "Unused endpoint: POST /sessions/:id/refuse-accepted"}, "fullDescription": {"text": "`src/routes/generate.js` declares `POST /sessions/:id/refuse-accepted` 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-7569de4538b5c19a", "name": "Unused endpoint: POST /kill", "shortDescription": {"text": "Unused endpoint: POST /kill"}, "fullDescription": {"text": "`src/routes/generate.js` declares `POST /kill` 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-2e1dc765d7a70e90", "name": "Unused endpoint: POST /txt2img", "shortDescription": {"text": "Unused endpoint: POST /txt2img"}, "fullDescription": {"text": "`src/routes/sdapi.js` declares `POST /txt2img` 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-1d1cba51ac10919b", "name": "Unused endpoint: POST /img2img", "shortDescription": {"text": "Unused endpoint: POST /img2img"}, "fullDescription": {"text": "`src/routes/sdapi.js` declares `POST /img2img` 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-619853fd9a80f057", "name": "Unused endpoint: GET /progress", "shortDescription": {"text": "Unused endpoint: GET /progress"}, "fullDescription": {"text": "`src/routes/sdapi.js` declares `GET /progress` 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-eaf5e17675fdf290", "name": "Unused endpoint: GET /sd-models", "shortDescription": {"text": "Unused endpoint: GET /sd-models"}, "fullDescription": {"text": "`src/routes/sdapi.js` declares `GET /sd-models` 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-0bb20633b766f2c8", "name": "Unused endpoint: GET /options", "shortDescription": {"text": "Unused endpoint: GET /options"}, "fullDescription": {"text": "`src/routes/sdapi.js` declares `GET /options` 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-d3dcb18583b07f51", "name": "Unused endpoint: POST /options", "shortDescription": {"text": "Unused endpoint: POST /options"}, "fullDescription": {"text": "`src/routes/sdapi.js` declares `POST /options` 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-aaab2cb128818ab2", "name": "Unused endpoint: GET /samplers", "shortDescription": {"text": "Unused endpoint: GET /samplers"}, "fullDescription": {"text": "`src/routes/sdapi.js` declares `GET /samplers` 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-779cd39cebfbb69a", "name": "Unused endpoint: GET /schedulers", "shortDescription": {"text": "Unused endpoint: GET /schedulers"}, "fullDescription": {"text": "`src/routes/sdapi.js` declares `GET /schedulers` 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-ff4fef4106412a85", "name": "Unused endpoint: GET /upscalers", "shortDescription": {"text": "Unused endpoint: GET /upscalers"}, "fullDescription": {"text": "`src/routes/sdapi.js` declares `GET /upscalers` 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-d111149cdd09128a", "name": "Unused endpoint: GET /latent-upscale-modes", "shortDescription": {"text": "Unused endpoint: GET /latent-upscale-modes"}, "fullDescription": {"text": "`src/routes/sdapi.js` declares `GET /latent-upscale-modes` 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-f2adc3dfd1f434a0", "name": "Unused endpoint: GET /sd-vae", "shortDescription": {"text": "Unused endpoint: GET /sd-vae"}, "fullDescription": {"text": "`src/routes/sdapi.js` declares `GET /sd-vae` 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-7d95792fc0a63579", "name": "Unused endpoint: POST /interrupt", "shortDescription": {"text": "Unused endpoint: POST /interrupt"}, "fullDescription": {"text": "`src/routes/sdapi.js` declares `POST /interrupt` 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-f0454b6f78d9c685", "name": "Unused endpoint: GET /:arch", "shortDescription": {"text": "Unused endpoint: GET /:arch"}, "fullDescription": {"text": "`src/routes/archHelp.js` declares `GET /:arch` 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-a6f48e60c30777ab", "name": "Unused endpoint: GET /config", "shortDescription": {"text": "Unused endpoint: GET /config"}, "fullDescription": {"text": "`src/routes/sessions.js` declares `GET /config` 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-4cff4b2e8c2f239b", "name": "Unused endpoint: PATCH /config", "shortDescription": {"text": "Unused endpoint: PATCH /config"}, "fullDescription": {"text": "`src/routes/sessions.js` declares `PATCH /config` 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": "`src/routes/sessions.js` 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-6e395a957cec03ae", "name": "Unused endpoint: PUT /workflows/:id", "shortDescription": {"text": "Unused endpoint: PUT /workflows/:id"}, "fullDescription": {"text": "`src/routes/sessions.js` declares `PUT /workflows/: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-3f52adc774e06155", "name": "Unused endpoint: POST /workflows", "shortDescription": {"text": "Unused endpoint: POST /workflows"}, "fullDescription": {"text": "`src/routes/sessions.js` 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-320e6ec7709a8a70", "name": "Unused endpoint: DELETE /workflows/:id", "shortDescription": {"text": "Unused endpoint: DELETE /workflows/:id"}, "fullDescription": {"text": "`src/routes/sessions.js` declares `DELETE /workflows/: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-e6be862c92935cf8", "name": "Unused endpoint: GET /models/list", "shortDescription": {"text": "Unused endpoint: GET /models/list"}, "fullDescription": {"text": "`src/routes/sessions.js` declares `GET /models/list` 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-820335e02c4b0eac", "name": "Unused endpoint: PUT /models/:id", "shortDescription": {"text": "Unused endpoint: PUT /models/:id"}, "fullDescription": {"text": "`src/routes/sessions.js` declares `PUT /models/: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-826563a3f4bdb66a", "name": "Unused endpoint: POST /models", "shortDescription": {"text": "Unused endpoint: POST /models"}, "fullDescription": {"text": "`src/routes/sessions.js` declares `POST /models` 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-5f3d49d0a00d5202", "name": "Unused endpoint: DELETE /models/:id", "shortDescription": {"text": "Unused endpoint: DELETE /models/:id"}, "fullDescription": {"text": "`src/routes/sessions.js` declares `DELETE /models/: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-2ec664233d966718", "name": "Unused endpoint: GET /skills/:modelId", "shortDescription": {"text": "Unused endpoint: GET /skills/:modelId"}, "fullDescription": {"text": "`src/routes/sessions.js` declares `GET /skills/:modelId` 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-27f44098b132bbc6", "name": "Unused endpoint: POST /skills/:modelId/refresh", "shortDescription": {"text": "Unused endpoint: POST /skills/:modelId/refresh"}, "fullDescription": {"text": "`src/routes/sessions.js` declares `POST /skills/:modelId/refresh` 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-b10d2e5e862b0470", "name": "Unused endpoint: PATCH /skills/:modelId/notes", "shortDescription": {"text": "Unused endpoint: PATCH /skills/:modelId/notes"}, "fullDescription": {"text": "`src/routes/sessions.js` declares `PATCH /skills/:modelId/notes` 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-f6d9c845b2bd5433", "name": "Unused endpoint: POST /skills/:modelId/versions/:versionId/activate", "shortDescription": {"text": "Unused endpoint: POST /skills/:modelId/versions/:versionId/activate"}, "fullDescription": {"text": "`src/routes/sessions.js` declares `POST /skills/:modelId/versions/:versionId/activate` 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/22306"}, "properties": {"repository": "virstai/ComfyRefinery", "repoUrl": "https://github.com/virstai/ComfyRefinery", "branch": "main"}, "results": [{"ruleId": "scanner-e6c7afc57d4527eb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server.js:72"}, "properties": {"repobilityId": "a9deebb5fdc93edc", "scanner": "scanner-primary", "fingerprint": "e6c7afc57d4527eb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8c61360b13e47672", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 ui/src/components/ArchHelpModal.vue:6"}, "properties": {"repobilityId": "f86515f21bc87278", "scanner": "scanner-primary", "fingerprint": "8c61360b13e47672", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-8f1803292571768d", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 ui/src/components/ModelEditor.vue:302"}, "properties": {"repobilityId": "84d51e9b23a14466", "scanner": "scanner-primary", "fingerprint": "8f1803292571768d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-6fa2fb76b9b9e6b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/routes/generate.js:62"}, "properties": {"repobilityId": "9ccbd403e8efe5cd", "scanner": "scanner-primary", "fingerprint": "6fa2fb76b9b9e6b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ac786d3f51deced9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/skillRefresher.js:45"}, "properties": {"repobilityId": "334b02ae1401b09f", "scanner": "scanner-primary", "fingerprint": "ac786d3f51deced9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b52dba371387a714", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/services/comfyui.js:74"}, "properties": {"repobilityId": "ead5a18b2ee323e3", "scanner": "scanner-primary", "fingerprint": "b52dba371387a714", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-7642401110c571bb", "level": "warning", "message": {"text": "Insecure pattern 'vue_v_html' in ui/src/components/ArchHelpModal.vue:11"}, "properties": {"repobilityId": "c48435c753a40142", "scanner": "scanner-primary", "fingerprint": "7642401110c571bb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "vue_v_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ui/src/components/ArchHelpModal.vue"}, "region": {"startLine": 11}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "a3670ff04e39526f", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "45312d767783d7f9", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "7ec0cb917304d6e9", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "bba4e03c47a50c33", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "7d10daa7ede8d4cb", "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": "547270c98ecf6b28", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-cd019494e7974720", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/queue-routes.test.js:39"}, "properties": {"repobilityId": "83b249fe11825ff4", "scanner": "scanner-primary", "fingerprint": "cd019494e7974720", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-49b8d636e80113d2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/upscale.test.js:124"}, "properties": {"repobilityId": "c760f17edf6b7559", "scanner": "scanner-primary", "fingerprint": "49b8d636e80113d2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0b4bacbfad805b9c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/pose-fallback.test.js:87"}, "properties": {"repobilityId": "e48168098812d789", "scanner": "scanner-primary", "fingerprint": "0b4bacbfad805b9c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2de6b804d0f0e974", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/capabilities.test.js:88"}, "properties": {"repobilityId": "63ee37658af30e54", "scanner": "scanner-primary", "fingerprint": "2de6b804d0f0e974", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-55487eee3fd36fea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/references.test.js:80"}, "properties": {"repobilityId": "a76a3d48cb0bf737", "scanner": "scanner-primary", "fingerprint": "55487eee3fd36fea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a513d252f959c461", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/video.test.js:121"}, "properties": {"repobilityId": "f0fdeb4675a3e098", "scanner": "scanner-primary", "fingerprint": "a513d252f959c461", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-042a45964954d420", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/sdapi.test.js:84"}, "properties": {"repobilityId": "7bb5b337cec278bc", "scanner": "scanner-primary", "fingerprint": "042a45964954d420", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b0d3d7636229898c", "level": "note", "message": {"text": "Legacy-named symbol `anima_v1` in test/integration/loras.test.js:24"}, "properties": {"repobilityId": "e513398ea86449c3", "scanner": "scanner-primary", "fingerprint": "b0d3d7636229898c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-16816e883e44c2d0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/generate.test.js:148"}, "properties": {"repobilityId": "397706d9c8629cb5", "scanner": "scanner-primary", "fingerprint": "16816e883e44c2d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-770826e6072c0a42", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/archHelp.test.js:54"}, "properties": {"repobilityId": "440e9f9f9a8f7afd", "scanner": "scanner-primary", "fingerprint": "770826e6072c0a42", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2153484a9d7b5183", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/integration/loras-pose.test.js:116"}, "properties": {"repobilityId": "61b22c2977cc60ce", "scanner": "scanner-primary", "fingerprint": "2153484a9d7b5183", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-75dd6a63a003f20d", "level": "note", "message": {"text": "Legacy-named symbol `sd_v1` in test/unit/loraMeta.test.js:7"}, "properties": {"repobilityId": "4d20a230f28d36b9", "scanner": "scanner-primary", "fingerprint": "75dd6a63a003f20d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-57b307ffc7ef33ea", "level": "note", "message": {"text": "Legacy-named symbol `sdxl_base_v1` in test/unit/comfyui-assets.test.js:35"}, "properties": {"repobilityId": "8cfe2ab09120ca2d", "scanner": "scanner-primary", "fingerprint": "57b307ffc7ef33ea", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-f7c5dff9c5019219", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 test/support/fakeServers.js:243"}, "properties": {"repobilityId": "45aaf2ab9fc10d63", "scanner": "scanner-primary", "fingerprint": "f7c5dff9c5019219", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9bd5a6d831b364e7", "level": "note", "message": {"text": "Legacy-named symbol `sd_v1` in src/lib/loraMeta.js:9"}, "properties": {"repobilityId": "e1d15ccaf51c38f5", "scanner": "scanner-primary", "fingerprint": "9bd5a6d831b364e7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9e25419b523c8d03", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/loraTools.js:3"}, "properties": {"repobilityId": "4563646dc418c16e", "scanner": "scanner-primary", "fingerprint": "9e25419b523c8d03", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f10838f3e62755a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/routes/generate.js:139"}, "properties": {"repobilityId": "a642629ced628cb7", "scanner": "scanner-primary", "fingerprint": "3f10838f3e62755a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d9fbce79a6167c82", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/routes/generate.js:160"}, "properties": {"repobilityId": "b60f639aa7e0a152", "scanner": "scanner-primary", "fingerprint": "d9fbce79a6167c82", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-362d74539bbb2e14", "level": "none", "message": {"text": "Commented-code block (17 lines) in src/routes/sdapi.js:6"}, "properties": {"repobilityId": "f9048b2a9cb385c8", "scanner": "scanner-primary", "fingerprint": "362d74539bbb2e14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a3fc3960f29e71fc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/steps/upscale.js:24"}, "properties": {"repobilityId": "528fc159b62a73f9", "scanner": "scanner-primary", "fingerprint": "a3fc3960f29e71fc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9e1918a0a5319312", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/steps/generate.js:102"}, "properties": {"repobilityId": "22e07ecc255028ce", "scanner": "scanner-primary", "fingerprint": "9e1918a0a5319312", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-112d3d5d2b18d5a1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/steps/generate.js:112"}, "properties": {"repobilityId": "2b67726d63444981", "scanner": "scanner-primary", "fingerprint": "112d3d5d2b18d5a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6f490ff2526c61e0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/steps/video.js:27"}, "properties": {"repobilityId": "bc3db50fad9f6110", "scanner": "scanner-primary", "fingerprint": "6f490ff2526c61e0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-191efc2a65685c9d", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/services/agent.js:5"}, "properties": {"repobilityId": "1e7f5860476f2221", "scanner": "scanner-primary", "fingerprint": "191efc2a65685c9d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9a145928d517cb8a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/ollama.js:8"}, "properties": {"repobilityId": "bab7731e569d0c1a", "scanner": "scanner-primary", "fingerprint": "9a145928d517cb8a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b7641a4da139ad10", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/services/llm.js:3"}, "properties": {"repobilityId": "9fe2de1409b124d5", "scanner": "scanner-primary", "fingerprint": "b7641a4da139ad10", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-df57978b42c1ec44", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/services/pose.js:3"}, "properties": {"repobilityId": "22e0f944de2b7a76", "scanner": "scanner-primary", "fingerprint": "df57978b42c1ec44", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0600dafb7f013e57", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/pose.js:76"}, "properties": {"repobilityId": "fd0cd75854c9ca62", "scanner": "scanner-primary", "fingerprint": "0600dafb7f013e57", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-65dc354444eac2ff", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/comfyui.js:20"}, "properties": {"repobilityId": "8852aadf7919ba40", "scanner": "scanner-primary", "fingerprint": "65dc354444eac2ff", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-61ad7fdcc78c36b1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/providers/ollama.js:5"}, "properties": {"repobilityId": "84136c531ae310e7", "scanner": "scanner-primary", "fingerprint": "61ad7fdcc78c36b1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-679590cad826919d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/services/providers/openai.js:40"}, "properties": {"repobilityId": "34508d1ae7ef2c6e", "scanner": "scanner-primary", "fingerprint": "679590cad826919d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d9bfe368955b3585", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/workflows/lib/preprocessors.js:6"}, "properties": {"repobilityId": "74d8c21441f0d51b", "scanner": "scanner-primary", "fingerprint": "d9bfe368955b3585", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e948b4f86236b5b2", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/queue (test/integration/queue-routes.test.js:39)"}, "properties": {"repobilityId": "7f9ecffb7565f3cd", "scanner": "scanner-primary", "fingerprint": "e948b4f86236b5b2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-84cc48672e1de457", "level": "error", "message": {"text": "Dangling fetch: DELETE http://127.0.0.1:${appPort}/api/queue/nonexistent-id (test/integration/queue-routes.test.js:48)"}, "properties": {"repobilityId": "39fa2bf65bdf2cd5", "scanner": "scanner-primary", "fingerprint": "84cc48672e1de457", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dd26e57d01da183a", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${appPort}/api/queue/nonexistent-id/stop (test/integration/queue-routes.test.js:55)"}, "properties": {"repobilityId": "8766541f75e1f255", "scanner": "scanner-primary", "fingerprint": "dd26e57d01da183a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-51ce452be03ff3b8", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/queue/events (test/integration/queue-routes.test.js:63)"}, "properties": {"repobilityId": "6faa33d6586e9324", "scanner": "scanner-primary", "fingerprint": "51ce452be03ff3b8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7a1cecfa21922068", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${appPort}/api/references/upload (test/integration/references.test.js:80)"}, "properties": {"repobilityId": "a6d99db60319539e", "scanner": "scanner-primary", "fingerprint": "7a1cecfa21922068", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b2e9dbd5bb236f2b", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${appPort}/api/references/upload (test/integration/references.test.js:96)"}, "properties": {"repobilityId": "f608320e3b9deb84", "scanner": "scanner-primary", "fingerprint": "b2e9dbd5bb236f2b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7818e56d57ce1b4a", "level": "error", "message": {"text": "Dangling fetch: POST http://127.0.0.1:${appPort}/api/references/upload (test/integration/references.test.js:106)"}, "properties": {"repobilityId": "9ebdfe4e82e0a98b", "scanner": "scanner-primary", "fingerprint": "7818e56d57ce1b4a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-714f67441fdbfc3c", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/generate/sessions/${sessionId} (test/integration/references.test.js:126)"}, "properties": {"repobilityId": "bef38cd5582a5c56", "scanner": "scanner-primary", "fingerprint": "714f67441fdbfc3c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-41f04d0c18f099ea", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/generate/sessions/${sessionId} (test/integration/references.test.js:136)"}, "properties": {"repobilityId": "ce32135f3e8a4a81", "scanner": "scanner-primary", "fingerprint": "41f04d0c18f099ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-86018efb8f7b8f5c", "level": "error", "message": {"text": "Dangling fetch: DELETE http://127.0.0.1:${appPort}/api/generate/sessions?status=error (test/integration/generate.test.js:346)"}, "properties": {"repobilityId": "171a2850d0abf8bf", "scanner": "scanner-primary", "fingerprint": "86018efb8f7b8f5c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7aafef3cc993ff3a", "level": "error", "message": {"text": "Dangling fetch: DELETE http://127.0.0.1:${appPort}/api/generate/sessions?status=all (test/integration/generate.test.js:366)"}, "properties": {"repobilityId": "9fc1a5e0ad2bbcbf", "scanner": "scanner-primary", "fingerprint": "7aafef3cc993ff3a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7805424fa9be5ed9", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/arch-help/sd15 (test/integration/archHelp.test.js:54)"}, "properties": {"repobilityId": "42e69ec4a7853c13", "scanner": "scanner-primary", "fingerprint": "7805424fa9be5ed9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9fbd2c3771402ca8", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/arch-help/nonexistent (test/integration/archHelp.test.js:62)"}, "properties": {"repobilityId": "66354e8ab8779e7b", "scanner": "scanner-primary", "fingerprint": "9fbd2c3771402ca8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f3aeb3b5ed9eb218", "level": "error", "message": {"text": "Dangling fetch: GET http://127.0.0.1:${appPort}/api/arch-help/..%2Fconfig (test/integration/archHelp.test.js:67)"}, "properties": {"repobilityId": "4d50c9e50ee95662", "scanner": "scanner-primary", "fingerprint": "f3aeb3b5ed9eb218", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-390a0847277856b5", "level": "error", "message": {"text": "Dangling fetch: POST /api/generate (ui/src/stores/generate.js:315)"}, "properties": {"repobilityId": "2d93755753e2d54d", "scanner": "scanner-primary", "fingerprint": "390a0847277856b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d02bb406e28b2cb7", "level": "error", "message": {"text": "Dangling fetch: POST /api/generate/continue/${sessionId} (ui/src/stores/generate.js:337)"}, "properties": {"repobilityId": "d3a8d49483883a9c", "scanner": "scanner-primary", "fingerprint": "d02bb406e28b2cb7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3ccccfa777c51302", "level": "error", "message": {"text": "Dangling fetch: GET /api/generate/events (ui/src/stores/generate.js:434)"}, "properties": {"repobilityId": "599061d300448d59", "scanner": "scanner-primary", "fingerprint": "3ccccfa777c51302", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e7c854418ff13696", "level": "error", "message": {"text": "Dangling fetch: POST http://${host}/api/generate/kill (src/routes/sdapi.js:285)"}, "properties": {"repobilityId": "d9d1018a19943347", "scanner": "scanner-primary", "fingerprint": "e7c854418ff13696", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fe7d71cab8bad3f5", "level": "note", "message": {"text": "Unused endpoint: USE /api/generate"}, "properties": {"repobilityId": "6bc142a05d4960b6", "scanner": "scanner-primary", "fingerprint": "fe7d71cab8bad3f5", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8636dd48e48d1da9", "level": "note", "message": {"text": "Unused endpoint: USE /api/sessions"}, "properties": {"repobilityId": "79428e3d6c08763e", "scanner": "scanner-primary", "fingerprint": "8636dd48e48d1da9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-37da95c433fd6010", "level": "note", "message": {"text": "Unused endpoint: USE /api/references"}, "properties": {"repobilityId": "97a5b89e8c57814b", "scanner": "scanner-primary", "fingerprint": "37da95c433fd6010", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-319ee6f8c285e5a0", "level": "note", "message": {"text": "Unused endpoint: USE /api/arch-help"}, "properties": {"repobilityId": "3e1efc50db7e7d85", "scanner": "scanner-primary", "fingerprint": "319ee6f8c285e5a0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-206f7e8691829c7a", "level": "note", "message": {"text": "Unused endpoint: USE /api/queue"}, "properties": {"repobilityId": "0f89fe302e0a2424", "scanner": "scanner-primary", "fingerprint": "206f7e8691829c7a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-20d5b7a7e36c07f4", "level": "note", "message": {"text": "Unused endpoint: USE /sdapi/v1"}, "properties": {"repobilityId": "2f865969b7eb642d", "scanner": "scanner-primary", "fingerprint": "20d5b7a7e36c07f4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cf57cceeeec670af", "level": "note", "message": {"text": "Unused endpoint: GET /api/image"}, "properties": {"repobilityId": "7645f091b68bd50d", "scanner": "scanner-primary", "fingerprint": "cf57cceeeec670af", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1ce46532672bdba1", "level": "note", "message": {"text": "Unused endpoint: GET /api/video"}, "properties": {"repobilityId": "dd1abb1d488b3184", "scanner": "scanner-primary", "fingerprint": "1ce46532672bdba1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6236b283b79811b8", "level": "note", "message": {"text": "Unused endpoint: POST /upload"}, "properties": {"repobilityId": "c56f9263a35dcd1c", "scanner": "scanner-primary", "fingerprint": "6236b283b79811b8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "cd1780ba74c1fa72", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-43269e4e79c2e69e", "level": "note", "message": {"text": "Unused endpoint: GET /events"}, "properties": {"repobilityId": "97e73cc5d47df0cc", "scanner": "scanner-primary", "fingerprint": "43269e4e79c2e69e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a61c112b611f4bb", "level": "note", "message": {"text": "Unused endpoint: DELETE /:id"}, "properties": {"repobilityId": "8dfb664f1c968196", "scanner": "scanner-primary", "fingerprint": "7a61c112b611f4bb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e50502ba7be62a94", "level": "note", "message": {"text": "Unused endpoint: POST /:id/stop"}, "properties": {"repobilityId": "80d73eb393a1451b", "scanner": "scanner-primary", "fingerprint": "e50502ba7be62a94", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "5bf3c23077f546ac", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-71a21ab0eb06937c", "level": "note", "message": {"text": "Unused endpoint: POST /continue/:id"}, "properties": {"repobilityId": "b925df1fe0701d4d", "scanner": "scanner-primary", "fingerprint": "71a21ab0eb06937c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b15d518d538de57d", "level": "note", "message": {"text": "Unused endpoint: GET /sessions"}, "properties": {"repobilityId": "4df9ee568720b3b2", "scanner": "scanner-primary", "fingerprint": "b15d518d538de57d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-705591b11ba78b85", "level": "note", "message": {"text": "Unused endpoint: GET /sessions/:id"}, "properties": {"repobilityId": "94c76e554eba5876", "scanner": "scanner-primary", "fingerprint": "705591b11ba78b85", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7b52fcc22ba5e3d2", "level": "note", "message": {"text": "Unused endpoint: DELETE /sessions"}, "properties": {"repobilityId": "155563a8af7cd26e", "scanner": "scanner-primary", "fingerprint": "7b52fcc22ba5e3d2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-da3556d0f0fab24f", "level": "note", "message": {"text": "Unused endpoint: DELETE /sessions/:id"}, "properties": {"repobilityId": "23b69727242edc4c", "scanner": "scanner-primary", "fingerprint": "da3556d0f0fab24f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-69a693dfc33637f4", "level": "note", "message": {"text": "Unused endpoint: POST /run"}, "properties": {"repobilityId": "72ec35e97b7685f5", "scanner": "scanner-primary", "fingerprint": "69a693dfc33637f4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-81d9a3c5abd26f97", "level": "note", "message": {"text": "Unused endpoint: POST /human-review/:sessionId"}, "properties": {"repobilityId": "bf34de31c0dc62ac", "scanner": "scanner-primary", "fingerprint": "81d9a3c5abd26f97", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1cad6397af2f393a", "level": "note", "message": {"text": "Unused endpoint: POST /sessions/:id/refuse-accepted"}, "properties": {"repobilityId": "2a38bdbb34f0d4e4", "scanner": "scanner-primary", "fingerprint": "1cad6397af2f393a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7569de4538b5c19a", "level": "note", "message": {"text": "Unused endpoint: POST /kill"}, "properties": {"repobilityId": "fb94b1760b88cbca", "scanner": "scanner-primary", "fingerprint": "7569de4538b5c19a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2e1dc765d7a70e90", "level": "note", "message": {"text": "Unused endpoint: POST /txt2img"}, "properties": {"repobilityId": "2133e6d50cd93dec", "scanner": "scanner-primary", "fingerprint": "2e1dc765d7a70e90", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1d1cba51ac10919b", "level": "note", "message": {"text": "Unused endpoint: POST /img2img"}, "properties": {"repobilityId": "996b50fa2fa2af9c", "scanner": "scanner-primary", "fingerprint": "1d1cba51ac10919b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-619853fd9a80f057", "level": "note", "message": {"text": "Unused endpoint: GET /progress"}, "properties": {"repobilityId": "8dc502a9e0b2b557", "scanner": "scanner-primary", "fingerprint": "619853fd9a80f057", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eaf5e17675fdf290", "level": "note", "message": {"text": "Unused endpoint: GET /sd-models"}, "properties": {"repobilityId": "5d53e70b113a8a20", "scanner": "scanner-primary", "fingerprint": "eaf5e17675fdf290", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0bb20633b766f2c8", "level": "note", "message": {"text": "Unused endpoint: GET /options"}, "properties": {"repobilityId": "6ac2455d34d58152", "scanner": "scanner-primary", "fingerprint": "0bb20633b766f2c8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d3dcb18583b07f51", "level": "note", "message": {"text": "Unused endpoint: POST /options"}, "properties": {"repobilityId": "adc85e3bbe383128", "scanner": "scanner-primary", "fingerprint": "d3dcb18583b07f51", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aaab2cb128818ab2", "level": "note", "message": {"text": "Unused endpoint: GET /samplers"}, "properties": {"repobilityId": "1f139360cacac239", "scanner": "scanner-primary", "fingerprint": "aaab2cb128818ab2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-779cd39cebfbb69a", "level": "note", "message": {"text": "Unused endpoint: GET /schedulers"}, "properties": {"repobilityId": "683a8d97d5fadeec", "scanner": "scanner-primary", "fingerprint": "779cd39cebfbb69a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ff4fef4106412a85", "level": "note", "message": {"text": "Unused endpoint: GET /upscalers"}, "properties": {"repobilityId": "ab0595d9d3d52132", "scanner": "scanner-primary", "fingerprint": "ff4fef4106412a85", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d111149cdd09128a", "level": "note", "message": {"text": "Unused endpoint: GET /latent-upscale-modes"}, "properties": {"repobilityId": "8a2e38c95b02353f", "scanner": "scanner-primary", "fingerprint": "d111149cdd09128a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f2adc3dfd1f434a0", "level": "note", "message": {"text": "Unused endpoint: GET /sd-vae"}, "properties": {"repobilityId": "d5f1b61354d808cc", "scanner": "scanner-primary", "fingerprint": "f2adc3dfd1f434a0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7d95792fc0a63579", "level": "note", "message": {"text": "Unused endpoint: POST /interrupt"}, "properties": {"repobilityId": "a84a05cfb323ef81", "scanner": "scanner-primary", "fingerprint": "7d95792fc0a63579", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f0454b6f78d9c685", "level": "note", "message": {"text": "Unused endpoint: GET /:arch"}, "properties": {"repobilityId": "04712f352e91cc16", "scanner": "scanner-primary", "fingerprint": "f0454b6f78d9c685", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a6f48e60c30777ab", "level": "note", "message": {"text": "Unused endpoint: GET /config"}, "properties": {"repobilityId": "7f76e887d5c7cef3", "scanner": "scanner-primary", "fingerprint": "a6f48e60c30777ab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4cff4b2e8c2f239b", "level": "note", "message": {"text": "Unused endpoint: PATCH /config"}, "properties": {"repobilityId": "4639438a74a71a75", "scanner": "scanner-primary", "fingerprint": "4cff4b2e8c2f239b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8dbb92ac42125edf", "level": "note", "message": {"text": "Unused endpoint: GET /workflows"}, "properties": {"repobilityId": "51bf2c098c089746", "scanner": "scanner-primary", "fingerprint": "8dbb92ac42125edf", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6e395a957cec03ae", "level": "note", "message": {"text": "Unused endpoint: PUT /workflows/:id"}, "properties": {"repobilityId": "44fa071be8c05c3f", "scanner": "scanner-primary", "fingerprint": "6e395a957cec03ae", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3f52adc774e06155", "level": "note", "message": {"text": "Unused endpoint: POST /workflows"}, "properties": {"repobilityId": "b3e22a0806922bcf", "scanner": "scanner-primary", "fingerprint": "3f52adc774e06155", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-320e6ec7709a8a70", "level": "note", "message": {"text": "Unused endpoint: DELETE /workflows/:id"}, "properties": {"repobilityId": "5ddbadf9b6019623", "scanner": "scanner-primary", "fingerprint": "320e6ec7709a8a70", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e6be862c92935cf8", "level": "note", "message": {"text": "Unused endpoint: GET /models/list"}, "properties": {"repobilityId": "d7b294cc677bfcd3", "scanner": "scanner-primary", "fingerprint": "e6be862c92935cf8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-820335e02c4b0eac", "level": "note", "message": {"text": "Unused endpoint: PUT /models/:id"}, "properties": {"repobilityId": "fac5d54d7bc34047", "scanner": "scanner-primary", "fingerprint": "820335e02c4b0eac", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-826563a3f4bdb66a", "level": "note", "message": {"text": "Unused endpoint: POST /models"}, "properties": {"repobilityId": "60f2420723e2bd08", "scanner": "scanner-primary", "fingerprint": "826563a3f4bdb66a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5f3d49d0a00d5202", "level": "note", "message": {"text": "Unused endpoint: DELETE /models/:id"}, "properties": {"repobilityId": "a924ecb26eb1ac54", "scanner": "scanner-primary", "fingerprint": "5f3d49d0a00d5202", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2ec664233d966718", "level": "note", "message": {"text": "Unused endpoint: GET /skills/:modelId"}, "properties": {"repobilityId": "cf792cbfc48cfe77", "scanner": "scanner-primary", "fingerprint": "2ec664233d966718", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-27f44098b132bbc6", "level": "note", "message": {"text": "Unused endpoint: POST /skills/:modelId/refresh"}, "properties": {"repobilityId": "9f5ab4b82b67f5d2", "scanner": "scanner-primary", "fingerprint": "27f44098b132bbc6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b10d2e5e862b0470", "level": "note", "message": {"text": "Unused endpoint: PATCH /skills/:modelId/notes"}, "properties": {"repobilityId": "f5e012c41c89d20d", "scanner": "scanner-primary", "fingerprint": "b10d2e5e862b0470", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f6d9c845b2bd5433", "level": "note", "message": {"text": "Unused endpoint: POST /skills/:modelId/versions/:versionId/activate"}, "properties": {"repobilityId": "d0422299ffb2dbad", "scanner": "scanner-primary", "fingerprint": "f6d9c845b2bd5433", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}