{"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-82812c6f618ad39d", "name": "Icon-only button without accessible name \u2014 app.js:520", "shortDescription": {"text": "Icon-only button without accessible name \u2014 app.js:520"}, "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-b5612c79d364aa52", "name": "Stray `console.log` in TS/JS \u2014 client/src/preview.jsx:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 client/src/preview.jsx:31"}, "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-ffaa33295b9e382a", "name": "Stray `console.log` in TS/JS \u2014 server/seed_dummy_admin.js:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/seed_dummy_admin.js:20"}, "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-208b2fb3ef844c0b", "name": "Stray `console.log` in TS/JS \u2014 server/seed_recipes.js:345", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/seed_recipes.js:345"}, "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-2e208446c221013a", "name": "Stray `console.log` in TS/JS \u2014 server/index.js:107", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 server/index.js:107"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d63da3583b14afc0", "name": "Dockerfile runs as root: Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a35c6a00f751880f", "name": "Docker base image is tag-pinned but not digest-pinned: node:20-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-860ca59d0d1b7553", "name": "Runtime dotenv file present in repo: client/.env.production", "shortDescription": {"text": "Runtime dotenv file present in repo: client/.env.production"}, "fullDescription": {"text": "`client/.env.production` looks like a runtime dotenv file. No high-confidence secret value was matched, but runtime dotenv files often drift into live credentials. Move real values to a secret manager and keep only `.env.example` style templates in source control."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-46645b85ce5756e0", "name": "Runtime dotenv file present in repo: client/.env.cloud", "shortDescription": {"text": "Runtime dotenv file present in repo: client/.env.cloud"}, "fullDescription": {"text": "`client/.env.cloud` looks like a runtime dotenv file. No high-confidence secret value was matched, but runtime dotenv files often drift into live credentials. Move real values to a secret manager and keep only `.env.example` style templates in source control."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-148ff71acb139ea2", "name": "Insecure pattern 'direct_innerhtml_assignment' in streetwok-pos-preview_3.html:704", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in streetwok-pos-preview_3.html:704"}, "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-1d981f140a967c05", "name": "Insecure pattern 'direct_innerhtml_assignment' in app.js:374", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in app.js:374"}, "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-28c4a04bd807da0c", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "appleboy/ssh-action@v1.0.0 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 45 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 19 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 31 placeholder/mock markers across 14 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-11825279136b53a3", "name": "CI is configured but no tests are detected", "shortDescription": {"text": "CI is configured but no tests are detected"}, "fullDescription": {"text": "A CI pipeline exists, but the scan found no test files to gate. Opus labeled this generated-code pattern as config theater: release machinery exists, but it has little behavioral signal."}, "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, 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": "low", "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-cec939fab6619cb2", "name": "Commented-code block (6 lines) in server/seed_recipes.js:7", "shortDescription": {"text": "Commented-code block (6 lines) in server/seed_recipes.js:7"}, "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-38c8cf19a99059a0", "name": "Commented-code block (5 lines) in server/stockLedger.js:5", "shortDescription": {"text": "Commented-code block (5 lines) in server/stockLedger.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-4f89a4ec363e904f", "name": "Commented-code block (6 lines) in server/routes/orders.js:126", "shortDescription": {"text": "Commented-code block (6 lines) in server/routes/orders.js:126"}, "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-d0b17c8c07a7421d", "name": "8 env vars used in code but missing from .env.example", "shortDescription": {"text": "8 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `DB_PATH`, `DEFAULT_ORG_NAME`, `DEFAULT_USER_EMAIL`, `DEFAULT_USER_NAME`, `GOOGLE_CLIENT_ID`, `JWT_SECRET`, `PORT`, `VITE_API_URL`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4f5c6d575cc52a0b", "name": "Dangling fetch: POST /auth/google (client/src/api.js:99)", "shortDescription": {"text": "Dangling fetch: POST /auth/google (client/src/api.js:99)"}, "fullDescription": {"text": "`client/src/api.js:99` calls `POST /auth/google` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/google`\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-cdd265d107917dec", "name": "Dangling fetch: POST /auth/setup-profile (client/src/api.js:100)", "shortDescription": {"text": "Dangling fetch: POST /auth/setup-profile (client/src/api.js:100)"}, "fullDescription": {"text": "`client/src/api.js:100` calls `POST /auth/setup-profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/setup-profile`\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-5ab639467e3be2ec", "name": "Dangling fetch: POST /auth/login (client/src/api.js:101)", "shortDescription": {"text": "Dangling fetch: POST /auth/login (client/src/api.js:101)"}, "fullDescription": {"text": "`client/src/api.js:101` calls `POST /auth/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\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-9e8ae649c3730ef5", "name": "Dangling fetch: POST /menu (client/src/api.js:111)", "shortDescription": {"text": "Dangling fetch: POST /menu (client/src/api.js:111)"}, "fullDescription": {"text": "`client/src/api.js:111` calls `POST /menu` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/menu`\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-3888062cddfc8d9d", "name": "Dangling fetch: PUT /menu/${id} (client/src/api.js:112)", "shortDescription": {"text": "Dangling fetch: PUT /menu/${id} (client/src/api.js:112)"}, "fullDescription": {"text": "`client/src/api.js:112` calls `PUT /menu/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/menu/<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-3dc2252bfd9c72ca", "name": "Dangling fetch: DELETE /menu/${id} (client/src/api.js:113)", "shortDescription": {"text": "Dangling fetch: DELETE /menu/${id} (client/src/api.js:113)"}, "fullDescription": {"text": "`client/src/api.js:113` calls `DELETE /menu/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/menu/<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-57f21e99efb59c88", "name": "Dangling fetch: GET /orders${qs} (client/src/api.js:118)", "shortDescription": {"text": "Dangling fetch: GET /orders${qs} (client/src/api.js:118)"}, "fullDescription": {"text": "`client/src/api.js:118` calls `GET /orders${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/orders/<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-fe752b48cd1880e7", "name": "Dangling fetch: POST /orders (client/src/api.js:120)", "shortDescription": {"text": "Dangling fetch: POST /orders (client/src/api.js:120)"}, "fullDescription": {"text": "`client/src/api.js:120` calls `POST /orders` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/orders`\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-8d940b8492e450c0", "name": "Dangling fetch: DELETE /orders/${id} (client/src/api.js:121)", "shortDescription": {"text": "Dangling fetch: DELETE /orders/${id} (client/src/api.js:121)"}, "fullDescription": {"text": "`client/src/api.js:121` calls `DELETE /orders/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/orders/<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-1dbc9e4417accb0a", "name": "Dangling fetch: GET /inventory (client/src/api.js:125)", "shortDescription": {"text": "Dangling fetch: GET /inventory (client/src/api.js:125)"}, "fullDescription": {"text": "`client/src/api.js:125` calls `GET /inventory` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-ba8fc0564e4af550", "name": "Dangling fetch: POST /inventory (client/src/api.js:126)", "shortDescription": {"text": "Dangling fetch: POST /inventory (client/src/api.js:126)"}, "fullDescription": {"text": "`client/src/api.js:126` calls `POST /inventory` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-cf7a578cf9317cb8", "name": "Dangling fetch: PUT /inventory/${id} (client/src/api.js:127)", "shortDescription": {"text": "Dangling fetch: PUT /inventory/${id} (client/src/api.js:127)"}, "fullDescription": {"text": "`client/src/api.js:127` calls `PUT /inventory/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/inventory/<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-0240e51c02923210", "name": "Dangling fetch: PUT /inventory (client/src/api.js:128)", "shortDescription": {"text": "Dangling fetch: PUT /inventory (client/src/api.js:128)"}, "fullDescription": {"text": "`client/src/api.js:128` calls `PUT /inventory` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-f15f2dc2b188d6fb", "name": "Dangling fetch: DELETE /inventory/${id} (client/src/api.js:129)", "shortDescription": {"text": "Dangling fetch: DELETE /inventory/${id} (client/src/api.js:129)"}, "fullDescription": {"text": "`client/src/api.js:129` calls `DELETE /inventory/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/inventory/<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-4e630405cd3c310e", "name": "Dangling fetch: GET /recipes/${menuItemId} (client/src/api.js:132)", "shortDescription": {"text": "Dangling fetch: GET /recipes/${menuItemId} (client/src/api.js:132)"}, "fullDescription": {"text": "`client/src/api.js:132` calls `GET /recipes/${menuItemId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/recipes/<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-90a229d915de3067", "name": "Dangling fetch: PUT /recipes/${menuItemId} (client/src/api.js:134)", "shortDescription": {"text": "Dangling fetch: PUT /recipes/${menuItemId} (client/src/api.js:134)"}, "fullDescription": {"text": "`client/src/api.js:134` calls `PUT /recipes/${menuItemId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/recipes/<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-c089d55856402bc2", "name": "Dangling fetch: GET /reports/summary (client/src/api.js:137)", "shortDescription": {"text": "Dangling fetch: GET /reports/summary (client/src/api.js:137)"}, "fullDescription": {"text": "`client/src/api.js:137` calls `GET /reports/summary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/reports/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-1b9be7c475d412f9", "name": "Dangling fetch: GET /reports/daily (client/src/api.js:138)", "shortDescription": {"text": "Dangling fetch: GET /reports/daily (client/src/api.js:138)"}, "fullDescription": {"text": "`client/src/api.js:138` calls `GET /reports/daily` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/reports/daily`\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-6eefc2ca08000703", "name": "Dangling fetch: GET /reports/monthly (client/src/api.js:139)", "shortDescription": {"text": "Dangling fetch: GET /reports/monthly (client/src/api.js:139)"}, "fullDescription": {"text": "`client/src/api.js:139` calls `GET /reports/monthly` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/reports/monthly`\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-0fbdb45cdf7e558c", "name": "Dangling fetch: GET /reports/today-items (client/src/api.js:140)", "shortDescription": {"text": "Dangling fetch: GET /reports/today-items (client/src/api.js:140)"}, "fullDescription": {"text": "`client/src/api.js:140` calls `GET /reports/today-items` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/reports/today-items`\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-5e537f99a075ef74", "name": "Dangling fetch: GET /reports/top-items (client/src/api.js:141)", "shortDescription": {"text": "Dangling fetch: GET /reports/top-items (client/src/api.js:141)"}, "fullDescription": {"text": "`client/src/api.js:141` calls `GET /reports/top-items` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/reports/top-items`\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-9a83253d94f8a446", "name": "Dangling fetch: GET /reports/counter (client/src/api.js:142)", "shortDescription": {"text": "Dangling fetch: GET /reports/counter (client/src/api.js:142)"}, "fullDescription": {"text": "`client/src/api.js:142` calls `GET /reports/counter` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/reports/counter`\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-1388ec7b2a4a2e31", "name": "Dangling fetch: GET /users (client/src/api.js:149)", "shortDescription": {"text": "Dangling fetch: GET /users (client/src/api.js:149)"}, "fullDescription": {"text": "`client/src/api.js:149` calls `GET /users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/users`\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-dae38d26c62e1c11", "name": "Dangling fetch: POST /users (client/src/api.js:150)", "shortDescription": {"text": "Dangling fetch: POST /users (client/src/api.js:150)"}, "fullDescription": {"text": "`client/src/api.js:150` calls `POST /users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/users`\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-0d010c04b3901f9e", "name": "Dangling fetch: PUT /users/${id} (client/src/api.js:151)", "shortDescription": {"text": "Dangling fetch: PUT /users/${id} (client/src/api.js:151)"}, "fullDescription": {"text": "`client/src/api.js:151` calls `PUT /users/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/users/<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-f3eb2d70dc43082f", "name": "Dangling fetch: DELETE /users/${id} (client/src/api.js:152)", "shortDescription": {"text": "Dangling fetch: DELETE /users/${id} (client/src/api.js:152)"}, "fullDescription": {"text": "`client/src/api.js:152` calls `DELETE /users/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/users/<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-510eee9ea919bcc6", "name": "Dangling fetch: GET /warehouses (client/src/api.js:155)", "shortDescription": {"text": "Dangling fetch: GET /warehouses (client/src/api.js:155)"}, "fullDescription": {"text": "`client/src/api.js:155` calls `GET /warehouses` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/warehouses`\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-34baeb7694ae5371", "name": "Dangling fetch: POST /warehouses (client/src/api.js:156)", "shortDescription": {"text": "Dangling fetch: POST /warehouses (client/src/api.js:156)"}, "fullDescription": {"text": "`client/src/api.js:156` calls `POST /warehouses` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/warehouses`\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-94933f369b8751cc", "name": "Dangling fetch: PUT /warehouses/${id} (client/src/api.js:157)", "shortDescription": {"text": "Dangling fetch: PUT /warehouses/${id} (client/src/api.js:157)"}, "fullDescription": {"text": "`client/src/api.js:157` calls `PUT /warehouses/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/warehouses/<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-c593861f32382b55", "name": "Dangling fetch: DELETE /warehouses/${id} (client/src/api.js:158)", "shortDescription": {"text": "Dangling fetch: DELETE /warehouses/${id} (client/src/api.js:158)"}, "fullDescription": {"text": "`client/src/api.js:158` calls `DELETE /warehouses/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/warehouses/<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-295f32380e2cfb82", "name": "Dangling fetch: GET /suppliers${qs} (client/src/api.js:161)", "shortDescription": {"text": "Dangling fetch: GET /suppliers${qs} (client/src/api.js:161)"}, "fullDescription": {"text": "`client/src/api.js:161` calls `GET /suppliers${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/suppliers/<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-bb3d523219bc28a0", "name": "Dangling fetch: GET /suppliers/${id} (client/src/api.js:162)", "shortDescription": {"text": "Dangling fetch: GET /suppliers/${id} (client/src/api.js:162)"}, "fullDescription": {"text": "`client/src/api.js:162` calls `GET /suppliers/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/suppliers/<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-efcc026bd27894eb", "name": "Dangling fetch: POST /suppliers (client/src/api.js:163)", "shortDescription": {"text": "Dangling fetch: POST /suppliers (client/src/api.js:163)"}, "fullDescription": {"text": "`client/src/api.js:163` calls `POST /suppliers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/suppliers`\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-ace164d27417b5ae", "name": "Dangling fetch: PUT /suppliers/${id} (client/src/api.js:164)", "shortDescription": {"text": "Dangling fetch: PUT /suppliers/${id} (client/src/api.js:164)"}, "fullDescription": {"text": "`client/src/api.js:164` calls `PUT /suppliers/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/suppliers/<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-ce2e51d412580016", "name": "Dangling fetch: DELETE /suppliers/${id} (client/src/api.js:165)", "shortDescription": {"text": "Dangling fetch: DELETE /suppliers/${id} (client/src/api.js:165)"}, "fullDescription": {"text": "`client/src/api.js:165` calls `DELETE /suppliers/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/suppliers/<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-31249744ec1cdd27", "name": "Dangling fetch: GET /purchase-bills${qs} (client/src/api.js:168)", "shortDescription": {"text": "Dangling fetch: GET /purchase-bills${qs} (client/src/api.js:168)"}, "fullDescription": {"text": "`client/src/api.js:168` calls `GET /purchase-bills${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/purchase-bills/<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-2be68880d5880072", "name": "Dangling fetch: GET /purchase-bills/${id} (client/src/api.js:169)", "shortDescription": {"text": "Dangling fetch: GET /purchase-bills/${id} (client/src/api.js:169)"}, "fullDescription": {"text": "`client/src/api.js:169` calls `GET /purchase-bills/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/purchase-bills/<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-33e4c1098ab1645a", "name": "Dangling fetch: POST /purchase-bills (client/src/api.js:170)", "shortDescription": {"text": "Dangling fetch: POST /purchase-bills (client/src/api.js:170)"}, "fullDescription": {"text": "`client/src/api.js:170` calls `POST /purchase-bills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/purchase-bills`\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-9cbae38c74acd16e", "name": "Dangling fetch: PUT /purchase-bills/${id} (client/src/api.js:171)", "shortDescription": {"text": "Dangling fetch: PUT /purchase-bills/${id} (client/src/api.js:171)"}, "fullDescription": {"text": "`client/src/api.js:171` calls `PUT /purchase-bills/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/purchase-bills/<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-8f220ae199291eb4", "name": "Dangling fetch: POST /purchase-bills/${id}/submit (client/src/api.js:172)", "shortDescription": {"text": "Dangling fetch: POST /purchase-bills/${id}/submit (client/src/api.js:172)"}, "fullDescription": {"text": "`client/src/api.js:172` calls `POST /purchase-bills/${id}/submit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/purchase-bills/<p>/submit`\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-5bad4de1f22f146b", "name": "Dangling fetch: POST /purchase-bills/${id}/cancel (client/src/api.js:173)", "shortDescription": {"text": "Dangling fetch: POST /purchase-bills/${id}/cancel (client/src/api.js:173)"}, "fullDescription": {"text": "`client/src/api.js:173` calls `POST /purchase-bills/${id}/cancel` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/purchase-bills/<p>/cancel`\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-cfbcd3e0005a3ea2", "name": "Dangling fetch: GET /expenses${qs} (client/src/api.js:176)", "shortDescription": {"text": "Dangling fetch: GET /expenses${qs} (client/src/api.js:176)"}, "fullDescription": {"text": "`client/src/api.js:176` calls `GET /expenses${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/expenses/<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-42f4eddafb23571f", "name": "Dangling fetch: GET /expenses/${id} (client/src/api.js:177)", "shortDescription": {"text": "Dangling fetch: GET /expenses/${id} (client/src/api.js:177)"}, "fullDescription": {"text": "`client/src/api.js:177` calls `GET /expenses/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/expenses/<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-8dfb55fb2d84cb60", "name": "Dangling fetch: POST /expenses (client/src/api.js:178)", "shortDescription": {"text": "Dangling fetch: POST /expenses (client/src/api.js:178)"}, "fullDescription": {"text": "`client/src/api.js:178` calls `POST /expenses` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/expenses`\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-47ac715b0b19bc61", "name": "Dangling fetch: PUT /expenses/${id} (client/src/api.js:179)", "shortDescription": {"text": "Dangling fetch: PUT /expenses/${id} (client/src/api.js:179)"}, "fullDescription": {"text": "`client/src/api.js:179` calls `PUT /expenses/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/expenses/<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-5b57e6afd4140439", "name": "Dangling fetch: DELETE /expenses/${id} (client/src/api.js:180)", "shortDescription": {"text": "Dangling fetch: DELETE /expenses/${id} (client/src/api.js:180)"}, "fullDescription": {"text": "`client/src/api.js:180` calls `DELETE /expenses/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/expenses/<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-fe28e81f37acc7cb", "name": "Dangling fetch: GET /payments${qs} (client/src/api.js:183)", "shortDescription": {"text": "Dangling fetch: GET /payments${qs} (client/src/api.js:183)"}, "fullDescription": {"text": "`client/src/api.js:183` calls `GET /payments${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/payments/<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-e6f7a686ef41a383", "name": "Dangling fetch: POST /payments (client/src/api.js:184)", "shortDescription": {"text": "Dangling fetch: POST /payments (client/src/api.js:184)"}, "fullDescription": {"text": "`client/src/api.js:184` calls `POST /payments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/payments`\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-3ff9f1bb699ff336", "name": "Dangling fetch: DELETE /payments/${id} (client/src/api.js:185)", "shortDescription": {"text": "Dangling fetch: DELETE /payments/${id} (client/src/api.js:185)"}, "fullDescription": {"text": "`client/src/api.js:185` calls `DELETE /payments/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/payments/<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-0252efa12779cc13", "name": "Dangling fetch: GET /stock/entries${qs} (client/src/api.js:188)", "shortDescription": {"text": "Dangling fetch: GET /stock/entries${qs} (client/src/api.js:188)"}, "fullDescription": {"text": "`client/src/api.js:188` calls `GET /stock/entries${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/stock/entries/<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-a74021e89f1bb2ae", "name": "Dangling fetch: GET /stock/balance${qs} (client/src/api.js:189)", "shortDescription": {"text": "Dangling fetch: GET /stock/balance${qs} (client/src/api.js:189)"}, "fullDescription": {"text": "`client/src/api.js:189` calls `GET /stock/balance${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/stock/balance/<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-32009fdbd5c1d8e8", "name": "Dangling fetch: GET /stock/valuation (client/src/api.js:190)", "shortDescription": {"text": "Dangling fetch: GET /stock/valuation (client/src/api.js:190)"}, "fullDescription": {"text": "`client/src/api.js:190` calls `GET /stock/valuation` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/stock/valuation`\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-521ce1779c7ec5d3", "name": "Dangling fetch: GET /stock/reorder (client/src/api.js:191)", "shortDescription": {"text": "Dangling fetch: GET /stock/reorder (client/src/api.js:191)"}, "fullDescription": {"text": "`client/src/api.js:191` calls `GET /stock/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/stock/reorder`\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-c66bcd415e031acc", "name": "Dangling fetch: POST /stock/adjustment (client/src/api.js:192)", "shortDescription": {"text": "Dangling fetch: POST /stock/adjustment (client/src/api.js:192)"}, "fullDescription": {"text": "`client/src/api.js:192` calls `POST /stock/adjustment` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/stock/adjustment`\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-926546feb3124f65", "name": "Dangling fetch: GET /tables (client/src/api.js:195)", "shortDescription": {"text": "Dangling fetch: GET /tables (client/src/api.js:195)"}, "fullDescription": {"text": "`client/src/api.js:195` calls `GET /tables` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tables`\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-0e225d07d79af158", "name": "Dangling fetch: POST /tables (client/src/api.js:196)", "shortDescription": {"text": "Dangling fetch: POST /tables (client/src/api.js:196)"}, "fullDescription": {"text": "`client/src/api.js:196` calls `POST /tables` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tables`\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-9d861533d54bee6d", "name": "Dangling fetch: PUT /tables/${tableNumber} (client/src/api.js:197)", "shortDescription": {"text": "Dangling fetch: PUT /tables/${tableNumber} (client/src/api.js:197)"}, "fullDescription": {"text": "`client/src/api.js:197` calls `PUT /tables/${tableNumber}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tables/<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-86ed6f4fd2b684dd", "name": "Dangling fetch: DELETE /tables/${tableNumber} (client/src/api.js:198)", "shortDescription": {"text": "Dangling fetch: DELETE /tables/${tableNumber} (client/src/api.js:198)"}, "fullDescription": {"text": "`client/src/api.js:198` calls `DELETE /tables/${tableNumber}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/tables/<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-6eb452fbfb454d20", "name": "Unused endpoint: USE /api/auth", "shortDescription": {"text": "Unused endpoint: USE /api/auth"}, "fullDescription": {"text": "`server/index.js` declares `USE /api/auth` 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-4df8d049871ad091", "name": "Unused endpoint: USE /api/menu", "shortDescription": {"text": "Unused endpoint: USE /api/menu"}, "fullDescription": {"text": "`server/index.js` declares `USE /api/menu` 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-f70dc6781d26c791", "name": "Unused endpoint: USE /api/orders", "shortDescription": {"text": "Unused endpoint: USE /api/orders"}, "fullDescription": {"text": "`server/index.js` declares `USE /api/orders` 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-99725bd06fb56b62", "name": "Unused endpoint: USE /api/inventory", "shortDescription": {"text": "Unused endpoint: USE /api/inventory"}, "fullDescription": {"text": "`server/index.js` declares `USE /api/inventory` 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-04ac2dcaa17a1829", "name": "Unused endpoint: USE /api/recipes", "shortDescription": {"text": "Unused endpoint: USE /api/recipes"}, "fullDescription": {"text": "`server/index.js` declares `USE /api/recipes` 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-2a06e6d401449b82", "name": "Unused endpoint: USE /api/reports", "shortDescription": {"text": "Unused endpoint: USE /api/reports"}, "fullDescription": {"text": "`server/index.js` declares `USE /api/reports` 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-4ff40cb10f7c8519", "name": "Unused endpoint: USE /api/users", "shortDescription": {"text": "Unused endpoint: USE /api/users"}, "fullDescription": {"text": "`server/index.js` declares `USE /api/users` 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-e2dc39771ed93c14", "name": "Unused endpoint: USE /api/tables", "shortDescription": {"text": "Unused endpoint: USE /api/tables"}, "fullDescription": {"text": "`server/index.js` declares `USE /api/tables` 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-f6c05b61523e4e4d", "name": "Unused endpoint: USE /api/warehouses", "shortDescription": {"text": "Unused endpoint: USE /api/warehouses"}, "fullDescription": {"text": "`server/index.js` declares `USE /api/warehouses` 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-abf6cff80c9ca884", "name": "Unused endpoint: USE /api/suppliers", "shortDescription": {"text": "Unused endpoint: USE /api/suppliers"}, "fullDescription": {"text": "`server/index.js` declares `USE /api/suppliers` 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-8af55a06be5c7706", "name": "Unused endpoint: USE /api/purchase-bills", "shortDescription": {"text": "Unused endpoint: USE /api/purchase-bills"}, "fullDescription": {"text": "`server/index.js` declares `USE /api/purchase-bills` 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-5c42734d4d670873", "name": "Unused endpoint: USE /api/expenses", "shortDescription": {"text": "Unused endpoint: USE /api/expenses"}, "fullDescription": {"text": "`server/index.js` declares `USE /api/expenses` 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-f8242ba07247d2f8", "name": "Unused endpoint: USE /api/payments", "shortDescription": {"text": "Unused endpoint: USE /api/payments"}, "fullDescription": {"text": "`server/index.js` declares `USE /api/payments` 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-ea38401435b7009a", "name": "Unused endpoint: USE /api/stock", "shortDescription": {"text": "Unused endpoint: USE /api/stock"}, "fullDescription": {"text": "`server/index.js` declares `USE /api/stock` 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": "`server/routes/expenses.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-9260174de75b32ba", "name": "Unused endpoint: GET /categories", "shortDescription": {"text": "Unused endpoint: GET /categories"}, "fullDescription": {"text": "`server/routes/expenses.js` declares `GET /categories` 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-ca5756175765b49d", "name": "Unused endpoint: GET /:id", "shortDescription": {"text": "Unused endpoint: GET /:id"}, "fullDescription": {"text": "`server/routes/expenses.js` declares `GET /: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-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`server/routes/expenses.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-8d5b2b188d08ca82", "name": "Unused endpoint: PUT /:id", "shortDescription": {"text": "Unused endpoint: PUT /:id"}, "fullDescription": {"text": "`server/routes/expenses.js` declares `PUT /: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-7a61c112b611f4bb", "name": "Unused endpoint: DELETE /:id", "shortDescription": {"text": "Unused endpoint: DELETE /:id"}, "fullDescription": {"text": "`server/routes/expenses.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-28c7e366d4549d97", "name": "Unused endpoint: POST /:id/submit", "shortDescription": {"text": "Unused endpoint: POST /:id/submit"}, "fullDescription": {"text": "`server/routes/purchaseBills.js` declares `POST /:id/submit` 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-0cb78db4e7bafb1c", "name": "Unused endpoint: POST /:id/cancel", "shortDescription": {"text": "Unused endpoint: POST /:id/cancel"}, "fullDescription": {"text": "`server/routes/purchaseBills.js` declares `POST /:id/cancel` 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-64372a67f6e52845", "name": "Unused endpoint: GET /:menuItemId", "shortDescription": {"text": "Unused endpoint: GET /:menuItemId"}, "fullDescription": {"text": "`server/routes/recipes.js` declares `GET /:menuItemId` 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-a6e553638aa9120c", "name": "Unused endpoint: PUT /:menuItemId", "shortDescription": {"text": "Unused endpoint: PUT /:menuItemId"}, "fullDescription": {"text": "`server/routes/recipes.js` declares `PUT /:menuItemId` 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-dacc7f80bdf86a85", "name": "Unused endpoint: PUT /:tableNumber", "shortDescription": {"text": "Unused endpoint: PUT /:tableNumber"}, "fullDescription": {"text": "`server/routes/tables.js` declares `PUT /:tableNumber` 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-697f48d2ae9a35d8", "name": "Unused endpoint: DELETE /:tableNumber", "shortDescription": {"text": "Unused endpoint: DELETE /:tableNumber"}, "fullDescription": {"text": "`server/routes/tables.js` declares `DELETE /:tableNumber` 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-5887f6beb60dee57", "name": "Unused endpoint: POST /google", "shortDescription": {"text": "Unused endpoint: POST /google"}, "fullDescription": {"text": "`server/routes/auth.js` declares `POST /google` 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-70ec95b18b14eff7", "name": "Unused endpoint: POST /setup-profile", "shortDescription": {"text": "Unused endpoint: POST /setup-profile"}, "fullDescription": {"text": "`server/routes/auth.js` declares `POST /setup-profile` 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-618721b912bad1c2", "name": "Unused endpoint: POST /login", "shortDescription": {"text": "Unused endpoint: POST /login"}, "fullDescription": {"text": "`server/routes/auth.js` declares `POST /login` 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-e1b7bee247ffc801", "name": "Unused endpoint: GET /summary", "shortDescription": {"text": "Unused endpoint: GET /summary"}, "fullDescription": {"text": "`server/routes/reports.js` declares `GET /summary` 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-86ce60f456918c1e", "name": "Unused endpoint: GET /daily", "shortDescription": {"text": "Unused endpoint: GET /daily"}, "fullDescription": {"text": "`server/routes/reports.js` declares `GET /daily` 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-5ce4bd8d2c1abf63", "name": "Unused endpoint: GET /monthly", "shortDescription": {"text": "Unused endpoint: GET /monthly"}, "fullDescription": {"text": "`server/routes/reports.js` declares `GET /monthly` 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-35ada117a11ba240", "name": "Unused endpoint: GET /today-items", "shortDescription": {"text": "Unused endpoint: GET /today-items"}, "fullDescription": {"text": "`server/routes/reports.js` declares `GET /today-items` 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-74e533a1a0bd1c63", "name": "Unused endpoint: GET /top-items", "shortDescription": {"text": "Unused endpoint: GET /top-items"}, "fullDescription": {"text": "`server/routes/reports.js` declares `GET /top-items` 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-aa5ccf73d3b87ca7", "name": "Unused endpoint: GET /counter", "shortDescription": {"text": "Unused endpoint: GET /counter"}, "fullDescription": {"text": "`server/routes/reports.js` declares `GET /counter` 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-67d28fa8cd6bb12f", "name": "Unused endpoint: PUT /", "shortDescription": {"text": "Unused endpoint: PUT /"}, "fullDescription": {"text": "`server/routes/inventory.js` declares `PUT /` 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-b378c4799e9d2287", "name": "Unused endpoint: GET /entries", "shortDescription": {"text": "Unused endpoint: GET /entries"}, "fullDescription": {"text": "`server/routes/stockLedger.js` declares `GET /entries` 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-d7fa8929da9cbe3f", "name": "Unused endpoint: GET /balance", "shortDescription": {"text": "Unused endpoint: GET /balance"}, "fullDescription": {"text": "`server/routes/stockLedger.js` declares `GET /balance` 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-e10d9b4b51a1971f", "name": "Unused endpoint: GET /valuation", "shortDescription": {"text": "Unused endpoint: GET /valuation"}, "fullDescription": {"text": "`server/routes/stockLedger.js` declares `GET /valuation` 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-8690c2be221cd05e", "name": "Unused endpoint: GET /reorder", "shortDescription": {"text": "Unused endpoint: GET /reorder"}, "fullDescription": {"text": "`server/routes/stockLedger.js` declares `GET /reorder` 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-a9520e6f444772d0", "name": "Unused endpoint: POST /adjustment", "shortDescription": {"text": "Unused endpoint: POST /adjustment"}, "fullDescription": {"text": "`server/routes/stockLedger.js` declares `POST /adjustment` 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/22185"}, "properties": {"repository": "vicky34D/pos_SW", "repoUrl": "https://github.com/vicky34D/pos_SW", "branch": "main"}, "results": [{"ruleId": "scanner-82812c6f618ad39d", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 app.js:520"}, "properties": {"repobilityId": "4d8d2abbccbd46dc", "scanner": "scanner-primary", "fingerprint": "82812c6f618ad39d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-b5612c79d364aa52", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 client/src/preview.jsx:31"}, "properties": {"repobilityId": "e02a39abcf889c04", "scanner": "scanner-primary", "fingerprint": "b5612c79d364aa52", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ffaa33295b9e382a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/seed_dummy_admin.js:20"}, "properties": {"repobilityId": "d3662d525be1119d", "scanner": "scanner-primary", "fingerprint": "ffaa33295b9e382a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-208b2fb3ef844c0b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/seed_recipes.js:345"}, "properties": {"repobilityId": "375224d58d87df6c", "scanner": "scanner-primary", "fingerprint": "208b2fb3ef844c0b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2e208446c221013a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 server/index.js:107"}, "properties": {"repobilityId": "21e6b3de2b3dd856", "scanner": "scanner-primary", "fingerprint": "2e208446c221013a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d63da3583b14afc0", "level": "warning", "message": {"text": "Dockerfile runs as root: Dockerfile"}, "properties": {"repobilityId": "a2ed1bd120e507db", "scanner": "scanner-primary", "fingerprint": "d63da3583b14afc0", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-a35c6a00f751880f", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-slim"}, "properties": {"repobilityId": "c131e1240178e924", "scanner": "scanner-primary", "fingerprint": "a35c6a00f751880f", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 2}}}]}, {"ruleId": "scanner-a35c6a00f751880f", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:20-slim"}, "properties": {"repobilityId": "4b19346a55497a67", "scanner": "scanner-primary", "fingerprint": "a35c6a00f751880f", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "Dockerfile"}, "region": {"startLine": 12}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-860ca59d0d1b7553", "level": "error", "message": {"text": "Runtime dotenv file present in repo: client/.env.production"}, "properties": {"repobilityId": "ba10706fc4e1197b", "scanner": "scanner-primary", "fingerprint": "860ca59d0d1b7553", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["secrets", "config", "env-file", "runtime-env"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/.env.production"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-46645b85ce5756e0", "level": "error", "message": {"text": "Runtime dotenv file present in repo: client/.env.cloud"}, "properties": {"repobilityId": "4cd16a75db6c5c03", "scanner": "scanner-primary", "fingerprint": "46645b85ce5756e0", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["secrets", "config", "env-file", "runtime-env"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "client/.env.cloud"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-148ff71acb139ea2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in streetwok-pos-preview_3.html:704"}, "properties": {"repobilityId": "cab3edc9556a9b63", "scanner": "scanner-primary", "fingerprint": "148ff71acb139ea2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "streetwok-pos-preview_3.html"}, "region": {"startLine": 704}}}]}, {"ruleId": "scanner-1d981f140a967c05", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in app.js:374"}, "properties": {"repobilityId": "b6b0c8b85ab66ded", "scanner": "scanner-primary", "fingerprint": "1d981f140a967c05", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app.js"}, "region": {"startLine": 374}}}]}, {"ruleId": "scanner-28c4a04bd807da0c", "level": "warning", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "85be6b43ccc2bf69", "scanner": "scanner-primary", "fingerprint": "28c4a04bd807da0c", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy.yml"}, "region": {"startLine": 46}}}]}, {"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": "6dd8ac39ac634294", "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": "de91707c017d9244", "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": "ba266554a2952225", "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": "b2e82d4f850a2eb2", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-11825279136b53a3", "level": "warning", "message": {"text": "CI is configured but no tests are detected"}, "properties": {"repobilityId": "e8c84605bf13aa31", "scanner": "scanner-primary", "fingerprint": "11825279136b53a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "ci", "config-theater", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "3b78d1726d7f8817", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "14583dbdb3600f3d", "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": "5ae6779fc441f300", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-cec939fab6619cb2", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/seed_recipes.js:7"}, "properties": {"repobilityId": "6b4ce03c8c356dbc", "scanner": "scanner-primary", "fingerprint": "cec939fab6619cb2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-38c8cf19a99059a0", "level": "none", "message": {"text": "Commented-code block (5 lines) in server/stockLedger.js:5"}, "properties": {"repobilityId": "047a8acfb8a33f6e", "scanner": "scanner-primary", "fingerprint": "38c8cf19a99059a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4f89a4ec363e904f", "level": "none", "message": {"text": "Commented-code block (6 lines) in server/routes/orders.js:126"}, "properties": {"repobilityId": "3e8d5657471ce7ab", "scanner": "scanner-primary", "fingerprint": "4f89a4ec363e904f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0b17c8c07a7421d", "level": "note", "message": {"text": "8 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "17fe720e8247f9df", "scanner": "scanner-primary", "fingerprint": "d0b17c8c07a7421d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-4f5c6d575cc52a0b", "level": "error", "message": {"text": "Dangling fetch: POST /auth/google (client/src/api.js:99)"}, "properties": {"repobilityId": "7f74c3ddf3c15afe", "scanner": "scanner-primary", "fingerprint": "4f5c6d575cc52a0b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cdd265d107917dec", "level": "error", "message": {"text": "Dangling fetch: POST /auth/setup-profile (client/src/api.js:100)"}, "properties": {"repobilityId": "baca9453cbe300b6", "scanner": "scanner-primary", "fingerprint": "cdd265d107917dec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5ab639467e3be2ec", "level": "error", "message": {"text": "Dangling fetch: POST /auth/login (client/src/api.js:101)"}, "properties": {"repobilityId": "2df1a6e0f7936344", "scanner": "scanner-primary", "fingerprint": "5ab639467e3be2ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9e8ae649c3730ef5", "level": "error", "message": {"text": "Dangling fetch: POST /menu (client/src/api.js:111)"}, "properties": {"repobilityId": "8f67de0618409699", "scanner": "scanner-primary", "fingerprint": "9e8ae649c3730ef5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3888062cddfc8d9d", "level": "error", "message": {"text": "Dangling fetch: PUT /menu/${id} (client/src/api.js:112)"}, "properties": {"repobilityId": "0d9b31c689118f6a", "scanner": "scanner-primary", "fingerprint": "3888062cddfc8d9d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3dc2252bfd9c72ca", "level": "error", "message": {"text": "Dangling fetch: DELETE /menu/${id} (client/src/api.js:113)"}, "properties": {"repobilityId": "650018ed22cce6d4", "scanner": "scanner-primary", "fingerprint": "3dc2252bfd9c72ca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-57f21e99efb59c88", "level": "error", "message": {"text": "Dangling fetch: GET /orders${qs} (client/src/api.js:118)"}, "properties": {"repobilityId": "a2dd28f128bf95e2", "scanner": "scanner-primary", "fingerprint": "57f21e99efb59c88", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fe752b48cd1880e7", "level": "error", "message": {"text": "Dangling fetch: POST /orders (client/src/api.js:120)"}, "properties": {"repobilityId": "866607708a5a85c6", "scanner": "scanner-primary", "fingerprint": "fe752b48cd1880e7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8d940b8492e450c0", "level": "error", "message": {"text": "Dangling fetch: DELETE /orders/${id} (client/src/api.js:121)"}, "properties": {"repobilityId": "4e6dbab6ec6aaa49", "scanner": "scanner-primary", "fingerprint": "8d940b8492e450c0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1dbc9e4417accb0a", "level": "error", "message": {"text": "Dangling fetch: GET /inventory (client/src/api.js:125)"}, "properties": {"repobilityId": "a72dce30f358932c", "scanner": "scanner-primary", "fingerprint": "1dbc9e4417accb0a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ba8fc0564e4af550", "level": "error", "message": {"text": "Dangling fetch: POST /inventory (client/src/api.js:126)"}, "properties": {"repobilityId": "56fadec5fbe5a0a7", "scanner": "scanner-primary", "fingerprint": "ba8fc0564e4af550", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cf7a578cf9317cb8", "level": "error", "message": {"text": "Dangling fetch: PUT /inventory/${id} (client/src/api.js:127)"}, "properties": {"repobilityId": "e14090b87802d43e", "scanner": "scanner-primary", "fingerprint": "cf7a578cf9317cb8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0240e51c02923210", "level": "error", "message": {"text": "Dangling fetch: PUT /inventory (client/src/api.js:128)"}, "properties": {"repobilityId": "ffd0f8571cac7f4f", "scanner": "scanner-primary", "fingerprint": "0240e51c02923210", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f15f2dc2b188d6fb", "level": "error", "message": {"text": "Dangling fetch: DELETE /inventory/${id} (client/src/api.js:129)"}, "properties": {"repobilityId": "28bb357820e30998", "scanner": "scanner-primary", "fingerprint": "f15f2dc2b188d6fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4e630405cd3c310e", "level": "error", "message": {"text": "Dangling fetch: GET /recipes/${menuItemId} (client/src/api.js:132)"}, "properties": {"repobilityId": "235e9a0dc6b1184f", "scanner": "scanner-primary", "fingerprint": "4e630405cd3c310e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-90a229d915de3067", "level": "error", "message": {"text": "Dangling fetch: PUT /recipes/${menuItemId} (client/src/api.js:134)"}, "properties": {"repobilityId": "ff214f34d5f57a42", "scanner": "scanner-primary", "fingerprint": "90a229d915de3067", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c089d55856402bc2", "level": "error", "message": {"text": "Dangling fetch: GET /reports/summary (client/src/api.js:137)"}, "properties": {"repobilityId": "88bdd861a6a4d526", "scanner": "scanner-primary", "fingerprint": "c089d55856402bc2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1b9be7c475d412f9", "level": "error", "message": {"text": "Dangling fetch: GET /reports/daily (client/src/api.js:138)"}, "properties": {"repobilityId": "6c1412af46d83611", "scanner": "scanner-primary", "fingerprint": "1b9be7c475d412f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6eefc2ca08000703", "level": "error", "message": {"text": "Dangling fetch: GET /reports/monthly (client/src/api.js:139)"}, "properties": {"repobilityId": "f40d44960436a162", "scanner": "scanner-primary", "fingerprint": "6eefc2ca08000703", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0fbdb45cdf7e558c", "level": "error", "message": {"text": "Dangling fetch: GET /reports/today-items (client/src/api.js:140)"}, "properties": {"repobilityId": "583894c20a2d295a", "scanner": "scanner-primary", "fingerprint": "0fbdb45cdf7e558c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5e537f99a075ef74", "level": "error", "message": {"text": "Dangling fetch: GET /reports/top-items (client/src/api.js:141)"}, "properties": {"repobilityId": "a9f8d4ca8a253c80", "scanner": "scanner-primary", "fingerprint": "5e537f99a075ef74", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9a83253d94f8a446", "level": "error", "message": {"text": "Dangling fetch: GET /reports/counter (client/src/api.js:142)"}, "properties": {"repobilityId": "a53d58a1588ff1c4", "scanner": "scanner-primary", "fingerprint": "9a83253d94f8a446", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1388ec7b2a4a2e31", "level": "error", "message": {"text": "Dangling fetch: GET /users (client/src/api.js:149)"}, "properties": {"repobilityId": "34c55814af274bdb", "scanner": "scanner-primary", "fingerprint": "1388ec7b2a4a2e31", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-dae38d26c62e1c11", "level": "error", "message": {"text": "Dangling fetch: POST /users (client/src/api.js:150)"}, "properties": {"repobilityId": "43210a0112b25d2f", "scanner": "scanner-primary", "fingerprint": "dae38d26c62e1c11", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0d010c04b3901f9e", "level": "error", "message": {"text": "Dangling fetch: PUT /users/${id} (client/src/api.js:151)"}, "properties": {"repobilityId": "767e41e3027ebf8f", "scanner": "scanner-primary", "fingerprint": "0d010c04b3901f9e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f3eb2d70dc43082f", "level": "error", "message": {"text": "Dangling fetch: DELETE /users/${id} (client/src/api.js:152)"}, "properties": {"repobilityId": "7aa5993897aff5b1", "scanner": "scanner-primary", "fingerprint": "f3eb2d70dc43082f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-510eee9ea919bcc6", "level": "error", "message": {"text": "Dangling fetch: GET /warehouses (client/src/api.js:155)"}, "properties": {"repobilityId": "fcde2460256bfbe5", "scanner": "scanner-primary", "fingerprint": "510eee9ea919bcc6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-34baeb7694ae5371", "level": "error", "message": {"text": "Dangling fetch: POST /warehouses (client/src/api.js:156)"}, "properties": {"repobilityId": "77fcdf48269539e5", "scanner": "scanner-primary", "fingerprint": "34baeb7694ae5371", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-94933f369b8751cc", "level": "error", "message": {"text": "Dangling fetch: PUT /warehouses/${id} (client/src/api.js:157)"}, "properties": {"repobilityId": "a7966738f49a4c8e", "scanner": "scanner-primary", "fingerprint": "94933f369b8751cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c593861f32382b55", "level": "error", "message": {"text": "Dangling fetch: DELETE /warehouses/${id} (client/src/api.js:158)"}, "properties": {"repobilityId": "8156293d0666db72", "scanner": "scanner-primary", "fingerprint": "c593861f32382b55", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-295f32380e2cfb82", "level": "error", "message": {"text": "Dangling fetch: GET /suppliers${qs} (client/src/api.js:161)"}, "properties": {"repobilityId": "13dc5aedd065ed8b", "scanner": "scanner-primary", "fingerprint": "295f32380e2cfb82", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-bb3d523219bc28a0", "level": "error", "message": {"text": "Dangling fetch: GET /suppliers/${id} (client/src/api.js:162)"}, "properties": {"repobilityId": "321c4d76bfc383d5", "scanner": "scanner-primary", "fingerprint": "bb3d523219bc28a0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-efcc026bd27894eb", "level": "error", "message": {"text": "Dangling fetch: POST /suppliers (client/src/api.js:163)"}, "properties": {"repobilityId": "3e48a06b9b28a9e0", "scanner": "scanner-primary", "fingerprint": "efcc026bd27894eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ace164d27417b5ae", "level": "error", "message": {"text": "Dangling fetch: PUT /suppliers/${id} (client/src/api.js:164)"}, "properties": {"repobilityId": "99b322de2f82745a", "scanner": "scanner-primary", "fingerprint": "ace164d27417b5ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ce2e51d412580016", "level": "error", "message": {"text": "Dangling fetch: DELETE /suppliers/${id} (client/src/api.js:165)"}, "properties": {"repobilityId": "5128cbf37e14d5bb", "scanner": "scanner-primary", "fingerprint": "ce2e51d412580016", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-31249744ec1cdd27", "level": "error", "message": {"text": "Dangling fetch: GET /purchase-bills${qs} (client/src/api.js:168)"}, "properties": {"repobilityId": "9d6a1a5306853630", "scanner": "scanner-primary", "fingerprint": "31249744ec1cdd27", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2be68880d5880072", "level": "error", "message": {"text": "Dangling fetch: GET /purchase-bills/${id} (client/src/api.js:169)"}, "properties": {"repobilityId": "543dd04a44efb144", "scanner": "scanner-primary", "fingerprint": "2be68880d5880072", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-33e4c1098ab1645a", "level": "error", "message": {"text": "Dangling fetch: POST /purchase-bills (client/src/api.js:170)"}, "properties": {"repobilityId": "df4ba1b1b3cef915", "scanner": "scanner-primary", "fingerprint": "33e4c1098ab1645a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9cbae38c74acd16e", "level": "error", "message": {"text": "Dangling fetch: PUT /purchase-bills/${id} (client/src/api.js:171)"}, "properties": {"repobilityId": "fa77266d394085aa", "scanner": "scanner-primary", "fingerprint": "9cbae38c74acd16e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8f220ae199291eb4", "level": "error", "message": {"text": "Dangling fetch: POST /purchase-bills/${id}/submit (client/src/api.js:172)"}, "properties": {"repobilityId": "55989c57c8736316", "scanner": "scanner-primary", "fingerprint": "8f220ae199291eb4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5bad4de1f22f146b", "level": "error", "message": {"text": "Dangling fetch: POST /purchase-bills/${id}/cancel (client/src/api.js:173)"}, "properties": {"repobilityId": "a660f5edd9d6b61b", "scanner": "scanner-primary", "fingerprint": "5bad4de1f22f146b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cfbcd3e0005a3ea2", "level": "error", "message": {"text": "Dangling fetch: GET /expenses${qs} (client/src/api.js:176)"}, "properties": {"repobilityId": "cc033c8f41beab78", "scanner": "scanner-primary", "fingerprint": "cfbcd3e0005a3ea2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-42f4eddafb23571f", "level": "error", "message": {"text": "Dangling fetch: GET /expenses/${id} (client/src/api.js:177)"}, "properties": {"repobilityId": "7b77b572d145175f", "scanner": "scanner-primary", "fingerprint": "42f4eddafb23571f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8dfb55fb2d84cb60", "level": "error", "message": {"text": "Dangling fetch: POST /expenses (client/src/api.js:178)"}, "properties": {"repobilityId": "b7b5443256d728bb", "scanner": "scanner-primary", "fingerprint": "8dfb55fb2d84cb60", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-47ac715b0b19bc61", "level": "error", "message": {"text": "Dangling fetch: PUT /expenses/${id} (client/src/api.js:179)"}, "properties": {"repobilityId": "bad27528f7ce969e", "scanner": "scanner-primary", "fingerprint": "47ac715b0b19bc61", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5b57e6afd4140439", "level": "error", "message": {"text": "Dangling fetch: DELETE /expenses/${id} (client/src/api.js:180)"}, "properties": {"repobilityId": "0e96bf9c9eb38356", "scanner": "scanner-primary", "fingerprint": "5b57e6afd4140439", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fe28e81f37acc7cb", "level": "error", "message": {"text": "Dangling fetch: GET /payments${qs} (client/src/api.js:183)"}, "properties": {"repobilityId": "a1ec50fb0c1feb31", "scanner": "scanner-primary", "fingerprint": "fe28e81f37acc7cb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e6f7a686ef41a383", "level": "error", "message": {"text": "Dangling fetch: POST /payments (client/src/api.js:184)"}, "properties": {"repobilityId": "9a78282144d0a245", "scanner": "scanner-primary", "fingerprint": "e6f7a686ef41a383", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3ff9f1bb699ff336", "level": "error", "message": {"text": "Dangling fetch: DELETE /payments/${id} (client/src/api.js:185)"}, "properties": {"repobilityId": "92c6556589153bf4", "scanner": "scanner-primary", "fingerprint": "3ff9f1bb699ff336", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0252efa12779cc13", "level": "error", "message": {"text": "Dangling fetch: GET /stock/entries${qs} (client/src/api.js:188)"}, "properties": {"repobilityId": "791909da72d04ef8", "scanner": "scanner-primary", "fingerprint": "0252efa12779cc13", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a74021e89f1bb2ae", "level": "error", "message": {"text": "Dangling fetch: GET /stock/balance${qs} (client/src/api.js:189)"}, "properties": {"repobilityId": "1305c0e08f24167e", "scanner": "scanner-primary", "fingerprint": "a74021e89f1bb2ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-32009fdbd5c1d8e8", "level": "error", "message": {"text": "Dangling fetch: GET /stock/valuation (client/src/api.js:190)"}, "properties": {"repobilityId": "fab78add57558e73", "scanner": "scanner-primary", "fingerprint": "32009fdbd5c1d8e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-521ce1779c7ec5d3", "level": "error", "message": {"text": "Dangling fetch: GET /stock/reorder (client/src/api.js:191)"}, "properties": {"repobilityId": "44484c378ea7a7e6", "scanner": "scanner-primary", "fingerprint": "521ce1779c7ec5d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c66bcd415e031acc", "level": "error", "message": {"text": "Dangling fetch: POST /stock/adjustment (client/src/api.js:192)"}, "properties": {"repobilityId": "85b08665bb16ef70", "scanner": "scanner-primary", "fingerprint": "c66bcd415e031acc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-926546feb3124f65", "level": "error", "message": {"text": "Dangling fetch: GET /tables (client/src/api.js:195)"}, "properties": {"repobilityId": "381ce9d4cd1ec6a1", "scanner": "scanner-primary", "fingerprint": "926546feb3124f65", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0e225d07d79af158", "level": "error", "message": {"text": "Dangling fetch: POST /tables (client/src/api.js:196)"}, "properties": {"repobilityId": "42d61ca162f989a9", "scanner": "scanner-primary", "fingerprint": "0e225d07d79af158", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9d861533d54bee6d", "level": "error", "message": {"text": "Dangling fetch: PUT /tables/${tableNumber} (client/src/api.js:197)"}, "properties": {"repobilityId": "9dd12b9849f773e0", "scanner": "scanner-primary", "fingerprint": "9d861533d54bee6d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-86ed6f4fd2b684dd", "level": "error", "message": {"text": "Dangling fetch: DELETE /tables/${tableNumber} (client/src/api.js:198)"}, "properties": {"repobilityId": "e5543cee10d812ff", "scanner": "scanner-primary", "fingerprint": "86ed6f4fd2b684dd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6eb452fbfb454d20", "level": "note", "message": {"text": "Unused endpoint: USE /api/auth"}, "properties": {"repobilityId": "998ca44ee62afef2", "scanner": "scanner-primary", "fingerprint": "6eb452fbfb454d20", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4df8d049871ad091", "level": "note", "message": {"text": "Unused endpoint: USE /api/menu"}, "properties": {"repobilityId": "954ea0944275a7d0", "scanner": "scanner-primary", "fingerprint": "4df8d049871ad091", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f70dc6781d26c791", "level": "note", "message": {"text": "Unused endpoint: USE /api/orders"}, "properties": {"repobilityId": "311ed9e0fd171406", "scanner": "scanner-primary", "fingerprint": "f70dc6781d26c791", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-99725bd06fb56b62", "level": "note", "message": {"text": "Unused endpoint: USE /api/inventory"}, "properties": {"repobilityId": "c9155866e488f41f", "scanner": "scanner-primary", "fingerprint": "99725bd06fb56b62", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-04ac2dcaa17a1829", "level": "note", "message": {"text": "Unused endpoint: USE /api/recipes"}, "properties": {"repobilityId": "ad62548192d8937e", "scanner": "scanner-primary", "fingerprint": "04ac2dcaa17a1829", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2a06e6d401449b82", "level": "note", "message": {"text": "Unused endpoint: USE /api/reports"}, "properties": {"repobilityId": "40c5ff373a790639", "scanner": "scanner-primary", "fingerprint": "2a06e6d401449b82", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4ff40cb10f7c8519", "level": "note", "message": {"text": "Unused endpoint: USE /api/users"}, "properties": {"repobilityId": "1df9857df2be9da4", "scanner": "scanner-primary", "fingerprint": "4ff40cb10f7c8519", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e2dc39771ed93c14", "level": "note", "message": {"text": "Unused endpoint: USE /api/tables"}, "properties": {"repobilityId": "23e90c6a80a6c194", "scanner": "scanner-primary", "fingerprint": "e2dc39771ed93c14", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f6c05b61523e4e4d", "level": "note", "message": {"text": "Unused endpoint: USE /api/warehouses"}, "properties": {"repobilityId": "2b3fbdf705529981", "scanner": "scanner-primary", "fingerprint": "f6c05b61523e4e4d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-abf6cff80c9ca884", "level": "note", "message": {"text": "Unused endpoint: USE /api/suppliers"}, "properties": {"repobilityId": "3ca5214b8d548bb3", "scanner": "scanner-primary", "fingerprint": "abf6cff80c9ca884", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8af55a06be5c7706", "level": "note", "message": {"text": "Unused endpoint: USE /api/purchase-bills"}, "properties": {"repobilityId": "5c712085bde603fb", "scanner": "scanner-primary", "fingerprint": "8af55a06be5c7706", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5c42734d4d670873", "level": "note", "message": {"text": "Unused endpoint: USE /api/expenses"}, "properties": {"repobilityId": "9cd9691d8a02b99e", "scanner": "scanner-primary", "fingerprint": "5c42734d4d670873", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f8242ba07247d2f8", "level": "note", "message": {"text": "Unused endpoint: USE /api/payments"}, "properties": {"repobilityId": "76678847d211e443", "scanner": "scanner-primary", "fingerprint": "f8242ba07247d2f8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ea38401435b7009a", "level": "note", "message": {"text": "Unused endpoint: USE /api/stock"}, "properties": {"repobilityId": "8faf943e59f035cd", "scanner": "scanner-primary", "fingerprint": "ea38401435b7009a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5baa8971ebe192a1", "level": "note", "message": {"text": "Unused endpoint: GET /"}, "properties": {"repobilityId": "0cb194456bdbfdfb", "scanner": "scanner-primary", "fingerprint": "5baa8971ebe192a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9260174de75b32ba", "level": "note", "message": {"text": "Unused endpoint: GET /categories"}, "properties": {"repobilityId": "a4483cdbf9fa764a", "scanner": "scanner-primary", "fingerprint": "9260174de75b32ba", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ca5756175765b49d", "level": "note", "message": {"text": "Unused endpoint: GET /:id"}, "properties": {"repobilityId": "1b8d94c3169bff20", "scanner": "scanner-primary", "fingerprint": "ca5756175765b49d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "e536c85cef9cf256", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d5b2b188d08ca82", "level": "note", "message": {"text": "Unused endpoint: PUT /:id"}, "properties": {"repobilityId": "50956c25118eb159", "scanner": "scanner-primary", "fingerprint": "8d5b2b188d08ca82", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a61c112b611f4bb", "level": "note", "message": {"text": "Unused endpoint: DELETE /:id"}, "properties": {"repobilityId": "a2a00dd7e07760c1", "scanner": "scanner-primary", "fingerprint": "7a61c112b611f4bb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-28c7e366d4549d97", "level": "note", "message": {"text": "Unused endpoint: POST /:id/submit"}, "properties": {"repobilityId": "a69d2f448eded9d4", "scanner": "scanner-primary", "fingerprint": "28c7e366d4549d97", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0cb78db4e7bafb1c", "level": "note", "message": {"text": "Unused endpoint: POST /:id/cancel"}, "properties": {"repobilityId": "a90ead65f746eb98", "scanner": "scanner-primary", "fingerprint": "0cb78db4e7bafb1c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-64372a67f6e52845", "level": "note", "message": {"text": "Unused endpoint: GET /:menuItemId"}, "properties": {"repobilityId": "2929ce7576d33cdb", "scanner": "scanner-primary", "fingerprint": "64372a67f6e52845", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a6e553638aa9120c", "level": "note", "message": {"text": "Unused endpoint: PUT /:menuItemId"}, "properties": {"repobilityId": "97d2a74ba9410586", "scanner": "scanner-primary", "fingerprint": "a6e553638aa9120c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dacc7f80bdf86a85", "level": "note", "message": {"text": "Unused endpoint: PUT /:tableNumber"}, "properties": {"repobilityId": "3eb8f3da0163b957", "scanner": "scanner-primary", "fingerprint": "dacc7f80bdf86a85", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-697f48d2ae9a35d8", "level": "note", "message": {"text": "Unused endpoint: DELETE /:tableNumber"}, "properties": {"repobilityId": "46d9d080d8088ce0", "scanner": "scanner-primary", "fingerprint": "697f48d2ae9a35d8", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5887f6beb60dee57", "level": "note", "message": {"text": "Unused endpoint: POST /google"}, "properties": {"repobilityId": "8064327e55a1a199", "scanner": "scanner-primary", "fingerprint": "5887f6beb60dee57", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-70ec95b18b14eff7", "level": "note", "message": {"text": "Unused endpoint: POST /setup-profile"}, "properties": {"repobilityId": "d38b90f872e8aa1a", "scanner": "scanner-primary", "fingerprint": "70ec95b18b14eff7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-618721b912bad1c2", "level": "note", "message": {"text": "Unused endpoint: POST /login"}, "properties": {"repobilityId": "2689f0f5e061c9d0", "scanner": "scanner-primary", "fingerprint": "618721b912bad1c2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e1b7bee247ffc801", "level": "note", "message": {"text": "Unused endpoint: GET /summary"}, "properties": {"repobilityId": "1840715b2b502fc8", "scanner": "scanner-primary", "fingerprint": "e1b7bee247ffc801", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-86ce60f456918c1e", "level": "note", "message": {"text": "Unused endpoint: GET /daily"}, "properties": {"repobilityId": "d5be82b0f8314938", "scanner": "scanner-primary", "fingerprint": "86ce60f456918c1e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5ce4bd8d2c1abf63", "level": "note", "message": {"text": "Unused endpoint: GET /monthly"}, "properties": {"repobilityId": "986d267522ddb509", "scanner": "scanner-primary", "fingerprint": "5ce4bd8d2c1abf63", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-35ada117a11ba240", "level": "note", "message": {"text": "Unused endpoint: GET /today-items"}, "properties": {"repobilityId": "f06e13c913f76958", "scanner": "scanner-primary", "fingerprint": "35ada117a11ba240", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-74e533a1a0bd1c63", "level": "note", "message": {"text": "Unused endpoint: GET /top-items"}, "properties": {"repobilityId": "0e2d40c3d3fe50ea", "scanner": "scanner-primary", "fingerprint": "74e533a1a0bd1c63", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-aa5ccf73d3b87ca7", "level": "note", "message": {"text": "Unused endpoint: GET /counter"}, "properties": {"repobilityId": "9bf0ac08cf3cb9f0", "scanner": "scanner-primary", "fingerprint": "aa5ccf73d3b87ca7", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-67d28fa8cd6bb12f", "level": "note", "message": {"text": "Unused endpoint: PUT /"}, "properties": {"repobilityId": "d6c74d2d7704f00f", "scanner": "scanner-primary", "fingerprint": "67d28fa8cd6bb12f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b378c4799e9d2287", "level": "note", "message": {"text": "Unused endpoint: GET /entries"}, "properties": {"repobilityId": "e1cdae8dcc672a57", "scanner": "scanner-primary", "fingerprint": "b378c4799e9d2287", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d7fa8929da9cbe3f", "level": "note", "message": {"text": "Unused endpoint: GET /balance"}, "properties": {"repobilityId": "c36196b4c42e73fe", "scanner": "scanner-primary", "fingerprint": "d7fa8929da9cbe3f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e10d9b4b51a1971f", "level": "note", "message": {"text": "Unused endpoint: GET /valuation"}, "properties": {"repobilityId": "fdb901fc7f532f33", "scanner": "scanner-primary", "fingerprint": "e10d9b4b51a1971f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8690c2be221cd05e", "level": "note", "message": {"text": "Unused endpoint: GET /reorder"}, "properties": {"repobilityId": "83388f1706a94e49", "scanner": "scanner-primary", "fingerprint": "8690c2be221cd05e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a9520e6f444772d0", "level": "note", "message": {"text": "Unused endpoint: POST /adjustment"}, "properties": {"repobilityId": "e1c99e4d374bde8c", "scanner": "scanner-primary", "fingerprint": "a9520e6f444772d0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}