{"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-e491cd1de0f78603", "name": "Stray `console.log` in TS/JS \u2014 api/_naas_forms.js:29", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/_naas_forms.js:29"}, "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-29ffc6ce8138a82e", "name": "Icon-only button without accessible name \u2014 public/js/wip.js:373", "shortDescription": {"text": "Icon-only button without accessible name \u2014 public/js/wip.js:373"}, "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-359a456bf37f70d1", "name": "Icon-only button without accessible name \u2014 public/js/yield.js:125", "shortDescription": {"text": "Icon-only button without accessible name \u2014 public/js/yield.js:125"}, "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-840922916a268aba", "name": "Icon-only button without accessible name \u2014 public/js/todo.js:1176", "shortDescription": {"text": "Icon-only button without accessible name \u2014 public/js/todo.js:1176"}, "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-d9f2bd9f7d167b8d", "name": "TODO/FIXME marker in shipping code \u2014 public/js/todo.js:2", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 public/js/todo.js:2"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-574b69967c75103b", "name": "Icon-only button without accessible name \u2014 public/js/qb-sync.js:811", "shortDescription": {"text": "Icon-only button without accessible name \u2014 public/js/qb-sync.js:811"}, "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-d64e24eb778688dd", "name": "Stray `console.log` in TS/JS \u2014 public/js/qb-sync.js:898", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 public/js/qb-sync.js:898"}, "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-6e0568b27f2f8205", "name": "Icon-only button without accessible name \u2014 public/js/grants.js:374", "shortDescription": {"text": "Icon-only button without accessible name \u2014 public/js/grants.js:374"}, "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-84ea00f64dfbf1b6", "name": "Icon-only button without accessible name \u2014 public/js/naas.js:1543", "shortDescription": {"text": "Icon-only button without accessible name \u2014 public/js/naas.js:1543"}, "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-a78cf140efa09f24", "name": "Stray `console.log` in TS/JS \u2014 public/js/naas.js:1462", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 public/js/naas.js:1462"}, "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-84a07d72f401fce5", "name": "Icon-only button without accessible name \u2014 public/js/sales.js:732", "shortDescription": {"text": "Icon-only button without accessible name \u2014 public/js/sales.js:732"}, "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-80bf87020eb3acfa", "name": "Icon-only button without accessible name \u2014 public/js/haccp.js:349", "shortDescription": {"text": "Icon-only button without accessible name \u2014 public/js/haccp.js:349"}, "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-7e02ba8677e5278f", "name": "Icon-only button without accessible name \u2014 public/js/timeclock.js:787", "shortDescription": {"text": "Icon-only button without accessible name \u2014 public/js/timeclock.js:787"}, "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-a599c0d0e7f6740e", "name": "Stray `console.log` in TS/JS \u2014 public/js/production.js:999", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 public/js/production.js:999"}, "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-729fa82ffa3b5bcb", "name": "Stray `console.log` in TS/JS \u2014 public/js/parts.js:573", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 public/js/parts.js:573"}, "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-9727d5b7dfb6b76a", "name": "Icon-only button without accessible name \u2014 public/js/management-report.js:327", "shortDescription": {"text": "Icon-only button without accessible name \u2014 public/js/management-report.js:327"}, "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-0a3f866ce7fb8b97", "name": "Icon-only button without accessible name \u2014 public/js/production-report.js:696", "shortDescription": {"text": "Icon-only button without accessible name \u2014 public/js/production-report.js:696"}, "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-b596cc933b69168b", "name": "Privileged port 587 in use", "shortDescription": {"text": "Privileged port 587 in use"}, "fullDescription": {"text": "Port 587 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c6b1b8bb6f2c1f63", "name": "Insecure pattern 'cors_wildcard' in api/wip.js:355", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/wip.js:355"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e2aae7baaf633738", "name": "Insecure pattern 'cors_wildcard' in api/flavor.js:153", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/flavor.js:153"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b060fbe1212e1475", "name": "Insecure pattern 'cors_wildcard' in api/timeclock-kiosk.js:332", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/timeclock-kiosk.js:332"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-95bc9f146cb0eb85", "name": "Insecure pattern 'cors_wildcard' in api/contracts.js:183", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/contracts.js:183"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ebb83c7fbf66d252", "name": "Insecure pattern 'cors_wildcard' in api/qb-admin.js:272", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/qb-admin.js:272"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e206c92693bb6f2e", "name": "Insecure pattern 'cors_wildcard' in api/audit.js:28", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/audit.js:28"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7163540a6ea25717", "name": "Insecure pattern 'cors_wildcard' in api/passkey.js:21", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/passkey.js:21"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-84e28bfc929285da", "name": "Insecure pattern 'cors_wildcard' in api/staff-schedule.js:153", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/staff-schedule.js:153"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e83c015192421b69", "name": "Insecure pattern 'cors_wildcard' in api/grants.js:1225", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/grants.js:1225"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f1c5d5cdcf7f26e2", "name": "Insecure pattern 'cors_wildcard' in api/setup.js:10", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/setup.js:10"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-83e88e7deb552804", "name": "Insecure pattern 'cors_wildcard' in api/ai-admin.js:354", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/ai-admin.js:354"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1a96bef23d611029", "name": "Insecure pattern 'cors_wildcard' in api/extract.js:43", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/extract.js:43"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-167e71fe1dc834df", "name": "Insecure pattern 'cors_wildcard' in api/records.js:60", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/records.js:60"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-47315680203f168a", "name": "Insecure pattern 'cors_wildcard' in api/analytics.js:5", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/analytics.js:5"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-90703779c1526a8e", "name": "Insecure pattern 'cors_wildcard' in api/naas.js:163", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/naas.js:163"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e0ac685e62c5eef3", "name": "Insecure pattern 'cors_wildcard' in api/sales.js:1239", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/sales.js:1239"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dc78e8e38901e3a2", "name": "Insecure pattern 'cors_wildcard' in api/haccp.js:994", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/haccp.js:994"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-be8fbd20fd061c0a", "name": "Insecure pattern 'cors_wildcard' in api/settings.js:3", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/settings.js:3"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8f756cd6bd618511", "name": "Insecure pattern 'cors_wildcard' in api/tasks.js:138", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/tasks.js:138"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2bc015b3a8349a1d", "name": "Insecure pattern 'cors_wildcard' in api/qb-lists.js:24", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/qb-lists.js:24"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-20f6bf901f0b2eb3", "name": "Insecure pattern 'cors_wildcard' in api/kiosk.js:71", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/kiosk.js:71"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-77c4087c99c318c1", "name": "Insecure pattern 'cors_wildcard' in api/timeclock.js:1578", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/timeclock.js:1578"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-25d911067c335518", "name": "Insecure pattern 'cors_wildcard' in api/troubleshoot.js:71", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/troubleshoot.js:71"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-813c6c512f7692fa", "name": "Insecure pattern 'cors_wildcard' in api/production.js:563", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/production.js:563"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-df70b92388442fb4", "name": "Insecure pattern 'cors_wildcard' in api/fish-schedule.js:329", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/fish-schedule.js:329"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-321ae50ea3413888", "name": "Insecure pattern 'cors_wildcard' in api/parts.js:7", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/parts.js:7"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7144c3bb4664aa02", "name": "Insecure pattern 'cors_wildcard' in api/management-report.js:55", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/management-report.js:55"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eea87c803381f60d", "name": "Insecure pattern 'cors_wildcard' in api/ai.js:6", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/ai.js:6"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-72fbc2b4f8f3a390", "name": "Insecure pattern 'cors_wildcard' in api/manuals.js:259", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/manuals.js:259"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-43515c8e9fd22e60", "name": "Insecure pattern 'cors_wildcard' in api/seed.js:9", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/seed.js:9"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-876d1c37026ad33f", "name": "Insecure pattern 'cors_wildcard' in api/users.js:13", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/users.js:13"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b25dc1676ce97566", "name": "Insecure pattern 'cors_wildcard' in api/login.js:129", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/login.js:129"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a55028c232cf355a", "name": "Insecure pattern 'cors_wildcard' in api/production-report.js:49", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/production-report.js:49"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-60d2df5dba5172b0", "name": "Insecure pattern 'cors_wildcard' in api/bids.js:437", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/bids.js:437"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9bc85904bb9c391d", "name": "Insecure pattern 'cors_wildcard' in api/auth.js:61", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/auth.js:61"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7f771eef4349b121", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/diagnostics.html:93", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/diagnostics.html:93"}, "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-160f061c5040461a", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/kiosk.html:327", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/kiosk.html:327"}, "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-bc34799dda5b6607", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/timeclock.html:417", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/timeclock.html:417"}, "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-bbf3ca4254daebce", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/wip.js:84", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/wip.js:84"}, "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-de57966d6d56c912", "name": "Insecure pattern 'insert_adjacent_html' in public/js/wip.js:410", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in public/js/wip.js:410"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-389225af1562a3b0", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/yield.js:13", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/yield.js:13"}, "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-a746f928768639e3", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/todo.js:213", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/todo.js:213"}, "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-cf5647cc9b544a51", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/flavor.js:58", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/flavor.js:58"}, "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-80ec05d3ac4d9c53", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/contracts.js:77", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/contracts.js:77"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5a33734520fa1658", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/qb-sync.js:60", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/qb-sync.js:60"}, "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-16724f0945e22416", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/audit.js:23", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/audit.js:23"}, "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-109f439aecd8d44a", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/staff-schedule.js:135", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/staff-schedule.js:135"}, "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-79d965ca863595c7", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/grants.js:52", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/grants.js:52"}, "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-aa0da998baafc7ca", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/naas.js:186", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/naas.js:186"}, "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-4dbe85aec98ee87a", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/sales.js:62", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/sales.js:62"}, "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-123828a49743780f", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/dashboard.js:99", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/dashboard.js:99"}, "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-4bce5529013319a6", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/haccp.js:127", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/haccp.js:127"}, "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-5a6fd4ddbe317626", "name": "Insecure pattern 'insert_adjacent_html' in public/js/haccp.js:2110", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in public/js/haccp.js:2110"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b94ce2f2947cdc7f", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/alerts.js:74", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/alerts.js:74"}, "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-abe963831d51c6c8", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/utils.js:431", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/utils.js:431"}, "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-992f05b7f9bfffcc", "name": "Insecure pattern 'document_write' in public/js/timeclock.js:1865", "shortDescription": {"text": "Insecure pattern 'document_write' in public/js/timeclock.js:1865"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-991920df3ae721a2", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/timeclock.js:159", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/timeclock.js:159"}, "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-d0d4e9d3423b9513", "name": "Insecure pattern 'insert_adjacent_html' in public/js/timeclock.js:3490", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in public/js/timeclock.js:3490"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c37a73b3e058ed71", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/production.js:83", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/production.js:83"}, "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-6524fcaf07cfd7b9", "name": "Insecure pattern 'document_write' in public/js/fish-schedule.js:2743", "shortDescription": {"text": "Insecure pattern 'document_write' in public/js/fish-schedule.js:2743"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7e0f51316eae0d21", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/fish-schedule.js:144", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/fish-schedule.js:144"}, "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-512bd5aa4252aaa8", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/parts.js:38", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/parts.js:38"}, "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-997f75683b316be0", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/management-report.js:146", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/management-report.js:146"}, "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-a202f4f6e4866314", "name": "Insecure pattern 'insert_adjacent_html' in public/js/management-report.js:509", "shortDescription": {"text": "Insecure pattern 'insert_adjacent_html' in public/js/management-report.js:509"}, "fullDescription": {"text": "Found a known-risky pattern (insert_adjacent_html). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-602d414d9b71340b", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/ai.js:93", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/ai.js:93"}, "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-e42cf74e7ce562ed", "name": "Insecure pattern 'direct_outerhtml_assignment' in public/js/ai.js:178", "shortDescription": {"text": "Insecure pattern 'direct_outerhtml_assignment' in public/js/ai.js:178"}, "fullDescription": {"text": "Found a known-risky pattern (direct_outerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a9e1490ca2245a4d", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/qb-picker.js:85", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/qb-picker.js:85"}, "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-8616bc978c377b28", "name": "Insecure pattern 'document_write' in public/js/print.js:8", "shortDescription": {"text": "Insecure pattern 'document_write' in public/js/print.js:8"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2aa0c271804e4df7", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/production-report.js:150", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/production-report.js:150"}, "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-eb549c3315d7fdb4", "name": "Insecure pattern 'document_write' in public/js/bids.js:2157", "shortDescription": {"text": "Insecure pattern 'document_write' in public/js/bids.js:2157"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2faed6c7016c099d", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/bids.js:74", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/bids.js:74"}, "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-7ed5982dbd0571e1", "name": "Insecure pattern 'direct_outerhtml_assignment' in public/js/bids.js:120", "shortDescription": {"text": "Insecure pattern 'direct_outerhtml_assignment' in public/js/bids.js:120"}, "fullDescription": {"text": "Found a known-risky pattern (direct_outerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f91c12c4dac32889", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/auth.js:150", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/auth.js:150"}, "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-3ba06a25bd7fcd9e", "name": "Insecure pattern 'local_storage_auth_token' in public/js/auth.js:14", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in public/js/auth.js:14"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0895741595ff41a1", "name": "Possible secret in public/js/admin.js", "shortDescription": {"text": "Possible secret in public/js/admin.js"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-38d6dc9969a2f694", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/admin.js:22", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/admin.js:22"}, "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-523cf4480131110e", "name": "Insecure pattern 'document_write' in public/js/trimmer.js:458", "shortDescription": {"text": "Insecure pattern 'document_write' in public/js/trimmer.js:458"}, "fullDescription": {"text": "Found a known-risky pattern (document_write). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5d815efaf95c61d5", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/trimmer.js:31", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/trimmer.js:31"}, "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-81a159851ec12e7d", "name": "Insecure pattern 'direct_innerhtml_assignment' in public/js/injector.js:13", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/injector.js:13"}, "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-f610807a4016d5fc", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/checkout@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-55c98f17db17702b", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/upload-artifact@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d7a92ee386b4cea5", "name": "Very large file: api/qb-admin.js (2181 lines)", "shortDescription": {"text": "Very large file: api/qb-admin.js (2181 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b4d8dd57cd122733", "name": "Very large file: api/grants.js (3947 lines)", "shortDescription": {"text": "Very large file: api/grants.js (3947 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ad92737220f0c0fa", "name": "Very large file: api/records.js (1017 lines)", "shortDescription": {"text": "Very large file: api/records.js (1017 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-83e364daad24fa93", "name": "Very large file: api/naas.js (1492 lines)", "shortDescription": {"text": "Very large file: api/naas.js (1492 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4d134ebd7cc8d0d9", "name": "Very large file: api/sales.js (3345 lines)", "shortDescription": {"text": "Very large file: api/sales.js (3345 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5957d96808041f71", "name": "Very large file: api/haccp.js (2610 lines)", "shortDescription": {"text": "Very large file: api/haccp.js (2610 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e13450145c441a63", "name": "Very large file: api/qb-soap.js (2208 lines)", "shortDescription": {"text": "Very large file: api/qb-soap.js (2208 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f92df154055489d9", "name": "Very large file: api/tasks.js (1599 lines)", "shortDescription": {"text": "Very large file: api/tasks.js (1599 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5193bdfaddb2031c", "name": "Very large file: api/timeclock.js (4919 lines)", "shortDescription": {"text": "Very large file: api/timeclock.js (4919 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-596d5c9a81ec238b", "name": "Very large file: api/production.js (1370 lines)", "shortDescription": {"text": "Very large file: api/production.js (1370 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a9ea7e99c1a08c5", "name": "Very large file: api/fish-schedule.js (1572 lines)", "shortDescription": {"text": "Very large file: api/fish-schedule.js (1572 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-767ac5b3c289132b", "name": "Very large file: api/parts.js (933 lines)", "shortDescription": {"text": "Very large file: api/parts.js (933 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5aa0fad3d0e07d8a", "name": "Very large file: api/bids.js (1678 lines)", "shortDescription": {"text": "Very large file: api/bids.js (1678 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5a10f32deca41449", "name": "Very large file: public/js/todo.js (3370 lines)", "shortDescription": {"text": "Very large file: public/js/todo.js (3370 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a28d5ed027b03f57", "name": "Very large file: public/js/flavor.js (1253 lines)", "shortDescription": {"text": "Very large file: public/js/flavor.js (1253 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-62dc86599b3078f7", "name": "Very large file: public/js/qb-sync.js (1093 lines)", "shortDescription": {"text": "Very large file: public/js/qb-sync.js (1093 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f039c2fd49a1899b", "name": "Very large file: public/js/staff-schedule.js (1333 lines)", "shortDescription": {"text": "Very large file: public/js/staff-schedule.js (1333 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c30cfcdc2eaac7b", "name": "Very large file: public/js/grants.js (2686 lines)", "shortDescription": {"text": "Very large file: public/js/grants.js (2686 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b114c4b8afbae6b3", "name": "Very large file: public/js/naas.js (1602 lines)", "shortDescription": {"text": "Very large file: public/js/naas.js (1602 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5f07f827d4d12793", "name": "Very large file: public/js/sales.js (3108 lines)", "shortDescription": {"text": "Very large file: public/js/sales.js (3108 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f874a1f92704bf0d", "name": "Very large file: public/js/haccp.js (2839 lines)", "shortDescription": {"text": "Very large file: public/js/haccp.js (2839 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3bb9cfe26bffa331", "name": "Very large file: public/js/timeclock.js (4487 lines)", "shortDescription": {"text": "Very large file: public/js/timeclock.js (4487 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-77cd5688a1f9efc4", "name": "Very large file: public/js/production.js (1081 lines)", "shortDescription": {"text": "Very large file: public/js/production.js (1081 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8942ec91dc640f08", "name": "Very large file: public/js/fish-schedule.js (3838 lines)", "shortDescription": {"text": "Very large file: public/js/fish-schedule.js (3838 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8ef8ca0be6784b68", "name": "Very large file: public/js/production-report.js (1259 lines)", "shortDescription": {"text": "Very large file: public/js/production-report.js (1259 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-45125dedb7061a8b", "name": "Very large file: public/js/bids.js (2586 lines)", "shortDescription": {"text": "Very large file: public/js/bids.js (2586 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c30c89d81de3458c", "name": "Very large file: public/js/admin.js (959 lines)", "shortDescription": {"text": "Very large file: public/js/admin.js (959 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1c56014759e2408e", "name": "Very large file: public/js/trimmer.js (1720 lines)", "shortDescription": {"text": "Very large file: public/js/trimmer.js (1720 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "0 test file(s) for 73 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-faccb9061e9b52a0", "name": "No README detected", "shortDescription": {"text": "No README detected"}, "fullDescription": {"text": "No README file was found. Generated repos without README context are hard to operate, validate, or safely hand off."}, "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 22 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 253 placeholder/mock markers across 29 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, operator-readme. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, tests, operator-readme. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-98afa296ca236a95", "name": "Commented-code block (7 lines) in api/wip.js:4", "shortDescription": {"text": "Commented-code block (7 lines) in api/wip.js:4"}, "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-8b5e4ebd4e28b72c", "name": "Commented-code block (6 lines) in api/flavor.js:10", "shortDescription": {"text": "Commented-code block (6 lines) in api/flavor.js:10"}, "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-7450a1b5ca6e3050", "name": "Commented-code block (5 lines) in api/timeclock-kiosk.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in api/timeclock-kiosk.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a3e2808e881d4cc2", "name": "Commented-code block (9 lines) in api/contracts.js:4", "shortDescription": {"text": "Commented-code block (9 lines) in api/contracts.js:4"}, "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-62d167f19ba4a41e", "name": "Commented-code block (9 lines) in api/qb-admin.js:23", "shortDescription": {"text": "Commented-code block (9 lines) in api/qb-admin.js:23"}, "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-543de653acbb8bd7", "name": "Commented-code block (7 lines) in api/audit.js:9", "shortDescription": {"text": "Commented-code block (7 lines) in api/audit.js:9"}, "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-a59468e21146b3ce", "name": "Commented-code block (6 lines) in api/passkey.js:121", "shortDescription": {"text": "Commented-code block (6 lines) in api/passkey.js:121"}, "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-4feecfe649cc391b", "name": "Commented-code block (5 lines) in api/_ratelimit.js:60", "shortDescription": {"text": "Commented-code block (5 lines) in api/_ratelimit.js:60"}, "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-b4bd2026379f390c", "name": "Commented-code block (5 lines) in api/staff-schedule.js:71", "shortDescription": {"text": "Commented-code block (5 lines) in api/staff-schedule.js:71"}, "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-f4e1de23b83ceae4", "name": "Commented-code block (10 lines) in api/grants.js:3", "shortDescription": {"text": "Commented-code block (10 lines) in api/grants.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-586a1336481d3040", "name": "Commented-code block (8 lines) in api/ai-admin.js:3", "shortDescription": {"text": "Commented-code block (8 lines) in api/ai-admin.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3a2225372e436cdf", "name": "Commented-code block (13 lines) in api/records.js:3", "shortDescription": {"text": "Commented-code block (13 lines) in api/records.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a5ed7c326089d2f8", "name": "Commented-code block (12 lines) in api/analytics.js:38", "shortDescription": {"text": "Commented-code block (12 lines) in api/analytics.js:38"}, "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-e12d4259d98b2091", "name": "Commented-code block (5 lines) in api/naas.js:4", "shortDescription": {"text": "Commented-code block (5 lines) in api/naas.js:4"}, "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-7e55407be0fc1fa1", "name": "Commented-code block (8 lines) in api/sales.js:8", "shortDescription": {"text": "Commented-code block (8 lines) in api/sales.js:8"}, "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-a3f7a46cc4f38011", "name": "Legacy-named symbol `freezer_old` in api/haccp.js:281", "shortDescription": {"text": "Legacy-named symbol `freezer_old` in api/haccp.js:281"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2a38db013def7753", "name": "Commented-code block (7 lines) in api/haccp.js:448", "shortDescription": {"text": "Commented-code block (7 lines) in api/haccp.js:448"}, "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-d1284565817f9153", "name": "Commented-code block (5 lines) in api/qb-soap.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in api/qb-soap.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9cdc35708036732e", "name": "Commented-code block (6 lines) in api/tasks.js:18", "shortDescription": {"text": "Commented-code block (6 lines) in api/tasks.js:18"}, "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-c946b85294060ddf", "name": "Commented-code block (5 lines) in api/qb-lists.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in api/qb-lists.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a3e5817cfcc6446", "name": "Commented-code block (5 lines) in api/_sentry.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in api/_sentry.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-699f65461630f7e2", "name": "Commented-code block (5 lines) in api/kiosk.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in api/kiosk.js:1"}, "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-f023e143ea8ce2b1", "name": "Commented-code block (6 lines) in api/timeclock.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in api/timeclock.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1100c3adbd203a84", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/troubleshoot.js:10", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/troubleshoot.js:10"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-43a8369a0080f72d", "name": "Commented-code block (7 lines) in api/production.js:7", "shortDescription": {"text": "Commented-code block (7 lines) in api/production.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-daa77e04018be569", "name": "Commented-code block (7 lines) in api/_email.js:3", "shortDescription": {"text": "Commented-code block (7 lines) in api/_email.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4afddd6d5e49660a", "name": "Commented-code block (9 lines) in api/_audit.js:1", "shortDescription": {"text": "Commented-code block (9 lines) in api/_audit.js:1"}, "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-d658407513709286", "name": "Legacy-named symbol `deductionLegacy` in api/fish-schedule.js:1385", "shortDescription": {"text": "Legacy-named symbol `deductionLegacy` in api/fish-schedule.js:1385"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2dd3b70e377cf315", "name": "Commented-code block (5 lines) in api/fish-schedule.js:8", "shortDescription": {"text": "Commented-code block (5 lines) in api/fish-schedule.js:8"}, "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-b37b0ad5612f48cf", "name": "Commented-code block (5 lines) in api/parts.js:322", "shortDescription": {"text": "Commented-code block (5 lines) in api/parts.js:322"}, "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-a07972dd42241dce", "name": "Commented-code block (6 lines) in api/management-report.js:13", "shortDescription": {"text": "Commented-code block (6 lines) in api/management-report.js:13"}, "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-5f4f223d90c670a2", "name": "Commented-code block (5 lines) in api/seed.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in api/seed.js:1"}, "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-a6ba8af2845bc563", "name": "Commented-code block (6 lines) in api/users.js:25", "shortDescription": {"text": "Commented-code block (6 lines) in api/users.js:25"}, "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-a947b2ef5777ec85", "name": "Commented-code block (5 lines) in api/login.js:29", "shortDescription": {"text": "Commented-code block (5 lines) in api/login.js:29"}, "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-cba1c3876ade5379", "name": "Commented-code block (20 lines) in api/health.js:11", "shortDescription": {"text": "Commented-code block (20 lines) in api/health.js:11"}, "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-abe0e5e6ec85544b", "name": "Commented-code block (5 lines) in api/production-report.js:6", "shortDescription": {"text": "Commented-code block (5 lines) in api/production-report.js:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e686bf3c63b27012", "name": "Commented-code block (5 lines) in api/bids.js:11", "shortDescription": {"text": "Commented-code block (5 lines) in api/bids.js:11"}, "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-805e3c323bf0000a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 api/bids.js:230", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/bids.js:230"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3aaad2fa7ebbe32d", "name": "Commented-code block (5 lines) in api/_naas_forms.js:5", "shortDescription": {"text": "Commented-code block (5 lines) in api/_naas_forms.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-a37d843a8ba1daa7", "name": "Commented-code block (9 lines) in api/auth.js:11", "shortDescription": {"text": "Commented-code block (9 lines) in api/auth.js:11"}, "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-797ac8ab5f6e2897", "name": "Commented-code block (5 lines) in api/_naas_template_data.js:4", "shortDescription": {"text": "Commented-code block (5 lines) in api/_naas_template_data.js:4"}, "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-c1f537f3fd95fcf2", "name": "Commented-code block (5 lines) in api/_permissions.js:11", "shortDescription": {"text": "Commented-code block (5 lines) in api/_permissions.js:11"}, "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-8c26c9500fee0589", "name": "Commented-code block (6 lines) in public/js/wip.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in public/js/wip.js:1"}, "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-7ca2e7a442113cc5", "name": "Commented-code block (6 lines) in public/js/yield.js:108", "shortDescription": {"text": "Commented-code block (6 lines) in public/js/yield.js:108"}, "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-f3dee82ed23a4f6a", "name": "Commented-code block (5 lines) in public/js/todo.js:295", "shortDescription": {"text": "Commented-code block (5 lines) in public/js/todo.js:295"}, "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-da1950042bf901b5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/todo.js:229", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/todo.js:229"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6dce5c66845406df", "name": "Commented-code block (5 lines) in public/js/flavor.js:193", "shortDescription": {"text": "Commented-code block (5 lines) in public/js/flavor.js:193"}, "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-00136395085f272a", "name": "Commented-code block (6 lines) in public/js/qb-sync.js:33", "shortDescription": {"text": "Commented-code block (6 lines) in public/js/qb-sync.js:33"}, "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-76ba230654ca19e5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/qb-sync.js:995", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/qb-sync.js:995"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3112f673d87848f2", "name": "Commented-code block (6 lines) in public/js/staff-schedule.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in public/js/staff-schedule.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-27917d7d38848e57", "name": "Commented-code block (5 lines) in public/js/grants.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in public/js/grants.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c57bb9beb8766c5b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/grants.js:1739", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/grants.js:1739"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1105435263a7ab44", "name": "Commented-code block (17 lines) in public/js/naas.js:1", "shortDescription": {"text": "Commented-code block (17 lines) in public/js/naas.js:1"}, "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-0ccf3bf65c1616f7", "name": "Commented-code block (9 lines) in public/js/sales.js:47", "shortDescription": {"text": "Commented-code block (9 lines) in public/js/sales.js:47"}, "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-a519fdfff0c45bc1", "name": "Commented-code block (7 lines) in public/js/dashboard.js:29", "shortDescription": {"text": "Commented-code block (7 lines) in public/js/dashboard.js:29"}, "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-1b5f41e58d5651bb", "name": "Commented-code block (6 lines) in public/js/haccp.js:590", "shortDescription": {"text": "Commented-code block (6 lines) in public/js/haccp.js:590"}, "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-4a9a89c06b1c6fe0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/haccp.js:418", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/haccp.js:418"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-bf62cd989df3af8c", "name": "Commented-code block (5 lines) in public/js/alerts.js:7", "shortDescription": {"text": "Commented-code block (5 lines) in public/js/alerts.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-87c2f97597d075a5", "name": "Commented-code block (10 lines) in public/js/utils.js:9", "shortDescription": {"text": "Commented-code block (10 lines) in public/js/utils.js:9"}, "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-5136f14c64b608e1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/utils.js:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/utils.js:30"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-aa548a0fb59d9568", "name": "Commented-code block (5 lines) in public/js/timeclock.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in public/js/timeclock.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-151af96332a24b0c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/timeclock.js:4032", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/timeclock.js:4032"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9e0dfa287f997e3c", "name": "Commented-code block (5 lines) in public/js/production.js:234", "shortDescription": {"text": "Commented-code block (5 lines) in public/js/production.js:234"}, "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-3a55bfbed4b2bdc0", "name": "Commented-code block (7 lines) in public/js/fish-schedule.js:54", "shortDescription": {"text": "Commented-code block (7 lines) in public/js/fish-schedule.js:54"}, "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-c3032e73025e22ef", "name": "Commented-code block (5 lines) in public/js/parts.js:3", "shortDescription": {"text": "Commented-code block (5 lines) in public/js/parts.js:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ad76d07b817bf5d6", "name": "Commented-code block (7 lines) in public/js/management-report.js:9", "shortDescription": {"text": "Commented-code block (7 lines) in public/js/management-report.js:9"}, "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-d278926edb572742", "name": "Commented-code block (10 lines) in public/js/qb-picker.js:7", "shortDescription": {"text": "Commented-code block (10 lines) in public/js/qb-picker.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-d5ca3141652adca0", "name": "Commented-code block (10 lines) in public/js/production-report.js:403", "shortDescription": {"text": "Commented-code block (10 lines) in public/js/production-report.js:403"}, "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-1fedc73776b3aee5", "name": "Commented-code block (8 lines) in public/js/bids.js:157", "shortDescription": {"text": "Commented-code block (8 lines) in public/js/bids.js:157"}, "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-aaac98eb2699d450", "name": "Commented-code block (7 lines) in public/js/auth.js:29", "shortDescription": {"text": "Commented-code block (7 lines) in public/js/auth.js:29"}, "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-c6c5c06c57a7f743", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/auth.js:342", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/auth.js:342"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-44bd8a104ef0cb2a", "name": "Commented-code block (6 lines) in public/js/admin.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in public/js/admin.js:1"}, "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-87393b9bce945680", "name": "Commented-code block (6 lines) in public/js/trimmer.js:272", "shortDescription": {"text": "Commented-code block (6 lines) in public/js/trimmer.js:272"}, "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-02247ba8a049e3db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/trimmer.js:1698", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/trimmer.js:1698"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f7d246db552af57c", "name": "Commented-code block (7 lines) in public/js/injector.js:20", "shortDescription": {"text": "Commented-code block (7 lines) in public/js/injector.js:20"}, "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}}]}}, "automationDetails": {"id": "repobility/25086"}, "properties": {"repository": "cooper-pop/pride-portal", "repoUrl": "https://github.com/cooper-pop/pride-portal", "branch": "main"}, "results": [{"ruleId": "scanner-e491cd1de0f78603", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/_naas_forms.js:29"}, "properties": {"repobilityId": "16b4d36e60595c18", "scanner": "scanner-primary", "fingerprint": "e491cd1de0f78603", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-29ffc6ce8138a82e", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 public/js/wip.js:373"}, "properties": {"repobilityId": "01eead0ac2d205d3", "scanner": "scanner-primary", "fingerprint": "29ffc6ce8138a82e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-359a456bf37f70d1", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 public/js/yield.js:125"}, "properties": {"repobilityId": "23e20606a858901f", "scanner": "scanner-primary", "fingerprint": "359a456bf37f70d1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-840922916a268aba", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 public/js/todo.js:1176"}, "properties": {"repobilityId": "40a0891306f6d09b", "scanner": "scanner-primary", "fingerprint": "840922916a268aba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-d9f2bd9f7d167b8d", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 public/js/todo.js:2"}, "properties": {"repobilityId": "2d121698712e8006", "scanner": "scanner-primary", "fingerprint": "d9f2bd9f7d167b8d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-574b69967c75103b", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 public/js/qb-sync.js:811"}, "properties": {"repobilityId": "61e4e77a66570e0b", "scanner": "scanner-primary", "fingerprint": "574b69967c75103b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-d64e24eb778688dd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 public/js/qb-sync.js:898"}, "properties": {"repobilityId": "61b270ebc51054eb", "scanner": "scanner-primary", "fingerprint": "d64e24eb778688dd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6e0568b27f2f8205", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 public/js/grants.js:374"}, "properties": {"repobilityId": "9ca1497cfd17e9f9", "scanner": "scanner-primary", "fingerprint": "6e0568b27f2f8205", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-84ea00f64dfbf1b6", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 public/js/naas.js:1543"}, "properties": {"repobilityId": "a645f0de916a5d42", "scanner": "scanner-primary", "fingerprint": "84ea00f64dfbf1b6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-a78cf140efa09f24", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 public/js/naas.js:1462"}, "properties": {"repobilityId": "bd2b3fd5c27ba596", "scanner": "scanner-primary", "fingerprint": "a78cf140efa09f24", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-84a07d72f401fce5", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 public/js/sales.js:732"}, "properties": {"repobilityId": "aa75b3d567c13ca6", "scanner": "scanner-primary", "fingerprint": "84a07d72f401fce5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-80bf87020eb3acfa", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 public/js/haccp.js:349"}, "properties": {"repobilityId": "3c14f7f4f0a756e2", "scanner": "scanner-primary", "fingerprint": "80bf87020eb3acfa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-7e02ba8677e5278f", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 public/js/timeclock.js:787"}, "properties": {"repobilityId": "c9f858b9623438bf", "scanner": "scanner-primary", "fingerprint": "7e02ba8677e5278f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-a599c0d0e7f6740e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 public/js/production.js:999"}, "properties": {"repobilityId": "31cc05c4fb042632", "scanner": "scanner-primary", "fingerprint": "a599c0d0e7f6740e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-729fa82ffa3b5bcb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 public/js/parts.js:573"}, "properties": {"repobilityId": "44517624131df1d4", "scanner": "scanner-primary", "fingerprint": "729fa82ffa3b5bcb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9727d5b7dfb6b76a", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 public/js/management-report.js:327"}, "properties": {"repobilityId": "abc64f81ff3ce950", "scanner": "scanner-primary", "fingerprint": "9727d5b7dfb6b76a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-0a3f866ce7fb8b97", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 public/js/production-report.js:696"}, "properties": {"repobilityId": "b287c7ab08ed754a", "scanner": "scanner-primary", "fingerprint": "0a3f866ce7fb8b97", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-b596cc933b69168b", "level": "warning", "message": {"text": "Privileged port 587 in use"}, "properties": {"repobilityId": "a87a96c3b2e62c08", "scanner": "scanner-primary", "fingerprint": "b596cc933b69168b", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/grants.js"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c6b1b8bb6f2c1f63", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/wip.js:355"}, "properties": {"repobilityId": "7e6414746c2e3eed", "scanner": "scanner-primary", "fingerprint": "c6b1b8bb6f2c1f63", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/wip.js"}, "region": {"startLine": 355}}}]}, {"ruleId": "scanner-e2aae7baaf633738", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/flavor.js:153"}, "properties": {"repobilityId": "08d1dc4506016b0b", "scanner": "scanner-primary", "fingerprint": "e2aae7baaf633738", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/flavor.js"}, "region": {"startLine": 153}}}]}, {"ruleId": "scanner-b060fbe1212e1475", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/timeclock-kiosk.js:332"}, "properties": {"repobilityId": "0eddad7e5a8480ff", "scanner": "scanner-primary", "fingerprint": "b060fbe1212e1475", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/timeclock-kiosk.js"}, "region": {"startLine": 332}}}]}, {"ruleId": "scanner-95bc9f146cb0eb85", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/contracts.js:183"}, "properties": {"repobilityId": "9c663e425ff6d164", "scanner": "scanner-primary", "fingerprint": "95bc9f146cb0eb85", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/contracts.js"}, "region": {"startLine": 183}}}]}, {"ruleId": "scanner-ebb83c7fbf66d252", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/qb-admin.js:272"}, "properties": {"repobilityId": "00d018212b2e935a", "scanner": "scanner-primary", "fingerprint": "ebb83c7fbf66d252", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/qb-admin.js"}, "region": {"startLine": 272}}}]}, {"ruleId": "scanner-e206c92693bb6f2e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/audit.js:28"}, "properties": {"repobilityId": "1550df53c1f0a962", "scanner": "scanner-primary", "fingerprint": "e206c92693bb6f2e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/audit.js"}, "region": {"startLine": 28}}}]}, {"ruleId": "scanner-7163540a6ea25717", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/passkey.js:21"}, "properties": {"repobilityId": "e4fc629fafb0ab83", "scanner": "scanner-primary", "fingerprint": "7163540a6ea25717", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/passkey.js"}, "region": {"startLine": 21}}}]}, {"ruleId": "scanner-84e28bfc929285da", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/staff-schedule.js:153"}, "properties": {"repobilityId": "f9fcd9040334af5f", "scanner": "scanner-primary", "fingerprint": "84e28bfc929285da", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/staff-schedule.js"}, "region": {"startLine": 153}}}]}, {"ruleId": "scanner-e83c015192421b69", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/grants.js:1225"}, "properties": {"repobilityId": "776484a3811bb414", "scanner": "scanner-primary", "fingerprint": "e83c015192421b69", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/grants.js"}, "region": {"startLine": 1225}}}]}, {"ruleId": "scanner-f1c5d5cdcf7f26e2", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/setup.js:10"}, "properties": {"repobilityId": "1f5b996029b83e38", "scanner": "scanner-primary", "fingerprint": "f1c5d5cdcf7f26e2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/setup.js"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-83e88e7deb552804", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/ai-admin.js:354"}, "properties": {"repobilityId": "7ee4e963a726f162", "scanner": "scanner-primary", "fingerprint": "83e88e7deb552804", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/ai-admin.js"}, "region": {"startLine": 354}}}]}, {"ruleId": "scanner-1a96bef23d611029", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/extract.js:43"}, "properties": {"repobilityId": "b445b02e1e3a3252", "scanner": "scanner-primary", "fingerprint": "1a96bef23d611029", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/extract.js"}, "region": {"startLine": 43}}}]}, {"ruleId": "scanner-167e71fe1dc834df", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/records.js:60"}, "properties": {"repobilityId": "4d698b7059df6996", "scanner": "scanner-primary", "fingerprint": "167e71fe1dc834df", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/records.js"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-47315680203f168a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/analytics.js:5"}, "properties": {"repobilityId": "afdf6edc6bc6b71b", "scanner": "scanner-primary", "fingerprint": "47315680203f168a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/analytics.js"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-90703779c1526a8e", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/naas.js:163"}, "properties": {"repobilityId": "3ac5bf2a2fd3954e", "scanner": "scanner-primary", "fingerprint": "90703779c1526a8e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/naas.js"}, "region": {"startLine": 163}}}]}, {"ruleId": "scanner-e0ac685e62c5eef3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/sales.js:1239"}, "properties": {"repobilityId": "49fb13823ed7d3cf", "scanner": "scanner-primary", "fingerprint": "e0ac685e62c5eef3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/sales.js"}, "region": {"startLine": 1239}}}]}, {"ruleId": "scanner-dc78e8e38901e3a2", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/haccp.js:994"}, "properties": {"repobilityId": "50e8369c7320a9c1", "scanner": "scanner-primary", "fingerprint": "dc78e8e38901e3a2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/haccp.js"}, "region": {"startLine": 994}}}]}, {"ruleId": "scanner-be8fbd20fd061c0a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/settings.js:3"}, "properties": {"repobilityId": "d2b81f3e530ceb4d", "scanner": "scanner-primary", "fingerprint": "be8fbd20fd061c0a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/settings.js"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-8f756cd6bd618511", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/tasks.js:138"}, "properties": {"repobilityId": "95730e597083a985", "scanner": "scanner-primary", "fingerprint": "8f756cd6bd618511", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/tasks.js"}, "region": {"startLine": 138}}}]}, {"ruleId": "scanner-2bc015b3a8349a1d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/qb-lists.js:24"}, "properties": {"repobilityId": "0f9aa383d7217bd2", "scanner": "scanner-primary", "fingerprint": "2bc015b3a8349a1d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/qb-lists.js"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-20f6bf901f0b2eb3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/kiosk.js:71"}, "properties": {"repobilityId": "dfc9b90d5c52f4fb", "scanner": "scanner-primary", "fingerprint": "20f6bf901f0b2eb3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/kiosk.js"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-77c4087c99c318c1", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/timeclock.js:1578"}, "properties": {"repobilityId": "1b7e1acc6316eece", "scanner": "scanner-primary", "fingerprint": "77c4087c99c318c1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/timeclock.js"}, "region": {"startLine": 1578}}}]}, {"ruleId": "scanner-25d911067c335518", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/troubleshoot.js:71"}, "properties": {"repobilityId": "0933f14e0010a2a5", "scanner": "scanner-primary", "fingerprint": "25d911067c335518", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/troubleshoot.js"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-813c6c512f7692fa", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/production.js:563"}, "properties": {"repobilityId": "59ac341b305b704a", "scanner": "scanner-primary", "fingerprint": "813c6c512f7692fa", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/production.js"}, "region": {"startLine": 563}}}]}, {"ruleId": "scanner-df70b92388442fb4", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/fish-schedule.js:329"}, "properties": {"repobilityId": "6e4287ec4b5f199d", "scanner": "scanner-primary", "fingerprint": "df70b92388442fb4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/fish-schedule.js"}, "region": {"startLine": 329}}}]}, {"ruleId": "scanner-321ae50ea3413888", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/parts.js:7"}, "properties": {"repobilityId": "760999c78e576a58", "scanner": "scanner-primary", "fingerprint": "321ae50ea3413888", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/parts.js"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-7144c3bb4664aa02", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/management-report.js:55"}, "properties": {"repobilityId": "e33426dd7dcfbe33", "scanner": "scanner-primary", "fingerprint": "7144c3bb4664aa02", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/management-report.js"}, "region": {"startLine": 55}}}]}, {"ruleId": "scanner-eea87c803381f60d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/ai.js:6"}, "properties": {"repobilityId": "5908ee9fc51b0120", "scanner": "scanner-primary", "fingerprint": "eea87c803381f60d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/ai.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-72fbc2b4f8f3a390", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/manuals.js:259"}, "properties": {"repobilityId": "058aa78bbc2797bb", "scanner": "scanner-primary", "fingerprint": "72fbc2b4f8f3a390", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/manuals.js"}, "region": {"startLine": 259}}}]}, {"ruleId": "scanner-43515c8e9fd22e60", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/seed.js:9"}, "properties": {"repobilityId": "086023f2826e3975", "scanner": "scanner-primary", "fingerprint": "43515c8e9fd22e60", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/seed.js"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-876d1c37026ad33f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/users.js:13"}, "properties": {"repobilityId": "9a11d6b842c022b4", "scanner": "scanner-primary", "fingerprint": "876d1c37026ad33f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/users.js"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-b25dc1676ce97566", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/login.js:129"}, "properties": {"repobilityId": "21cbf7d09ca06850", "scanner": "scanner-primary", "fingerprint": "b25dc1676ce97566", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/login.js"}, "region": {"startLine": 129}}}]}, {"ruleId": "scanner-a55028c232cf355a", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/production-report.js:49"}, "properties": {"repobilityId": "cc5620047d37babe", "scanner": "scanner-primary", "fingerprint": "a55028c232cf355a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/production-report.js"}, "region": {"startLine": 49}}}]}, {"ruleId": "scanner-60d2df5dba5172b0", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/bids.js:437"}, "properties": {"repobilityId": "7fa84ddbe3f4d5b5", "scanner": "scanner-primary", "fingerprint": "60d2df5dba5172b0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/bids.js"}, "region": {"startLine": 437}}}]}, {"ruleId": "scanner-9bc85904bb9c391d", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/auth.js:61"}, "properties": {"repobilityId": "5b334032a8e4f385", "scanner": "scanner-primary", "fingerprint": "9bc85904bb9c391d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/auth.js"}, "region": {"startLine": 61}}}]}, {"ruleId": "scanner-7f771eef4349b121", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/diagnostics.html:93"}, "properties": {"repobilityId": "f3d60831157c2eaa", "scanner": "scanner-primary", "fingerprint": "7f771eef4349b121", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/diagnostics.html"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-160f061c5040461a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/kiosk.html:327"}, "properties": {"repobilityId": "2d15263c007126fe", "scanner": "scanner-primary", "fingerprint": "160f061c5040461a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/kiosk.html"}, "region": {"startLine": 327}}}]}, {"ruleId": "scanner-bc34799dda5b6607", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/timeclock.html:417"}, "properties": {"repobilityId": "34094ee35f4d51c2", "scanner": "scanner-primary", "fingerprint": "bc34799dda5b6607", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/timeclock.html"}, "region": {"startLine": 417}}}]}, {"ruleId": "scanner-bbf3ca4254daebce", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/wip.js:84"}, "properties": {"repobilityId": "09cb39cf3862de7a", "scanner": "scanner-primary", "fingerprint": "bbf3ca4254daebce", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/wip.js"}, "region": {"startLine": 84}}}]}, {"ruleId": "scanner-de57966d6d56c912", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in public/js/wip.js:410"}, "properties": {"repobilityId": "b22e3e5e56bee45e", "scanner": "scanner-primary", "fingerprint": "de57966d6d56c912", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/wip.js"}, "region": {"startLine": 410}}}]}, {"ruleId": "scanner-389225af1562a3b0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/yield.js:13"}, "properties": {"repobilityId": "366a817e15934d74", "scanner": "scanner-primary", "fingerprint": "389225af1562a3b0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/yield.js"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-a746f928768639e3", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/todo.js:213"}, "properties": {"repobilityId": "2bfe15c4ae3b4592", "scanner": "scanner-primary", "fingerprint": "a746f928768639e3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/todo.js"}, "region": {"startLine": 213}}}]}, {"ruleId": "scanner-cf5647cc9b544a51", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/flavor.js:58"}, "properties": {"repobilityId": "f51b58afa6fdd39d", "scanner": "scanner-primary", "fingerprint": "cf5647cc9b544a51", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/flavor.js"}, "region": {"startLine": 58}}}]}, {"ruleId": "scanner-80ec05d3ac4d9c53", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/contracts.js:77"}, "properties": {"repobilityId": "fb71964bc5c54466", "scanner": "scanner-primary", "fingerprint": "80ec05d3ac4d9c53", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/contracts.js"}, "region": {"startLine": 77}}}]}, {"ruleId": "scanner-5a33734520fa1658", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/qb-sync.js:60"}, "properties": {"repobilityId": "6fcfc31e9ecd1c03", "scanner": "scanner-primary", "fingerprint": "5a33734520fa1658", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/qb-sync.js"}, "region": {"startLine": 60}}}]}, {"ruleId": "scanner-16724f0945e22416", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/audit.js:23"}, "properties": {"repobilityId": "ef63865160517b92", "scanner": "scanner-primary", "fingerprint": "16724f0945e22416", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/audit.js"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-109f439aecd8d44a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/staff-schedule.js:135"}, "properties": {"repobilityId": "925d059457f3011f", "scanner": "scanner-primary", "fingerprint": "109f439aecd8d44a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/staff-schedule.js"}, "region": {"startLine": 135}}}]}, {"ruleId": "scanner-79d965ca863595c7", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/grants.js:52"}, "properties": {"repobilityId": "642642a3ac55bfe2", "scanner": "scanner-primary", "fingerprint": "79d965ca863595c7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/grants.js"}, "region": {"startLine": 52}}}]}, {"ruleId": "scanner-aa0da998baafc7ca", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/naas.js:186"}, "properties": {"repobilityId": "57b1984fba5a2cbd", "scanner": "scanner-primary", "fingerprint": "aa0da998baafc7ca", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/naas.js"}, "region": {"startLine": 186}}}]}, {"ruleId": "scanner-4dbe85aec98ee87a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/sales.js:62"}, "properties": {"repobilityId": "dc8eebe6ef409b4b", "scanner": "scanner-primary", "fingerprint": "4dbe85aec98ee87a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/sales.js"}, "region": {"startLine": 62}}}]}, {"ruleId": "scanner-123828a49743780f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/dashboard.js:99"}, "properties": {"repobilityId": "c46f51b4266900ee", "scanner": "scanner-primary", "fingerprint": "123828a49743780f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/dashboard.js"}, "region": {"startLine": 99}}}]}, {"ruleId": "scanner-4bce5529013319a6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/haccp.js:127"}, "properties": {"repobilityId": "cd9685fa3081ff7f", "scanner": "scanner-primary", "fingerprint": "4bce5529013319a6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/haccp.js"}, "region": {"startLine": 127}}}]}, {"ruleId": "scanner-5a6fd4ddbe317626", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in public/js/haccp.js:2110"}, "properties": {"repobilityId": "d4dde27b4cc5df27", "scanner": "scanner-primary", "fingerprint": "5a6fd4ddbe317626", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/haccp.js"}, "region": {"startLine": 2110}}}]}, {"ruleId": "scanner-b94ce2f2947cdc7f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/alerts.js:74"}, "properties": {"repobilityId": "050682115c604950", "scanner": "scanner-primary", "fingerprint": "b94ce2f2947cdc7f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/alerts.js"}, "region": {"startLine": 74}}}]}, {"ruleId": "scanner-abe963831d51c6c8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/utils.js:431"}, "properties": {"repobilityId": "d495624ac78e14d3", "scanner": "scanner-primary", "fingerprint": "abe963831d51c6c8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/utils.js"}, "region": {"startLine": 431}}}]}, {"ruleId": "scanner-992f05b7f9bfffcc", "level": "note", "message": {"text": "Insecure pattern 'document_write' in public/js/timeclock.js:1865"}, "properties": {"repobilityId": "11e4237a47c84551", "scanner": "scanner-primary", "fingerprint": "992f05b7f9bfffcc", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/timeclock.js"}, "region": {"startLine": 1865}}}]}, {"ruleId": "scanner-991920df3ae721a2", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/timeclock.js:159"}, "properties": {"repobilityId": "435c8ab49406dd08", "scanner": "scanner-primary", "fingerprint": "991920df3ae721a2", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/timeclock.js"}, "region": {"startLine": 159}}}]}, {"ruleId": "scanner-d0d4e9d3423b9513", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in public/js/timeclock.js:3490"}, "properties": {"repobilityId": "ec7a07982d5d6dbf", "scanner": "scanner-primary", "fingerprint": "d0d4e9d3423b9513", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/timeclock.js"}, "region": {"startLine": 3490}}}]}, {"ruleId": "scanner-c37a73b3e058ed71", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/production.js:83"}, "properties": {"repobilityId": "d00ffdc584ae644e", "scanner": "scanner-primary", "fingerprint": "c37a73b3e058ed71", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/production.js"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-6524fcaf07cfd7b9", "level": "note", "message": {"text": "Insecure pattern 'document_write' in public/js/fish-schedule.js:2743"}, "properties": {"repobilityId": "d040167b8d57152b", "scanner": "scanner-primary", "fingerprint": "6524fcaf07cfd7b9", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/fish-schedule.js"}, "region": {"startLine": 2743}}}]}, {"ruleId": "scanner-7e0f51316eae0d21", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/fish-schedule.js:144"}, "properties": {"repobilityId": "027582685433b578", "scanner": "scanner-primary", "fingerprint": "7e0f51316eae0d21", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/fish-schedule.js"}, "region": {"startLine": 144}}}]}, {"ruleId": "scanner-512bd5aa4252aaa8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/parts.js:38"}, "properties": {"repobilityId": "bb8a36a30222d8e7", "scanner": "scanner-primary", "fingerprint": "512bd5aa4252aaa8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/parts.js"}, "region": {"startLine": 38}}}]}, {"ruleId": "scanner-997f75683b316be0", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/management-report.js:146"}, "properties": {"repobilityId": "298fe2a466f266e7", "scanner": "scanner-primary", "fingerprint": "997f75683b316be0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/management-report.js"}, "region": {"startLine": 146}}}]}, {"ruleId": "scanner-a202f4f6e4866314", "level": "warning", "message": {"text": "Insecure pattern 'insert_adjacent_html' in public/js/management-report.js:509"}, "properties": {"repobilityId": "32afe8a8b2b7ebac", "scanner": "scanner-primary", "fingerprint": "a202f4f6e4866314", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "insert_adjacent_html"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/management-report.js"}, "region": {"startLine": 509}}}]}, {"ruleId": "scanner-602d414d9b71340b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/ai.js:93"}, "properties": {"repobilityId": "4b7b6bd829c70f37", "scanner": "scanner-primary", "fingerprint": "602d414d9b71340b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/ai.js"}, "region": {"startLine": 93}}}]}, {"ruleId": "scanner-e42cf74e7ce562ed", "level": "warning", "message": {"text": "Insecure pattern 'direct_outerhtml_assignment' in public/js/ai.js:178"}, "properties": {"repobilityId": "24c9171559cb7b96", "scanner": "scanner-primary", "fingerprint": "e42cf74e7ce562ed", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_outerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/ai.js"}, "region": {"startLine": 178}}}]}, {"ruleId": "scanner-a9e1490ca2245a4d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/qb-picker.js:85"}, "properties": {"repobilityId": "a52315c5ea492193", "scanner": "scanner-primary", "fingerprint": "a9e1490ca2245a4d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/qb-picker.js"}, "region": {"startLine": 85}}}]}, {"ruleId": "scanner-8616bc978c377b28", "level": "note", "message": {"text": "Insecure pattern 'document_write' in public/js/print.js:8"}, "properties": {"repobilityId": "500fba1b01cd1f28", "scanner": "scanner-primary", "fingerprint": "8616bc978c377b28", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/print.js"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-2aa0c271804e4df7", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/production-report.js:150"}, "properties": {"repobilityId": "ae17415653870c65", "scanner": "scanner-primary", "fingerprint": "2aa0c271804e4df7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/production-report.js"}, "region": {"startLine": 150}}}]}, {"ruleId": "scanner-eb549c3315d7fdb4", "level": "note", "message": {"text": "Insecure pattern 'document_write' in public/js/bids.js:2157"}, "properties": {"repobilityId": "15f2772527001b71", "scanner": "scanner-primary", "fingerprint": "eb549c3315d7fdb4", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/bids.js"}, "region": {"startLine": 2157}}}]}, {"ruleId": "scanner-2faed6c7016c099d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/bids.js:74"}, "properties": {"repobilityId": "1648ed287f05c50a", "scanner": "scanner-primary", "fingerprint": "2faed6c7016c099d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/bids.js"}, "region": {"startLine": 74}}}]}, {"ruleId": "scanner-7ed5982dbd0571e1", "level": "warning", "message": {"text": "Insecure pattern 'direct_outerhtml_assignment' in public/js/bids.js:120"}, "properties": {"repobilityId": "b3255cc7f1c7f05e", "scanner": "scanner-primary", "fingerprint": "7ed5982dbd0571e1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_outerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/bids.js"}, "region": {"startLine": 120}}}]}, {"ruleId": "scanner-f91c12c4dac32889", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/auth.js:150"}, "properties": {"repobilityId": "9ee36b67fc337459", "scanner": "scanner-primary", "fingerprint": "f91c12c4dac32889", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/auth.js"}, "region": {"startLine": 150}}}]}, {"ruleId": "scanner-3ba06a25bd7fcd9e", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in public/js/auth.js:14"}, "properties": {"repobilityId": "56f3c5adaf1a9d51", "scanner": "scanner-primary", "fingerprint": "3ba06a25bd7fcd9e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/auth.js"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-0895741595ff41a1", "level": "error", "message": {"text": "Possible secret in public/js/admin.js"}, "properties": {"repobilityId": "56b808aa0f75b7aa", "scanner": "scanner-primary", "fingerprint": "0895741595ff41a1", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/admin.js"}, "region": {"startLine": 462}}}]}, {"ruleId": "scanner-38d6dc9969a2f694", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/admin.js:22"}, "properties": {"repobilityId": "35cf04bb8373fd12", "scanner": "scanner-primary", "fingerprint": "38d6dc9969a2f694", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/admin.js"}, "region": {"startLine": 22}}}]}, {"ruleId": "scanner-523cf4480131110e", "level": "note", "message": {"text": "Insecure pattern 'document_write' in public/js/trimmer.js:458"}, "properties": {"repobilityId": "2c1a36916cc9ba57", "scanner": "scanner-primary", "fingerprint": "523cf4480131110e", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/trimmer.js"}, "region": {"startLine": 458}}}]}, {"ruleId": "scanner-5d815efaf95c61d5", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/trimmer.js:31"}, "properties": {"repobilityId": "b43ce43f8778115d", "scanner": "scanner-primary", "fingerprint": "5d815efaf95c61d5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/trimmer.js"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-81a159851ec12e7d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in public/js/injector.js:13"}, "properties": {"repobilityId": "bd2c741ca0084f6e", "scanner": "scanner-primary", "fingerprint": "81a159851ec12e7d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "public/js/injector.js"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-f610807a4016d5fc", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "0c0476ddf88d1a1f", "scanner": "scanner-primary", "fingerprint": "f610807a4016d5fc", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/preflight.yml"}, "region": {"startLine": 31}}}]}, {"ruleId": "scanner-f610807a4016d5fc", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "ac2536ee0332f4a9", "scanner": "scanner-primary", "fingerprint": "f610807a4016d5fc", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/preflight.yml"}, "region": {"startLine": 34}}}]}, {"ruleId": "scanner-55c98f17db17702b", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "15598600070e8f62", "scanner": "scanner-primary", "fingerprint": "55c98f17db17702b", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/backup-neon.yml"}, "region": {"startLine": 71}}}]}, {"ruleId": "scanner-d7a92ee386b4cea5", "level": "note", "message": {"text": "Very large file: api/qb-admin.js (2181 lines)"}, "properties": {"repobilityId": "169cac7f3dff54ba", "scanner": "scanner-primary", "fingerprint": "d7a92ee386b4cea5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b4d8dd57cd122733", "level": "note", "message": {"text": "Very large file: api/grants.js (3947 lines)"}, "properties": {"repobilityId": "fa0e7595b35282c1", "scanner": "scanner-primary", "fingerprint": "b4d8dd57cd122733", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ad92737220f0c0fa", "level": "note", "message": {"text": "Very large file: api/records.js (1017 lines)"}, "properties": {"repobilityId": "c1db4846d5a1594e", "scanner": "scanner-primary", "fingerprint": "ad92737220f0c0fa", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-83e364daad24fa93", "level": "note", "message": {"text": "Very large file: api/naas.js (1492 lines)"}, "properties": {"repobilityId": "8b154828282678ea", "scanner": "scanner-primary", "fingerprint": "83e364daad24fa93", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4d134ebd7cc8d0d9", "level": "note", "message": {"text": "Very large file: api/sales.js (3345 lines)"}, "properties": {"repobilityId": "54dcb5df46d305f0", "scanner": "scanner-primary", "fingerprint": "4d134ebd7cc8d0d9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5957d96808041f71", "level": "note", "message": {"text": "Very large file: api/haccp.js (2610 lines)"}, "properties": {"repobilityId": "bfb50385a7dc62cd", "scanner": "scanner-primary", "fingerprint": "5957d96808041f71", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e13450145c441a63", "level": "note", "message": {"text": "Very large file: api/qb-soap.js (2208 lines)"}, "properties": {"repobilityId": "d407a6d0cc5f4533", "scanner": "scanner-primary", "fingerprint": "e13450145c441a63", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f92df154055489d9", "level": "note", "message": {"text": "Very large file: api/tasks.js (1599 lines)"}, "properties": {"repobilityId": "70df60662df9aa52", "scanner": "scanner-primary", "fingerprint": "f92df154055489d9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5193bdfaddb2031c", "level": "note", "message": {"text": "Very large file: api/timeclock.js (4919 lines)"}, "properties": {"repobilityId": "ade16ac39a6cf432", "scanner": "scanner-primary", "fingerprint": "5193bdfaddb2031c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-596d5c9a81ec238b", "level": "note", "message": {"text": "Very large file: api/production.js (1370 lines)"}, "properties": {"repobilityId": "90039e863601b058", "scanner": "scanner-primary", "fingerprint": "596d5c9a81ec238b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4a9ea7e99c1a08c5", "level": "note", "message": {"text": "Very large file: api/fish-schedule.js (1572 lines)"}, "properties": {"repobilityId": "07aeb98008e95fb4", "scanner": "scanner-primary", "fingerprint": "4a9ea7e99c1a08c5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-767ac5b3c289132b", "level": "note", "message": {"text": "Very large file: api/parts.js (933 lines)"}, "properties": {"repobilityId": "9ff7d469a708e67d", "scanner": "scanner-primary", "fingerprint": "767ac5b3c289132b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5aa0fad3d0e07d8a", "level": "note", "message": {"text": "Very large file: api/bids.js (1678 lines)"}, "properties": {"repobilityId": "cf7007ec517863eb", "scanner": "scanner-primary", "fingerprint": "5aa0fad3d0e07d8a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5a10f32deca41449", "level": "note", "message": {"text": "Very large file: public/js/todo.js (3370 lines)"}, "properties": {"repobilityId": "82053080608147b4", "scanner": "scanner-primary", "fingerprint": "5a10f32deca41449", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a28d5ed027b03f57", "level": "note", "message": {"text": "Very large file: public/js/flavor.js (1253 lines)"}, "properties": {"repobilityId": "6cc0474f9289720f", "scanner": "scanner-primary", "fingerprint": "a28d5ed027b03f57", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-62dc86599b3078f7", "level": "note", "message": {"text": "Very large file: public/js/qb-sync.js (1093 lines)"}, "properties": {"repobilityId": "5a141254ec2cdce8", "scanner": "scanner-primary", "fingerprint": "62dc86599b3078f7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f039c2fd49a1899b", "level": "note", "message": {"text": "Very large file: public/js/staff-schedule.js (1333 lines)"}, "properties": {"repobilityId": "39ce1978848a1b39", "scanner": "scanner-primary", "fingerprint": "f039c2fd49a1899b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-2c30cfcdc2eaac7b", "level": "note", "message": {"text": "Very large file: public/js/grants.js (2686 lines)"}, "properties": {"repobilityId": "31b3e5ad8c341bbe", "scanner": "scanner-primary", "fingerprint": "2c30cfcdc2eaac7b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b114c4b8afbae6b3", "level": "note", "message": {"text": "Very large file: public/js/naas.js (1602 lines)"}, "properties": {"repobilityId": "e336d62f6ad3346e", "scanner": "scanner-primary", "fingerprint": "b114c4b8afbae6b3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-5f07f827d4d12793", "level": "note", "message": {"text": "Very large file: public/js/sales.js (3108 lines)"}, "properties": {"repobilityId": "b0486c2d694a080b", "scanner": "scanner-primary", "fingerprint": "5f07f827d4d12793", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f874a1f92704bf0d", "level": "note", "message": {"text": "Very large file: public/js/haccp.js (2839 lines)"}, "properties": {"repobilityId": "2349e1dd025b54f5", "scanner": "scanner-primary", "fingerprint": "f874a1f92704bf0d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3bb9cfe26bffa331", "level": "note", "message": {"text": "Very large file: public/js/timeclock.js (4487 lines)"}, "properties": {"repobilityId": "8da00ab829a8e441", "scanner": "scanner-primary", "fingerprint": "3bb9cfe26bffa331", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-77cd5688a1f9efc4", "level": "note", "message": {"text": "Very large file: public/js/production.js (1081 lines)"}, "properties": {"repobilityId": "a51bc35ae336c196", "scanner": "scanner-primary", "fingerprint": "77cd5688a1f9efc4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8942ec91dc640f08", "level": "note", "message": {"text": "Very large file: public/js/fish-schedule.js (3838 lines)"}, "properties": {"repobilityId": "a518465889d39192", "scanner": "scanner-primary", "fingerprint": "8942ec91dc640f08", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8ef8ca0be6784b68", "level": "note", "message": {"text": "Very large file: public/js/production-report.js (1259 lines)"}, "properties": {"repobilityId": "2db9e1a17e971adb", "scanner": "scanner-primary", "fingerprint": "8ef8ca0be6784b68", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-45125dedb7061a8b", "level": "note", "message": {"text": "Very large file: public/js/bids.js (2586 lines)"}, "properties": {"repobilityId": "3a0935f68cfcfa34", "scanner": "scanner-primary", "fingerprint": "45125dedb7061a8b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c30c89d81de3458c", "level": "note", "message": {"text": "Very large file: public/js/admin.js (959 lines)"}, "properties": {"repobilityId": "26110ff350c8b0e9", "scanner": "scanner-primary", "fingerprint": "c30c89d81de3458c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1c56014759e2408e", "level": "note", "message": {"text": "Very large file: public/js/trimmer.js (1720 lines)"}, "properties": {"repobilityId": "091a32783f98c60f", "scanner": "scanner-primary", "fingerprint": "1c56014759e2408e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "73d5491284e4ae99", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-faccb9061e9b52a0", "level": "note", "message": {"text": "No README detected"}, "properties": {"repobilityId": "99911dea10875338", "scanner": "scanner-primary", "fingerprint": "faccb9061e9b52a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["docs", "readme", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "f440247ba40b130c", "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": "0065d5864aeab9c6", "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": "0650f67833512c0e", "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": "b86014863a5c4d97", "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": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "1ea36e63fc558993", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "dcbea5638d6393a9", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-98afa296ca236a95", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/wip.js:4"}, "properties": {"repobilityId": "cf216ab5c281a877", "scanner": "scanner-primary", "fingerprint": "98afa296ca236a95", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8b5e4ebd4e28b72c", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/flavor.js:10"}, "properties": {"repobilityId": "58308a7b8af0684c", "scanner": "scanner-primary", "fingerprint": "8b5e4ebd4e28b72c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7450a1b5ca6e3050", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/timeclock-kiosk.js:3"}, "properties": {"repobilityId": "894ebe380d01e773", "scanner": "scanner-primary", "fingerprint": "7450a1b5ca6e3050", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a3e2808e881d4cc2", "level": "none", "message": {"text": "Commented-code block (9 lines) in api/contracts.js:4"}, "properties": {"repobilityId": "fe803b85eaea91be", "scanner": "scanner-primary", "fingerprint": "a3e2808e881d4cc2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-62d167f19ba4a41e", "level": "none", "message": {"text": "Commented-code block (9 lines) in api/qb-admin.js:23"}, "properties": {"repobilityId": "ac0f979ac289c80f", "scanner": "scanner-primary", "fingerprint": "62d167f19ba4a41e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-543de653acbb8bd7", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/audit.js:9"}, "properties": {"repobilityId": "9ef98764bf4133c7", "scanner": "scanner-primary", "fingerprint": "543de653acbb8bd7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a59468e21146b3ce", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/passkey.js:121"}, "properties": {"repobilityId": "051084e71644f40c", "scanner": "scanner-primary", "fingerprint": "a59468e21146b3ce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4feecfe649cc391b", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/_ratelimit.js:60"}, "properties": {"repobilityId": "7b1f8590cc2eac7c", "scanner": "scanner-primary", "fingerprint": "4feecfe649cc391b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b4bd2026379f390c", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/staff-schedule.js:71"}, "properties": {"repobilityId": "511736e62cb9617a", "scanner": "scanner-primary", "fingerprint": "b4bd2026379f390c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f4e1de23b83ceae4", "level": "none", "message": {"text": "Commented-code block (10 lines) in api/grants.js:3"}, "properties": {"repobilityId": "5efdcc7e1670f46f", "scanner": "scanner-primary", "fingerprint": "f4e1de23b83ceae4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-586a1336481d3040", "level": "none", "message": {"text": "Commented-code block (8 lines) in api/ai-admin.js:3"}, "properties": {"repobilityId": "9c2aa158705e5c16", "scanner": "scanner-primary", "fingerprint": "586a1336481d3040", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3a2225372e436cdf", "level": "none", "message": {"text": "Commented-code block (13 lines) in api/records.js:3"}, "properties": {"repobilityId": "ed818cee2b56466e", "scanner": "scanner-primary", "fingerprint": "3a2225372e436cdf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a5ed7c326089d2f8", "level": "none", "message": {"text": "Commented-code block (12 lines) in api/analytics.js:38"}, "properties": {"repobilityId": "cb6d617698ce8689", "scanner": "scanner-primary", "fingerprint": "a5ed7c326089d2f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e12d4259d98b2091", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/naas.js:4"}, "properties": {"repobilityId": "ba06574bc64feb52", "scanner": "scanner-primary", "fingerprint": "e12d4259d98b2091", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e55407be0fc1fa1", "level": "none", "message": {"text": "Commented-code block (8 lines) in api/sales.js:8"}, "properties": {"repobilityId": "ed4397f42a97c4d6", "scanner": "scanner-primary", "fingerprint": "7e55407be0fc1fa1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a3f7a46cc4f38011", "level": "note", "message": {"text": "Legacy-named symbol `freezer_old` in api/haccp.js:281"}, "properties": {"repobilityId": "c6ab6687b33d3b98", "scanner": "scanner-primary", "fingerprint": "a3f7a46cc4f38011", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2a38db013def7753", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/haccp.js:448"}, "properties": {"repobilityId": "24b231108a065d5d", "scanner": "scanner-primary", "fingerprint": "2a38db013def7753", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d1284565817f9153", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/qb-soap.js:3"}, "properties": {"repobilityId": "0562284b7cf47974", "scanner": "scanner-primary", "fingerprint": "d1284565817f9153", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9cdc35708036732e", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/tasks.js:18"}, "properties": {"repobilityId": "a992f95c33d73942", "scanner": "scanner-primary", "fingerprint": "9cdc35708036732e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c946b85294060ddf", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/qb-lists.js:3"}, "properties": {"repobilityId": "7bea836ddb692ace", "scanner": "scanner-primary", "fingerprint": "c946b85294060ddf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a3e5817cfcc6446", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/_sentry.js:3"}, "properties": {"repobilityId": "2a732ef685dbd303", "scanner": "scanner-primary", "fingerprint": "7a3e5817cfcc6446", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-699f65461630f7e2", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/kiosk.js:1"}, "properties": {"repobilityId": "9b3d9eed488836cd", "scanner": "scanner-primary", "fingerprint": "699f65461630f7e2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f023e143ea8ce2b1", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/timeclock.js:3"}, "properties": {"repobilityId": "7ef7788b1a4b3658", "scanner": "scanner-primary", "fingerprint": "f023e143ea8ce2b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1100c3adbd203a84", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/troubleshoot.js:10"}, "properties": {"repobilityId": "f3e5c238706c5a03", "scanner": "scanner-primary", "fingerprint": "1100c3adbd203a84", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-43a8369a0080f72d", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/production.js:7"}, "properties": {"repobilityId": "fdfa204a58deaeef", "scanner": "scanner-primary", "fingerprint": "43a8369a0080f72d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-daa77e04018be569", "level": "none", "message": {"text": "Commented-code block (7 lines) in api/_email.js:3"}, "properties": {"repobilityId": "86404a687b19c130", "scanner": "scanner-primary", "fingerprint": "daa77e04018be569", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4afddd6d5e49660a", "level": "none", "message": {"text": "Commented-code block (9 lines) in api/_audit.js:1"}, "properties": {"repobilityId": "3f7478bee9babcc1", "scanner": "scanner-primary", "fingerprint": "4afddd6d5e49660a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d658407513709286", "level": "note", "message": {"text": "Legacy-named symbol `deductionLegacy` in api/fish-schedule.js:1385"}, "properties": {"repobilityId": "0a14dcf7a8103a81", "scanner": "scanner-primary", "fingerprint": "d658407513709286", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-2dd3b70e377cf315", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/fish-schedule.js:8"}, "properties": {"repobilityId": "a5bbc70cfc2b5700", "scanner": "scanner-primary", "fingerprint": "2dd3b70e377cf315", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b37b0ad5612f48cf", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/parts.js:322"}, "properties": {"repobilityId": "21ee33d79212d851", "scanner": "scanner-primary", "fingerprint": "b37b0ad5612f48cf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a07972dd42241dce", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/management-report.js:13"}, "properties": {"repobilityId": "102861c4a96e4bd3", "scanner": "scanner-primary", "fingerprint": "a07972dd42241dce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5f4f223d90c670a2", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/seed.js:1"}, "properties": {"repobilityId": "8eb59a487e45c740", "scanner": "scanner-primary", "fingerprint": "5f4f223d90c670a2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6ba8af2845bc563", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/users.js:25"}, "properties": {"repobilityId": "63e8654b2c197485", "scanner": "scanner-primary", "fingerprint": "a6ba8af2845bc563", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a947b2ef5777ec85", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/login.js:29"}, "properties": {"repobilityId": "5987aad601e4cb84", "scanner": "scanner-primary", "fingerprint": "a947b2ef5777ec85", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cba1c3876ade5379", "level": "none", "message": {"text": "Commented-code block (20 lines) in api/health.js:11"}, "properties": {"repobilityId": "1ac0befbfa1e8ec8", "scanner": "scanner-primary", "fingerprint": "cba1c3876ade5379", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-abe0e5e6ec85544b", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/production-report.js:6"}, "properties": {"repobilityId": "ae2d718431aae4e6", "scanner": "scanner-primary", "fingerprint": "abe0e5e6ec85544b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e686bf3c63b27012", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/bids.js:11"}, "properties": {"repobilityId": "ababfc171b45e208", "scanner": "scanner-primary", "fingerprint": "e686bf3c63b27012", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-805e3c323bf0000a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 api/bids.js:230"}, "properties": {"repobilityId": "a5fd36c1b2059a33", "scanner": "scanner-primary", "fingerprint": "805e3c323bf0000a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3aaad2fa7ebbe32d", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/_naas_forms.js:5"}, "properties": {"repobilityId": "9252f15e4fa2d1b5", "scanner": "scanner-primary", "fingerprint": "3aaad2fa7ebbe32d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a37d843a8ba1daa7", "level": "none", "message": {"text": "Commented-code block (9 lines) in api/auth.js:11"}, "properties": {"repobilityId": "d9e6489d8771e41d", "scanner": "scanner-primary", "fingerprint": "a37d843a8ba1daa7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-797ac8ab5f6e2897", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/_naas_template_data.js:4"}, "properties": {"repobilityId": "687e73a2240d1b1f", "scanner": "scanner-primary", "fingerprint": "797ac8ab5f6e2897", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1f537f3fd95fcf2", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/_permissions.js:11"}, "properties": {"repobilityId": "3bf2aa3eabff82fe", "scanner": "scanner-primary", "fingerprint": "c1f537f3fd95fcf2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8c26c9500fee0589", "level": "none", "message": {"text": "Commented-code block (6 lines) in public/js/wip.js:1"}, "properties": {"repobilityId": "417dd125fa36f540", "scanner": "scanner-primary", "fingerprint": "8c26c9500fee0589", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ca2e7a442113cc5", "level": "none", "message": {"text": "Commented-code block (6 lines) in public/js/yield.js:108"}, "properties": {"repobilityId": "3ca6900dc95b405a", "scanner": "scanner-primary", "fingerprint": "7ca2e7a442113cc5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f3dee82ed23a4f6a", "level": "none", "message": {"text": "Commented-code block (5 lines) in public/js/todo.js:295"}, "properties": {"repobilityId": "d84f743afac3dab0", "scanner": "scanner-primary", "fingerprint": "f3dee82ed23a4f6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da1950042bf901b5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/todo.js:229"}, "properties": {"repobilityId": "03aa58906b55de09", "scanner": "scanner-primary", "fingerprint": "da1950042bf901b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6dce5c66845406df", "level": "none", "message": {"text": "Commented-code block (5 lines) in public/js/flavor.js:193"}, "properties": {"repobilityId": "b6e6c1b7bae750e6", "scanner": "scanner-primary", "fingerprint": "6dce5c66845406df", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-00136395085f272a", "level": "none", "message": {"text": "Commented-code block (6 lines) in public/js/qb-sync.js:33"}, "properties": {"repobilityId": "931ab28c3e9b5c9a", "scanner": "scanner-primary", "fingerprint": "00136395085f272a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76ba230654ca19e5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/qb-sync.js:995"}, "properties": {"repobilityId": "a2a3fd6a7aaa77e1", "scanner": "scanner-primary", "fingerprint": "76ba230654ca19e5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3112f673d87848f2", "level": "none", "message": {"text": "Commented-code block (6 lines) in public/js/staff-schedule.js:3"}, "properties": {"repobilityId": "870a71a2c72f3e69", "scanner": "scanner-primary", "fingerprint": "3112f673d87848f2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-27917d7d38848e57", "level": "none", "message": {"text": "Commented-code block (5 lines) in public/js/grants.js:3"}, "properties": {"repobilityId": "f1125a6e82f956c9", "scanner": "scanner-primary", "fingerprint": "27917d7d38848e57", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c57bb9beb8766c5b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/grants.js:1739"}, "properties": {"repobilityId": "33049175e21731c8", "scanner": "scanner-primary", "fingerprint": "c57bb9beb8766c5b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1105435263a7ab44", "level": "none", "message": {"text": "Commented-code block (17 lines) in public/js/naas.js:1"}, "properties": {"repobilityId": "955df6cc825363ae", "scanner": "scanner-primary", "fingerprint": "1105435263a7ab44", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ccf3bf65c1616f7", "level": "none", "message": {"text": "Commented-code block (9 lines) in public/js/sales.js:47"}, "properties": {"repobilityId": "b18dc3b37fc1e2eb", "scanner": "scanner-primary", "fingerprint": "0ccf3bf65c1616f7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a519fdfff0c45bc1", "level": "none", "message": {"text": "Commented-code block (7 lines) in public/js/dashboard.js:29"}, "properties": {"repobilityId": "cee00872cb196df5", "scanner": "scanner-primary", "fingerprint": "a519fdfff0c45bc1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b5f41e58d5651bb", "level": "none", "message": {"text": "Commented-code block (6 lines) in public/js/haccp.js:590"}, "properties": {"repobilityId": "56efdc6a9838ed18", "scanner": "scanner-primary", "fingerprint": "1b5f41e58d5651bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4a9a89c06b1c6fe0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/haccp.js:418"}, "properties": {"repobilityId": "5d81e546c26aee04", "scanner": "scanner-primary", "fingerprint": "4a9a89c06b1c6fe0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bf62cd989df3af8c", "level": "none", "message": {"text": "Commented-code block (5 lines) in public/js/alerts.js:7"}, "properties": {"repobilityId": "20c48d879926005d", "scanner": "scanner-primary", "fingerprint": "bf62cd989df3af8c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87c2f97597d075a5", "level": "none", "message": {"text": "Commented-code block (10 lines) in public/js/utils.js:9"}, "properties": {"repobilityId": "5c31437d443606f9", "scanner": "scanner-primary", "fingerprint": "87c2f97597d075a5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5136f14c64b608e1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/utils.js:30"}, "properties": {"repobilityId": "a08a3540df707d1c", "scanner": "scanner-primary", "fingerprint": "5136f14c64b608e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aa548a0fb59d9568", "level": "none", "message": {"text": "Commented-code block (5 lines) in public/js/timeclock.js:3"}, "properties": {"repobilityId": "798c7a43f33a7fee", "scanner": "scanner-primary", "fingerprint": "aa548a0fb59d9568", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-151af96332a24b0c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/timeclock.js:4032"}, "properties": {"repobilityId": "df9e1be32f259902", "scanner": "scanner-primary", "fingerprint": "151af96332a24b0c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9e0dfa287f997e3c", "level": "none", "message": {"text": "Commented-code block (5 lines) in public/js/production.js:234"}, "properties": {"repobilityId": "563bbb7915c76208", "scanner": "scanner-primary", "fingerprint": "9e0dfa287f997e3c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3a55bfbed4b2bdc0", "level": "none", "message": {"text": "Commented-code block (7 lines) in public/js/fish-schedule.js:54"}, "properties": {"repobilityId": "72e55d478841a335", "scanner": "scanner-primary", "fingerprint": "3a55bfbed4b2bdc0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3032e73025e22ef", "level": "none", "message": {"text": "Commented-code block (5 lines) in public/js/parts.js:3"}, "properties": {"repobilityId": "5c442b5b6643186a", "scanner": "scanner-primary", "fingerprint": "c3032e73025e22ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ad76d07b817bf5d6", "level": "none", "message": {"text": "Commented-code block (7 lines) in public/js/management-report.js:9"}, "properties": {"repobilityId": "484daa27b607e6ba", "scanner": "scanner-primary", "fingerprint": "ad76d07b817bf5d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d278926edb572742", "level": "none", "message": {"text": "Commented-code block (10 lines) in public/js/qb-picker.js:7"}, "properties": {"repobilityId": "f3db5e5428846ff6", "scanner": "scanner-primary", "fingerprint": "d278926edb572742", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5ca3141652adca0", "level": "none", "message": {"text": "Commented-code block (10 lines) in public/js/production-report.js:403"}, "properties": {"repobilityId": "76052967430efc35", "scanner": "scanner-primary", "fingerprint": "d5ca3141652adca0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1fedc73776b3aee5", "level": "none", "message": {"text": "Commented-code block (8 lines) in public/js/bids.js:157"}, "properties": {"repobilityId": "1d54c9bf0b89d99c", "scanner": "scanner-primary", "fingerprint": "1fedc73776b3aee5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aaac98eb2699d450", "level": "none", "message": {"text": "Commented-code block (7 lines) in public/js/auth.js:29"}, "properties": {"repobilityId": "acd5cf7b8c7b1bad", "scanner": "scanner-primary", "fingerprint": "aaac98eb2699d450", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c6c5c06c57a7f743", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/auth.js:342"}, "properties": {"repobilityId": "f9758721159837bf", "scanner": "scanner-primary", "fingerprint": "c6c5c06c57a7f743", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-44bd8a104ef0cb2a", "level": "none", "message": {"text": "Commented-code block (6 lines) in public/js/admin.js:1"}, "properties": {"repobilityId": "4c65237fe2523406", "scanner": "scanner-primary", "fingerprint": "44bd8a104ef0cb2a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-87393b9bce945680", "level": "none", "message": {"text": "Commented-code block (6 lines) in public/js/trimmer.js:272"}, "properties": {"repobilityId": "13993f5ccead9b6a", "scanner": "scanner-primary", "fingerprint": "87393b9bce945680", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-02247ba8a049e3db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 public/js/trimmer.js:1698"}, "properties": {"repobilityId": "1544de3752111403", "scanner": "scanner-primary", "fingerprint": "02247ba8a049e3db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f7d246db552af57c", "level": "none", "message": {"text": "Commented-code block (7 lines) in public/js/injector.js:20"}, "properties": {"repobilityId": "3c7c406a173b9653", "scanner": "scanner-primary", "fingerprint": "f7d246db552af57c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}]}]}