{"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-bf7b39be61ac242c", "name": "Stray `console.log` in TS/JS \u2014 server.js:6344", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server.js:6344"}, "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-3ec851fdc924c5fd", "name": "Stray `console.log` in TS/JS \u2014 scripts/import-tme-customer-symbols.js:73", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-tme-customer-symbols.js:73"}, "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-9132b065fd7a76c6", "name": "Stray `console.log` in TS/JS \u2014 scripts/import-lcsc-history.js:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-lcsc-history.js:70"}, "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-258c124c8fe0120b", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-local-mes-demo.js:268", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-local-mes-demo.js:268"}, "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-fbef5690ef168903", "name": "Stray `console.log` in TS/JS \u2014 scripts/import-digikey-history.js:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-digikey-history.js:76"}, "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-70851972e2328ed8", "name": "Stray `console.log` in TS/JS \u2014 lib/auth-store.js:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 lib/auth-store.js:88"}, "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-564acdda57419717", "name": "Insecure pattern 'cors_wildcard' in mcp-production-server.js:1141", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in mcp-production-server.js:1141"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0c73ab9a1d129520", "name": "Insecure pattern 'node_child_process' in server.js:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in server.js:6"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3c276c8381643a85", "name": "Insecure pattern 'node_child_process' in lib/lcsc-history-import.js:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in lib/lcsc-history-import.js:6"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f16215feadbbea98", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/start.js:32", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/start.js:32"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fe1e38b8ecbcba28", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/piaskownica-app.js:55", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/piaskownica-app.js:55"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6abf244b9150ed6c", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/app.js:170", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/app.js:170"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-182a7f64f8f7423d", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/kosztykkw-app.js:133", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/kosztykkw-app.js:133"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cbc172803e37c2bc", "name": "Insecure pattern 'insert_adjacent_html' in public/kosztykkw-app.js:614", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in public/kosztykkw-app.js:614"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f23ba765f685f34a", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/rentownosc-app.js:77", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/rentownosc-app.js:77"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3e43a70d2c2ada65", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/production-dashboard.js:743", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/production-dashboard.js:743"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3f154777de92475b", "name": "Insecure pattern 'local_storage_auth_token' in public/production-dashboard.js:1757", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in public/production-dashboard.js:1757"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f887f29005a711d0", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/wms/wms.js:425", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/wms/wms.js:425"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-078309d31222af86", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/zapotrzebowanie/zapotrzebowanie.js:693", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/zapotrzebowanie/zapotrzebowanie.js:693"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-416c885d83e5de57", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/admin/admin.js:232", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/admin/admin.js:232"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-af4aae3148d06cfa", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/operator-dashboard/operator-dashboard.js:269", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/operator-dashboard/operator-dashboard.js:269"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4956ca6d573b001c", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/smd-analyst/smd-analyst.js:198", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/smd-analyst/smd-analyst.js:198"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1a95b128270a9f0e", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/mes/mes.js:675", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/mes/mes.js:675"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-11a29a767172993d", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/mes/operator/operator.js:307", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/mes/operator/operator.js:307"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4f58f72cb9743617", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/core/shell.js:72", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/core/shell.js:72"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-018d4d385dbe0ec3", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/operator/operator.js:114", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/operator/operator.js:114"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b2466a706700bbbb", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/analyst/analyst.js:579", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/analyst/analyst.js:579"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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-0e4b02727604555d", "name": "Very large file: server.js (11574 lines)", "shortDescription": {"text": "Very large file: server.js (11574 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c73ca15ca25de500", "name": "Very large file: lib/zapotrzebowanie-sqlite.js (1896 lines)", "shortDescription": {"text": "Very large file: lib/zapotrzebowanie-sqlite.js (1896 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3612fa730d1e014d", "name": "Very large file: lib/mes-sqlite.js (3141 lines)", "shortDescription": {"text": "Very large file: lib/mes-sqlite.js (3141 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bca106f485ef1a19", "name": "Very large file: lib/production-vendo.js (6686 lines)", "shortDescription": {"text": "Very large file: lib/production-vendo.js (6686 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-123aa5dbd3219598", "name": "Very large file: public/production-dashboard.js (1817 lines)", "shortDescription": {"text": "Very large file: public/production-dashboard.js (1817 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a94e93954a1e82d", "name": "Very large file: public/wms/wms.js (1256 lines)", "shortDescription": {"text": "Very large file: public/wms/wms.js (1256 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-59f9b956543495b3", "name": "Very large file: public/zapotrzebowanie/zapotrzebowanie.js (5272 lines)", "shortDescription": {"text": "Very large file: public/zapotrzebowanie/zapotrzebowanie.js (5272 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-64898f6370064464", "name": "Very large file: public/mes/mes.js (1943 lines)", "shortDescription": {"text": "Very large file: public/mes/mes.js (1943 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-37cb6df8ddbcc167", "name": "Very large file: public/analyst/analyst.js (3290 lines)", "shortDescription": {"text": "Very large file: public/analyst/analyst.js (3290 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 42 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 9 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 16 placeholder/mock markers across 8 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. 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": "medium", "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, tests. 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-2679282aa1c484b5", "name": "Agent authority lacks a verifier contract: AGENTS.md", "shortDescription": {"text": "Agent authority lacks a verifier contract: AGENTS.md"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ecb0d2c55ed6875d", "name": "Agent authority lacks a verifier contract: .claude/settings.local.json", "shortDescription": {"text": "Agent authority lacks a verifier contract: .claude/settings.local.json"}, "fullDescription": {"text": "This agent instruction grants code or shell authority but does not state the verification gate that decides promotion. The recurring safe pattern is: LLM proposes; deterministic tests/build/security checks verify; only verified code promotes."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-951f9d88d5f19c65", "name": "`fetch()` without try/.catch or AbortSignal \u2014 mcp-http-stdio-proxy.js:31", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 mcp-http-stdio-proxy.js:31"}, "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-9940faee473b3a50", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/digikey-client.js:89", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/digikey-client.js:89"}, "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-e455eecad7dec00e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/piaskownica-app.js:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/piaskownica-app.js:42"}, "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-e27afc60fb86e069", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/app.js:928", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/app.js:928"}, "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-f62999fb8242a5fc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/kosztykkw-app.js:512", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/kosztykkw-app.js:512"}, "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-4268c15a2e67eb32", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/rentownosc-app.js:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/rentownosc-app.js:58"}, "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-b5249c8ea532ac2e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/production-dashboard.js:715", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/production-dashboard.js:715"}, "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-a134824531118040", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/zapotrzebowanie/zapotrzebowanie.js:366", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/zapotrzebowanie/zapotrzebowanie.js:366"}, "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-e17ffba4f15cf732", "name": "Legacy-named symbol `card__copy` in public/admin/admin.js:476", "shortDescription": {"text": "Legacy-named symbol `card__copy` in public/admin/admin.js:476"}, "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-2821c6e68e70c322", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/admin/admin.js:551", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/admin/admin.js:551"}, "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-6294f75b827dbe9a", "name": "FastAPI POST `pulse` without auth dependency \u2014 MES/api/main.py:9", "shortDescription": {"text": "FastAPI POST `pulse` without auth dependency \u2014 MES/api/main.py:9"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6de1b4968e4934a4", "name": "Dangling fetch: POST /api/zapotrzebowanie/wms/inventory (public/wms/wms.js:231)", "shortDescription": {"text": "Dangling fetch: POST /api/zapotrzebowanie/wms/inventory (public/wms/wms.js:231)"}, "fullDescription": {"text": "`public/wms/wms.js:231` calls `POST /api/zapotrzebowanie/wms/inventory` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zapotrzebowanie/wms/inventory`\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-e7a306124529a6f5", "name": "Dangling fetch: POST /api/zapotrzebowanie/wms/inventory/export (public/wms/wms.js:292)", "shortDescription": {"text": "Dangling fetch: POST /api/zapotrzebowanie/wms/inventory/export (public/wms/wms.js:292)"}, "fullDescription": {"text": "`public/wms/wms.js:292` calls `POST /api/zapotrzebowanie/wms/inventory/export` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zapotrzebowanie/wms/inventory/export`\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-7d7e53514a643d72", "name": "Dangling fetch: POST /api/zapotrzebowanie/wms/snapshot (public/wms/wms.js:344)", "shortDescription": {"text": "Dangling fetch: POST /api/zapotrzebowanie/wms/snapshot (public/wms/wms.js:344)"}, "fullDescription": {"text": "`public/wms/wms.js:344` calls `POST /api/zapotrzebowanie/wms/snapshot` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zapotrzebowanie/wms/snapshot`\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-61a9e96962f09440", "name": "Dangling fetch: POST /api/zapotrzebowanie/wms/diagnostics (public/wms/wms.js:387)", "shortDescription": {"text": "Dangling fetch: POST /api/zapotrzebowanie/wms/diagnostics (public/wms/wms.js:387)"}, "fullDescription": {"text": "`public/wms/wms.js:387` calls `POST /api/zapotrzebowanie/wms/diagnostics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zapotrzebowanie/wms/diagnostics`\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-2d6b333b6a123fe9", "name": "Dangling fetch: POST /api/zapotrzebowanie/wms/inventory/note (public/wms/wms.js:519)", "shortDescription": {"text": "Dangling fetch: POST /api/zapotrzebowanie/wms/inventory/note (public/wms/wms.js:519)"}, "fullDescription": {"text": "`public/wms/wms.js:519` calls `POST /api/zapotrzebowanie/wms/inventory/note` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zapotrzebowanie/wms/inventory/note`\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-78ea7b6219390943", "name": "Dangling fetch: POST /api/zapotrzebowanie/wms/rw/preview (public/wms/wms.js:612)", "shortDescription": {"text": "Dangling fetch: POST /api/zapotrzebowanie/wms/rw/preview (public/wms/wms.js:612)"}, "fullDescription": {"text": "`public/wms/wms.js:612` calls `POST /api/zapotrzebowanie/wms/rw/preview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zapotrzebowanie/wms/rw/preview`\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-68e5d86101c36686", "name": "Dangling fetch: POST /api/zapotrzebowanie/wms/rw/commit (public/wms/wms.js:746)", "shortDescription": {"text": "Dangling fetch: POST /api/zapotrzebowanie/wms/rw/commit (public/wms/wms.js:746)"}, "fullDescription": {"text": "`public/wms/wms.js:746` calls `POST /api/zapotrzebowanie/wms/rw/commit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zapotrzebowanie/wms/rw/commit`\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-4f032d9608c32f14", "name": "Dangling fetch: GET /api/zapotrzebowanie/wms/rw/documents (public/wms/wms.js:791)", "shortDescription": {"text": "Dangling fetch: GET /api/zapotrzebowanie/wms/rw/documents (public/wms/wms.js:791)"}, "fullDescription": {"text": "`public/wms/wms.js:791` calls `GET /api/zapotrzebowanie/wms/rw/documents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zapotrzebowanie/wms/rw/documents`\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-4c846f45e2d9044e", "name": "Dangling fetch: GET /api/zapotrzebowanie/wms/rw/documents/${encodeURIComponent(documentId)} (public/wms/wms.js:826)", "shortDescription": {"text": "Dangling fetch: GET /api/zapotrzebowanie/wms/rw/documents/${encodeURIComponent(documentId)} (public/wms/wms.js:826)"}, "fullDescription": {"text": "`public/wms/wms.js:826` calls `GET /api/zapotrzebowanie/wms/rw/documents/${encodeURIComponent(documentId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/zapotrzebowanie/wms/rw/documents/<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-840efc2d855c2f4d", "name": "Dangling fetch: POST /api/auth/login (public/login/login.js:23)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/login (public/login/login.js:23)"}, "fullDescription": {"text": "`public/login/login.js:23` calls `POST /api/auth/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/login`\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-0ae2ccc33c675adf", "name": "Dangling fetch: POST /api/smd-analyst/summary (public/smd-analyst/smd-analyst.js:135)", "shortDescription": {"text": "Dangling fetch: POST /api/smd-analyst/summary (public/smd-analyst/smd-analyst.js:135)"}, "fullDescription": {"text": "`public/smd-analyst/smd-analyst.js:135` calls `POST /api/smd-analyst/summary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/smd-analyst/summary`\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-b0243441c286d42c", "name": "Dangling fetch: GET /api/auth/me (public/core/shell.js:134)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/me (public/core/shell.js:134)"}, "fullDescription": {"text": "`public/core/shell.js:134` calls `GET /api/auth/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/me`\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-7d00dc10878d2db1", "name": "Dangling fetch: POST /api/auth/logout (public/core/shell.js:167)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/logout (public/core/shell.js:167)"}, "fullDescription": {"text": "`public/core/shell.js:167` calls `POST /api/auth/logout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/logout`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-22353b30370c5c68", "name": "Dangling fetch: POST /api/analyst/alerts/send-test (public/analyst/analyst.js:449)", "shortDescription": {"text": "Dangling fetch: POST /api/analyst/alerts/send-test (public/analyst/analyst.js:449)"}, "fullDescription": {"text": "`public/analyst/analyst.js:449` calls `POST /api/analyst/alerts/send-test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analyst/alerts/send-test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1634c4d4efca822d", "name": "Dangling fetch: POST /api/analyst/operator-feedback (public/analyst/analyst.js:1796)", "shortDescription": {"text": "Dangling fetch: POST /api/analyst/operator-feedback (public/analyst/analyst.js:1796)"}, "fullDescription": {"text": "`public/analyst/analyst.js:1796` calls `POST /api/analyst/operator-feedback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analyst/operator-feedback`\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-8a2785c8a0e01f80", "name": "Dangling fetch: POST /api/analyst/operator-feedback (public/analyst/analyst.js:1875)", "shortDescription": {"text": "Dangling fetch: POST /api/analyst/operator-feedback (public/analyst/analyst.js:1875)"}, "fullDescription": {"text": "`public/analyst/analyst.js:1875` calls `POST /api/analyst/operator-feedback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analyst/operator-feedback`\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-5883e8569d72f5d1", "name": "Unused endpoint: POST /pulse", "shortDescription": {"text": "Unused endpoint: POST /pulse"}, "fullDescription": {"text": "`MES/api/main.py` declares `POST /pulse` 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/25475"}, "properties": {"repository": "doman2508/API_Vendo", "repoUrl": "https://github.com/doman2508/API_Vendo", "branch": "main"}, "results": [{"ruleId": "scanner-bf7b39be61ac242c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server.js:6344"}, "properties": {"repobilityId": "a9deebb5fdc93edc", "scanner": "scanner-primary", "fingerprint": "bf7b39be61ac242c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-3ec851fdc924c5fd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-tme-customer-symbols.js:73"}, "properties": {"repobilityId": "018d39c419e96e0a", "scanner": "scanner-primary", "fingerprint": "3ec851fdc924c5fd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9132b065fd7a76c6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-lcsc-history.js:70"}, "properties": {"repobilityId": "de57bf6a48f37446", "scanner": "scanner-primary", "fingerprint": "9132b065fd7a76c6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-258c124c8fe0120b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-local-mes-demo.js:268"}, "properties": {"repobilityId": "68f357bbceccaf46", "scanner": "scanner-primary", "fingerprint": "258c124c8fe0120b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fbef5690ef168903", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-digikey-history.js:76"}, "properties": {"repobilityId": "402957392343539f", "scanner": "scanner-primary", "fingerprint": "fbef5690ef168903", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-70851972e2328ed8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 lib/auth-store.js:88"}, "properties": {"repobilityId": "aff640b2419b989a", "scanner": "scanner-primary", "fingerprint": "70851972e2328ed8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-564acdda57419717", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in mcp-production-server.js:1141"}, "properties": {"repobilityId": "88619e846d4b2463", "scanner": "scanner-primary", "fingerprint": "564acdda57419717", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "mcp-production-server.js"}, "region": {"startLine": 1141}}}]}, {"ruleId": "scanner-0c73ab9a1d129520", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in server.js:6"}, "properties": {"repobilityId": "23f3ba0b6e438ed3", "scanner": "scanner-primary", "fingerprint": "0c73ab9a1d129520", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "server.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-3c276c8381643a85", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in lib/lcsc-history-import.js:6"}, "properties": {"repobilityId": "c6df75b23127fbaf", "scanner": "scanner-primary", "fingerprint": "3c276c8381643a85", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lib/lcsc-history-import.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-f16215feadbbea98", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/start.js:32"}, "properties": {"repobilityId": "2d7ae68004c01c0b", "scanner": "scanner-primary", "fingerprint": "f16215feadbbea98", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/start.js"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-fe1e38b8ecbcba28", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/piaskownica-app.js:55"}, "properties": {"repobilityId": "9f23adcb33954852", "scanner": "scanner-primary", "fingerprint": "fe1e38b8ecbcba28", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/piaskownica-app.js"}, "region": {"startLine": 55}}}]}, {"ruleId": "scanner-6abf244b9150ed6c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/app.js:170"}, "properties": {"repobilityId": "5192b9054ebe3f07", "scanner": "scanner-primary", "fingerprint": "6abf244b9150ed6c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/app.js"}, "region": {"startLine": 170}}}]}, {"ruleId": "scanner-182a7f64f8f7423d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/kosztykkw-app.js:133"}, "properties": {"repobilityId": "5c8cb3716aa733bc", "scanner": "scanner-primary", "fingerprint": "182a7f64f8f7423d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/kosztykkw-app.js"}, "region": {"startLine": 133}}}]}, {"ruleId": "scanner-cbc172803e37c2bc", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in public/kosztykkw-app.js:614"}, "properties": {"repobilityId": "cc2baa8eaed20aa1", "scanner": "scanner-primary", "fingerprint": "cbc172803e37c2bc", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/kosztykkw-app.js"}, "region": {"startLine": 614}}}]}, {"ruleId": "scanner-f23ba765f685f34a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/rentownosc-app.js:77"}, "properties": {"repobilityId": "4e695ca6b863d4db", "scanner": "scanner-primary", "fingerprint": "f23ba765f685f34a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/rentownosc-app.js"}, "region": {"startLine": 77}}}]}, {"ruleId": "scanner-3e43a70d2c2ada65", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/production-dashboard.js:743"}, "properties": {"repobilityId": "0fc06d6acbe5cd3f", "scanner": "scanner-primary", "fingerprint": "3e43a70d2c2ada65", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/production-dashboard.js"}, "region": {"startLine": 743}}}]}, {"ruleId": "scanner-3f154777de92475b", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in public/production-dashboard.js:1757"}, "properties": {"repobilityId": "de7eed240e8f73ec", "scanner": "scanner-primary", "fingerprint": "3f154777de92475b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/production-dashboard.js"}, "region": {"startLine": 1757}}}]}, {"ruleId": "scanner-f887f29005a711d0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/wms/wms.js:425"}, "properties": {"repobilityId": "5a62beee201c950f", "scanner": "scanner-primary", "fingerprint": "f887f29005a711d0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/wms/wms.js"}, "region": {"startLine": 425}}}]}, {"ruleId": "scanner-078309d31222af86", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/zapotrzebowanie/zapotrzebowanie.js:693"}, "properties": {"repobilityId": "4a276b63f311fd13", "scanner": "scanner-primary", "fingerprint": "078309d31222af86", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/zapotrzebowanie/zapotrzebowanie.js"}, "region": {"startLine": 693}}}]}, {"ruleId": "scanner-416c885d83e5de57", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/admin/admin.js:232"}, "properties": {"repobilityId": "ed921bb0ddff002c", "scanner": "scanner-primary", "fingerprint": "416c885d83e5de57", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/admin/admin.js"}, "region": {"startLine": 232}}}]}, {"ruleId": "scanner-af4aae3148d06cfa", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/operator-dashboard/operator-dashboard.js:269"}, "properties": {"repobilityId": "f1c52db4057e136e", "scanner": "scanner-primary", "fingerprint": "af4aae3148d06cfa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/operator-dashboard/operator-dashboard.js"}, "region": {"startLine": 269}}}]}, {"ruleId": "scanner-4956ca6d573b001c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/smd-analyst/smd-analyst.js:198"}, "properties": {"repobilityId": "465f9029ae576130", "scanner": "scanner-primary", "fingerprint": "4956ca6d573b001c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/smd-analyst/smd-analyst.js"}, "region": {"startLine": 198}}}]}, {"ruleId": "scanner-1a95b128270a9f0e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/mes/mes.js:675"}, "properties": {"repobilityId": "0da23bdc0256f6ae", "scanner": "scanner-primary", "fingerprint": "1a95b128270a9f0e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/mes/mes.js"}, "region": {"startLine": 675}}}]}, {"ruleId": "scanner-11a29a767172993d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/mes/operator/operator.js:307"}, "properties": {"repobilityId": "114c9def20c3835a", "scanner": "scanner-primary", "fingerprint": "11a29a767172993d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/mes/operator/operator.js"}, "region": {"startLine": 307}}}]}, {"ruleId": "scanner-4f58f72cb9743617", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/core/shell.js:72"}, "properties": {"repobilityId": "c929ae03a5997c08", "scanner": "scanner-primary", "fingerprint": "4f58f72cb9743617", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/core/shell.js"}, "region": {"startLine": 72}}}]}, {"ruleId": "scanner-018d4d385dbe0ec3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/operator/operator.js:114"}, "properties": {"repobilityId": "3fbcd1f280440d2c", "scanner": "scanner-primary", "fingerprint": "018d4d385dbe0ec3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/operator/operator.js"}, "region": {"startLine": 114}}}]}, {"ruleId": "scanner-b2466a706700bbbb", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/analyst/analyst.js:579"}, "properties": {"repobilityId": "0ee50000c0317c3b", "scanner": "scanner-primary", "fingerprint": "b2466a706700bbbb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/analyst/analyst.js"}, "region": {"startLine": 579}}}]}, {"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-0e4b02727604555d", "level": "note", "message": {"text": "Very large file: server.js (11574 lines)"}, "properties": {"repobilityId": "1479ba50e708c5c1", "scanner": "scanner-primary", "fingerprint": "0e4b02727604555d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c73ca15ca25de500", "level": "note", "message": {"text": "Very large file: lib/zapotrzebowanie-sqlite.js (1896 lines)"}, "properties": {"repobilityId": "ade2b8b177266a1d", "scanner": "scanner-primary", "fingerprint": "c73ca15ca25de500", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3612fa730d1e014d", "level": "note", "message": {"text": "Very large file: lib/mes-sqlite.js (3141 lines)"}, "properties": {"repobilityId": "7e085dc0aef20c5b", "scanner": "scanner-primary", "fingerprint": "3612fa730d1e014d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bca106f485ef1a19", "level": "note", "message": {"text": "Very large file: lib/production-vendo.js (6686 lines)"}, "properties": {"repobilityId": "cd4b116a4f087674", "scanner": "scanner-primary", "fingerprint": "bca106f485ef1a19", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-123aa5dbd3219598", "level": "note", "message": {"text": "Very large file: public/production-dashboard.js (1817 lines)"}, "properties": {"repobilityId": "7341d36cde650edf", "scanner": "scanner-primary", "fingerprint": "123aa5dbd3219598", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7a94e93954a1e82d", "level": "note", "message": {"text": "Very large file: public/wms/wms.js (1256 lines)"}, "properties": {"repobilityId": "10be3ed849ca24b8", "scanner": "scanner-primary", "fingerprint": "7a94e93954a1e82d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-59f9b956543495b3", "level": "note", "message": {"text": "Very large file: public/zapotrzebowanie/zapotrzebowanie.js (5272 lines)"}, "properties": {"repobilityId": "bdbc725c73feb021", "scanner": "scanner-primary", "fingerprint": "59f9b956543495b3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-64898f6370064464", "level": "note", "message": {"text": "Very large file: public/mes/mes.js (1943 lines)"}, "properties": {"repobilityId": "13a4673b223c7f48", "scanner": "scanner-primary", "fingerprint": "64898f6370064464", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-37cb6df8ddbcc167", "level": "note", "message": {"text": "Very large file: public/analyst/analyst.js (3290 lines)"}, "properties": {"repobilityId": "079b993e6e3eecff", "scanner": "scanner-primary", "fingerprint": "37cb6df8ddbcc167", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "741477135fbb5860", "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": "3bb5a8a0ba5833a5", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "79440e69e681726b", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "8acd0a1bdc44ec56", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "bc773844f36c4d92", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "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": "2e06b40b0886aa0d", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2679282aa1c484b5", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: AGENTS.md"}, "properties": {"repobilityId": "27d579812e6be614", "scanner": "scanner-primary", "fingerprint": "2679282aa1c484b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "AGENTS.md"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-ecb0d2c55ed6875d", "level": "warning", "message": {"text": "Agent authority lacks a verifier contract: .claude/settings.local.json"}, "properties": {"repobilityId": "d8bae33a6d517bf0", "scanner": "scanner-primary", "fingerprint": "ecb0d2c55ed6875d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "verification", "claude_instruction"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".claude/settings.local.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-951f9d88d5f19c65", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 mcp-http-stdio-proxy.js:31"}, "properties": {"repobilityId": "3487bb9e0cbac13c", "scanner": "scanner-primary", "fingerprint": "951f9d88d5f19c65", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9940faee473b3a50", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/digikey-client.js:89"}, "properties": {"repobilityId": "996c3a58c84a8aa4", "scanner": "scanner-primary", "fingerprint": "9940faee473b3a50", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e455eecad7dec00e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/piaskownica-app.js:42"}, "properties": {"repobilityId": "21d5d6dd6f8260ec", "scanner": "scanner-primary", "fingerprint": "e455eecad7dec00e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e27afc60fb86e069", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/app.js:928"}, "properties": {"repobilityId": "55f006ce7cbe94ce", "scanner": "scanner-primary", "fingerprint": "e27afc60fb86e069", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f62999fb8242a5fc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/kosztykkw-app.js:512"}, "properties": {"repobilityId": "56dc13835a9cbb5e", "scanner": "scanner-primary", "fingerprint": "f62999fb8242a5fc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4268c15a2e67eb32", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/rentownosc-app.js:58"}, "properties": {"repobilityId": "92b4b175801bae9a", "scanner": "scanner-primary", "fingerprint": "4268c15a2e67eb32", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b5249c8ea532ac2e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/production-dashboard.js:715"}, "properties": {"repobilityId": "80b4ffd5c39bbfa7", "scanner": "scanner-primary", "fingerprint": "b5249c8ea532ac2e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a134824531118040", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/zapotrzebowanie/zapotrzebowanie.js:366"}, "properties": {"repobilityId": "b7d50d77e0c507e1", "scanner": "scanner-primary", "fingerprint": "a134824531118040", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e17ffba4f15cf732", "level": "note", "message": {"text": "Legacy-named symbol `card__copy` in public/admin/admin.js:476"}, "properties": {"repobilityId": "da6710948f1fba07", "scanner": "scanner-primary", "fingerprint": "e17ffba4f15cf732", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2821c6e68e70c322", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/admin/admin.js:551"}, "properties": {"repobilityId": "13d26f1f88c8bf55", "scanner": "scanner-primary", "fingerprint": "2821c6e68e70c322", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6294f75b827dbe9a", "level": "error", "message": {"text": "FastAPI POST `pulse` without auth dependency \u2014 MES/api/main.py:9"}, "properties": {"repobilityId": "dc8623b7632cb6f1", "scanner": "scanner-primary", "fingerprint": "6294f75b827dbe9a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "MES/api/main.py"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-6de1b4968e4934a4", "level": "error", "message": {"text": "Dangling fetch: POST /api/zapotrzebowanie/wms/inventory (public/wms/wms.js:231)"}, "properties": {"repobilityId": "f722b8382bfb825b", "scanner": "scanner-primary", "fingerprint": "6de1b4968e4934a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e7a306124529a6f5", "level": "error", "message": {"text": "Dangling fetch: POST /api/zapotrzebowanie/wms/inventory/export (public/wms/wms.js:292)"}, "properties": {"repobilityId": "4ba79700dea23397", "scanner": "scanner-primary", "fingerprint": "e7a306124529a6f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7d7e53514a643d72", "level": "error", "message": {"text": "Dangling fetch: POST /api/zapotrzebowanie/wms/snapshot (public/wms/wms.js:344)"}, "properties": {"repobilityId": "5871579b3a9989d7", "scanner": "scanner-primary", "fingerprint": "7d7e53514a643d72", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-61a9e96962f09440", "level": "error", "message": {"text": "Dangling fetch: POST /api/zapotrzebowanie/wms/diagnostics (public/wms/wms.js:387)"}, "properties": {"repobilityId": "91ceeaeba678baf7", "scanner": "scanner-primary", "fingerprint": "61a9e96962f09440", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2d6b333b6a123fe9", "level": "error", "message": {"text": "Dangling fetch: POST /api/zapotrzebowanie/wms/inventory/note (public/wms/wms.js:519)"}, "properties": {"repobilityId": "2a1bcd4c2144b6dd", "scanner": "scanner-primary", "fingerprint": "2d6b333b6a123fe9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-78ea7b6219390943", "level": "error", "message": {"text": "Dangling fetch: POST /api/zapotrzebowanie/wms/rw/preview (public/wms/wms.js:612)"}, "properties": {"repobilityId": "ee9f720eec650320", "scanner": "scanner-primary", "fingerprint": "78ea7b6219390943", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-68e5d86101c36686", "level": "error", "message": {"text": "Dangling fetch: POST /api/zapotrzebowanie/wms/rw/commit (public/wms/wms.js:746)"}, "properties": {"repobilityId": "c36dc5b3f2f5ed71", "scanner": "scanner-primary", "fingerprint": "68e5d86101c36686", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4f032d9608c32f14", "level": "error", "message": {"text": "Dangling fetch: GET /api/zapotrzebowanie/wms/rw/documents (public/wms/wms.js:791)"}, "properties": {"repobilityId": "660a5bca9058403e", "scanner": "scanner-primary", "fingerprint": "4f032d9608c32f14", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c846f45e2d9044e", "level": "error", "message": {"text": "Dangling fetch: GET /api/zapotrzebowanie/wms/rw/documents/${encodeURIComponent(documentId)} (public/wms/wms.js:826)"}, "properties": {"repobilityId": "bb34e5edbe00db9e", "scanner": "scanner-primary", "fingerprint": "4c846f45e2d9044e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-840efc2d855c2f4d", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/login (public/login/login.js:23)"}, "properties": {"repobilityId": "9e1cb103e7cfd05e", "scanner": "scanner-primary", "fingerprint": "840efc2d855c2f4d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0ae2ccc33c675adf", "level": "error", "message": {"text": "Dangling fetch: POST /api/smd-analyst/summary (public/smd-analyst/smd-analyst.js:135)"}, "properties": {"repobilityId": "e767ca6e31473c53", "scanner": "scanner-primary", "fingerprint": "0ae2ccc33c675adf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b0243441c286d42c", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/me (public/core/shell.js:134)"}, "properties": {"repobilityId": "e54c777174ceeb09", "scanner": "scanner-primary", "fingerprint": "b0243441c286d42c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7d00dc10878d2db1", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/logout (public/core/shell.js:167)"}, "properties": {"repobilityId": "12a2c87b0f673e16", "scanner": "scanner-primary", "fingerprint": "7d00dc10878d2db1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-22353b30370c5c68", "level": "error", "message": {"text": "Dangling fetch: POST /api/analyst/alerts/send-test (public/analyst/analyst.js:449)"}, "properties": {"repobilityId": "28b2c95d72241dbc", "scanner": "scanner-primary", "fingerprint": "22353b30370c5c68", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1634c4d4efca822d", "level": "error", "message": {"text": "Dangling fetch: POST /api/analyst/operator-feedback (public/analyst/analyst.js:1796)"}, "properties": {"repobilityId": "d2b11f06d917ec72", "scanner": "scanner-primary", "fingerprint": "1634c4d4efca822d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8a2785c8a0e01f80", "level": "error", "message": {"text": "Dangling fetch: POST /api/analyst/operator-feedback (public/analyst/analyst.js:1875)"}, "properties": {"repobilityId": "6334c65e257c7637", "scanner": "scanner-primary", "fingerprint": "8a2785c8a0e01f80", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5883e8569d72f5d1", "level": "note", "message": {"text": "Unused endpoint: POST /pulse"}, "properties": {"repobilityId": "153e97e3c91ef19d", "scanner": "scanner-primary", "fingerprint": "5883e8569d72f5d1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}