{"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-3c29a4be888b1ff0", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/site-visit-reminders/route.ts:94", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/site-visit-reminders/route.ts:94"}, "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-7223035f7dbc5e0b", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/affiliation-expiry/route.ts:69", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/affiliation-expiry/route.ts:69"}, "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-18f72ed37c78334b", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/debrief-reminder/route.ts:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/debrief-reminder/route.ts:59"}, "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-339118c328abfa00", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/availability-reminders/route.ts:242", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/availability-reminders/route.ts:242"}, "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-e1a3510e418ea3f2", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/compliance-expiry/route.ts:89", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/compliance-expiry/route.ts:89"}, "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-a2bb85c9d7601cb0", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/data-export/route.ts:143", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/data-export/route.ts:143"}, "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-5a9fa6c053310fd1", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/cert-expiry/route.ts:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/cert-expiry/route.ts:88"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-12d74e34ebe10be0", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/lvfr-weekly-report/route.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/lvfr-weekly-report/route.ts:27"}, "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-9370856f01a4f3fe", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/lab-reminder/route.ts:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/lab-reminder/route.ts:82"}, "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-217646e3ef0bc97c", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/internship-milestones/route.ts:79", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/internship-milestones/route.ts:79"}, "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-95f7a557491d0e45", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/daily-digest/route.ts:381", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/daily-digest/route.ts:381"}, "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-6a9163fc08e84532", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/clinical-hours-reminder/route.ts:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/clinical-hours-reminder/route.ts:74"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7d87d6038853517f", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/system-health/route.ts:305", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/system-health/route.ts:305"}, "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-8af7b35e90cf685e", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/attendance-alerts/route.ts:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/attendance-alerts/route.ts:66"}, "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-a4e1fc648b21feab", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/scheduled-exports/route.ts:465", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/scheduled-exports/route.ts:465"}, "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-2a51ec9bce4c6f40", "name": "Stray `console.log` in TS/JS \u2014 app/api/cron/cert-expiry-notifications/route.ts:95", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/cert-expiry-notifications/route.ts:95"}, "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-4d22a87f411a149b", "name": "TODO/FIXME marker in shipping code \u2014 app/api/lvfr-aemt/dashboard/route.ts:168", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 app/api/lvfr-aemt/dashboard/route.ts:168"}, "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-291d3b14b747614b", "name": "Stray `console.log` in TS/JS \u2014 app/api/lab-management/lab-days/[id]/pdf-packet/route.ts:262", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/lab-management/lab-days/[id]/pdf-packet/route.ts:262"}, "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-07f477538c710e25", "name": "Stray `console.log` in TS/JS \u2014 app/api/skill-sheets/[id]/evaluate/route.ts:239", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/skill-sheets/[id]/evaluate/route.ts:239"}, "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-c282ab77a91bdf5d", "name": "Stray `console.log` in TS/JS \u2014 app/api/scheduling/planner/blocks/[id]/route.ts:77", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/api/scheduling/planner/blocks/[id]/route.ts:77"}, "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-c878e4698a0a2b2a", "name": "`truncate` class without `title=` for hover reveal \u2014 app/labs/scenario-library/page.tsx:565", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/scenario-library/page.tsx:565"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed616246d752f3b4", "name": "`truncate` class without `title=` for hover reveal \u2014 app/labs/groups/page.tsx:985", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/groups/page.tsx:985"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3a69adb8f910dbbc", "name": "`truncate` class without `title=` for hover reveal \u2014 app/labs/templates/page.tsx:412", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/templates/page.tsx:412"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-833ae3d1c6109d15", "name": "`truncate` class without `title=` for hover reveal \u2014 app/labs/templates/review/[id]/page.tsx:224", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/templates/review/[id]/page.tsx:224"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dafcddf88cb6374c", "name": "`truncate` class without `title=` for hover reveal \u2014 app/labs/templates/review/[id]/item/[itemId]/page.tsx:352", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/templates/review/[id]/item/[itemId]/page.tsx:352"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-58fb07f4a4b35968", "name": "`truncate` class without `title=` for hover reveal \u2014 app/labs/stations/log/page.tsx:442", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/stations/log/page.tsx:442"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7aafab6732869c68", "name": "`truncate` class without `title=` for hover reveal \u2014 app/labs/scenarios/page.tsx:631", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/scenarios/page.tsx:631"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-be752077097b18af", "name": "`truncate` class without `title=` for hover reveal \u2014 app/labs/skill-drills/page.tsx:1066", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/skill-drills/page.tsx:1066"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-055aea8fbddc7f5b", "name": "`truncate` class without `title=` for hover reveal \u2014 app/labs/skill-sheets/page.tsx:400", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/skill-sheets/page.tsx:400"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a05ec19f059944de", "name": "`truncate` class without `title=` for hover reveal \u2014 app/labs/schedule/page.tsx:1198", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/schedule/page.tsx:1198"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-184a796bea8f8684", "name": "`truncate` class without `title=` for hover reveal \u2014 app/labs/schedule/[id]/checkoff/page.tsx:359", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/schedule/[id]/checkoff/page.tsx:359"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9be0fca52aea988a", "name": "`truncate` class without `title=` for hover reveal \u2014 app/labs/schedule/[id]/assignments/page.tsx:369", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/schedule/[id]/assignments/page.tsx:369"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e0a9f533bead9270", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 app/labs/schedule/[id]/assignments/page.tsx:264", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/labs/schedule/[id]/assignments/page.tsx:264"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-49b9895c577b99d8", "name": "`truncate` class without `title=` for hover reveal \u2014 app/labs/schedule/[id]/coordinator/page.tsx:1513", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/schedule/[id]/coordinator/page.tsx:1513"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ef9ff308c3d99d5", "name": "`truncate` class without `title=` for hover reveal \u2014 app/labs/schedule/[id]/edit/page.tsx:1312", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/schedule/[id]/edit/page.tsx:1312"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-517331784291444b", "name": "`truncate` class without `title=` for hover reveal \u2014 app/labs/schedule/new/page.tsx:1692", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/schedule/new/page.tsx:1692"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f7761fd5c2cfeb7", "name": "`truncate` class without `title=` for hover reveal \u2014 app/labs/seating/charts/[id]/page.tsx:716", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/seating/charts/[id]/page.tsx:716"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1dc4e8f464e0aec5", "name": "`truncate` class without `title=` for hover reveal \u2014 app/lvfr-aemt/page.tsx:338", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/lvfr-aemt/page.tsx:338"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0340d27f704a618d", "name": "`truncate` class without `title=` for hover reveal \u2014 app/lvfr-aemt/files/page.tsx:363", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/lvfr-aemt/files/page.tsx:363"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d04afdd5e6c456e9", "name": "`truncate` class without `title=` for hover reveal \u2014 app/lvfr-aemt/grades/page.tsx:294", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/lvfr-aemt/grades/page.tsx:294"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7bea7f0e025030a7", "name": "`truncate` class without `title=` for hover reveal \u2014 app/lvfr-aemt/planner/page.tsx:482", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/lvfr-aemt/planner/page.tsx:482"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-27f41ddd164d066d", "name": "`truncate` class without `title=` for hover reveal \u2014 app/lvfr-aemt/scheduling/page.tsx:217", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/lvfr-aemt/scheduling/page.tsx:217"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f943f650fd72523f", "name": "`truncate` class without `title=` for hover reveal \u2014 app/lvfr-aemt/skills/page.tsx:605", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/lvfr-aemt/skills/page.tsx:605"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e4a2010a4ced8a0", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/page.tsx:626", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/page.tsx:626"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-21d1885ad60a977a", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/dashboard-defaults/page.tsx:397", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/dashboard-defaults/page.tsx:397"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6b66495213fbddd0", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/bulk-operations/page.tsx:851", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/bulk-operations/page.tsx:851"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c02b60ffb997ef26", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/equipment/page.tsx:579", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/equipment/page.tsx:579"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f5d5fe29025fc3a2", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/equipment/maintenance/page.tsx:661", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/equipment/maintenance/page.tsx:661"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc3ee75aae32ae1b", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/user-activity/page.tsx:112", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/user-activity/page.tsx:112"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-efa79a286b0c7a72", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/osce-events/page.tsx:505", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/osce-events/page.tsx:505"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b21630776cce5b31", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/access-requests/page.tsx:209", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/access-requests/page.tsx:209"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-595bf4ed360ab8d9", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/feedback/page.tsx:711", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/feedback/page.tsx:711"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f5a62005fe88147", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/alumni/page.tsx:1343", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/alumni/page.tsx:1343"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-51ebbb614c2665c1", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/scenarios/audit/page.tsx:1117", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/scenarios/audit/page.tsx:1117"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc9fc97756652d3a", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/scenarios/transform/page.tsx:404", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/scenarios/transform/page.tsx:404"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-041a6538a2a16c70", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/scenarios/bulk-import/page.tsx:912", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/scenarios/bulk-import/page.tsx:912"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e205b7b53ed97d9e", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/scenarios/cleanup/page.tsx:358", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/scenarios/cleanup/page.tsx:358"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-572f1ebb9ae736b6", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/volunteer-events/page.tsx:874", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/volunteer-events/page.tsx:874"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6607bfe115c479c0", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/broadcast/page.tsx:179", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/broadcast/page.tsx:179"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b962af3867ef8699", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/open-labs/page.tsx:472", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/open-labs/page.tsx:472"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1271344f0d992d21", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/webhooks/page.tsx:1027", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/webhooks/page.tsx:1027"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ab5991f49009a52f", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/poll/[id]/page.tsx:88", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/poll/[id]/page.tsx:88"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bf12c246cbdd3669", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/certifications/page.tsx:723", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/certifications/page.tsx:723"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-38f815766b8f52d2", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/semesters/page.tsx:443", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/semesters/page.tsx:443"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ce6355714eabae5b", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/lab-templates/page.tsx:836", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/lab-templates/page.tsx:836"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c25a3a5d0a063482", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/lab-templates/import/page.tsx:718", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/lab-templates/import/page.tsx:718"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-63ca43785cde033b", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/osce-tokens/page.tsx:202", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/osce-tokens/page.tsx:202"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c42298fe9610c58", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/compliance/page.tsx:385", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/compliance/page.tsx:385"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe1fdac26d3419e1", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/system-alerts/page.tsx:424", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/system-alerts/page.tsx:424"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fc8631be2fb9c114", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/announcements/page.tsx:595", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/announcements/page.tsx:595"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-18fb895057ed3cc9", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/email-templates/page.tsx:408", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/email-templates/page.tsx:408"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e66706180736736", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/system-health/page.tsx:628", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/system-health/page.tsx:628"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-56a6e018e2e41985", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/time-clock/page.tsx:499", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/time-clock/page.tsx:499"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-55ada01fd4379c6d", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/cases/generate/page.tsx:853", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/cases/generate/page.tsx:853"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd66e27c212790f3", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/calendar-sync/page.tsx:987", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/calendar-sync/page.tsx:987"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-75ad0bcd3c29b76b", "name": "`truncate` class without `title=` for hover reveal \u2014 app/admin/audit-log/page.tsx:140", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/audit-log/page.tsx:140"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9902cc8352ba86d7", "name": "`truncate` class without `title=` for hover reveal \u2014 app/feedback/my-submissions/page.tsx:295", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/feedback/my-submissions/page.tsx:295"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b8b7a32c4e812c53", "name": "`truncate` class without `title=` for hover reveal \u2014 app/reports/onboarding-status/page.tsx:290", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/reports/onboarding-status/page.tsx:290"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-82f19436c8101d5b", "name": "`truncate` class without `title=` for hover reveal \u2014 app/reports/scenario-usage/page.tsx:411", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/reports/scenario-usage/page.tsx:411"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-960704e82fef9850", "name": "`truncate` class without `title=` for hover reveal \u2014 app/reports/builder/page.tsx:1130", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/reports/builder/page.tsx:1130"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f95d0f94d4cf8eaf", "name": "`truncate` class without `title=` for hover reveal \u2014 app/reports/instructor-workload/page.tsx:431", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/reports/instructor-workload/page.tsx:431"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-def0e6a8d5d85c6e", "name": "`truncate` class without `title=` for hover reveal \u2014 app/reports/cohort-comparison/page.tsx:120", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/reports/cohort-comparison/page.tsx:120"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dba6fedcf976a95e", "name": "`truncate` class without `title=` for hover reveal \u2014 app/reports/program-outcomes/page.tsx:1029", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/reports/program-outcomes/page.tsx:1029"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-79b2d77f0568e175", "name": "`truncate` class without `title=` for hover reveal \u2014 app/reports/gradebook/page.tsx:697", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/reports/gradebook/page.tsx:697"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b0c74eff3a5a9f4a", "name": "`truncate` class without `title=` for hover reveal \u2014 app/resources/page.tsx:485", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/resources/page.tsx:485"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7bbcd7a242d9cc86", "name": "`truncate` class without `title=` for hover reveal \u2014 app/poll/[id]/page.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/poll/[id]/page.tsx:96"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-587975fb123c45cb", "name": "`truncate` class without `title=` for hover reveal \u2014 app/students/[id]/progress/page.tsx:956", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/students/[id]/progress/page.tsx:956"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c5c1acb237822728", "name": "`truncate` class without `title=` for hover reveal \u2014 app/skill-sheets/page.tsx:309", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/skill-sheets/page.tsx:309"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-854ddd4ffbb43ce6", "name": "`truncate` class without `title=` for hover reveal \u2014 app/skill-sheets/[id]/page.tsx:698", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/skill-sheets/[id]/page.tsx:698"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9032e52377441464", "name": "`truncate` class without `title=` for hover reveal \u2014 app/settings/page.tsx:377", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/settings/page.tsx:377"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b12da12522bb9ef3", "name": "`truncate` class without `title=` for hover reveal \u2014 app/settings/sessions/page.tsx:122", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/settings/sessions/page.tsx:122"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7e86865a3d55e8f4", "name": "`truncate` class without `title=` for hover reveal \u2014 app/instructor/email-history/page.tsx:279", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/instructor/email-history/page.tsx:279"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6f169d9ec844fd85", "name": "TODO/FIXME marker in shipping code \u2014 app/instructor/certifications/page.tsx:203", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 app/instructor/certifications/page.tsx:203"}, "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-b57a1e0721c58f6f", "name": "`truncate` class without `title=` for hover reveal \u2014 app/student/page.tsx:531", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/student/page.tsx:531"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ab503a241dc7f43c", "name": "`truncate` class without `title=` for hover reveal \u2014 app/student/labs/page.tsx:460", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/student/labs/page.tsx:460"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7d2fbe5d8bd8a157", "name": "`truncate` class without `title=` for hover reveal \u2014 app/student/my-progress/page.tsx:797", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/student/my-progress/page.tsx:797"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef59e8dd2ef33c44", "name": "`truncate` class without `title=` for hover reveal \u2014 app/student/skill-evaluations/[id]/page.tsx:181", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/student/skill-evaluations/[id]/page.tsx:181"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f98cf96b720a35ad", "name": "`truncate` class without `title=` for hover reveal \u2014 app/student/available-labs/page.tsx:737", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/student/available-labs/page.tsx:737"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1cbf8c4ba44eb24e", "name": "`truncate` class without `title=` for hover reveal \u2014 app/student/documents/page.tsx:675", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/student/documents/page.tsx:675"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-57d9a4ac90d34ee3", "name": "`truncate` class without `title=` for hover reveal \u2014 app/calendar/page.tsx:1604", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/calendar/page.tsx:1604"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-10d55527fa1b2bff", "name": "`truncate` class without `title=` for hover reveal \u2014 app/tasks/page.tsx:813", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/tasks/page.tsx:813"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-84a7dff52fbe93f8", "name": "`truncate` class without `title=` for hover reveal \u2014 app/tasks/[id]/page.tsx:309", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/tasks/[id]/page.tsx:309"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-169bba6a856764e5", "name": "Stray `console.log` in TS/JS \u2014 app/scheduling/page.tsx:1344", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 app/scheduling/page.tsx:1344"}, "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-76f649b24a147b86", "name": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/shifts/new/page.tsx:1048", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/shifts/new/page.tsx:1048"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9756d36a3584b9dd", "name": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/resource-bookings/page.tsx:615", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/resource-bookings/page.tsx:615"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e605927c245b33fb", "name": "\"active\" state uses light bg in a dark theme \u2014 app/scheduling/resource-bookings/page.tsx:904", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 app/scheduling/resource-bookings/page.tsx:904"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-73f03de9c7859964", "name": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/availability/page.tsx:688", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/availability/page.tsx:688"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2f9279feec6de79c", "name": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/availability/all/page.tsx:460", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/availability/all/page.tsx:460"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9c4287140ebf73e6", "name": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/team-availability/page.tsx:480", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/team-availability/page.tsx:480"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-162b4704d9bab10e", "name": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/planner/page.tsx:413", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/planner/page.tsx:413"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c414af4ad7a02060", "name": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/planner/workload/page.tsx:225", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/planner/workload/page.tsx:225"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-029cda023a032722", "name": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/planner/templates/page.tsx:389", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/planner/templates/page.tsx:389"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ca99bc680eba4265", "name": "`truncate` class without `title=` for hover reveal \u2014 app/skill-evaluations/[id]/page.tsx:212", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/skill-evaluations/[id]/page.tsx:212"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9acf8164edc1e554", "name": "`truncate` class without `title=` for hover reveal \u2014 app/academics/admin/smc/page.tsx:1392", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/admin/smc/page.tsx:1392"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3ed34ed12767ce8e", "name": "`truncate` class without `title=` for hover reveal \u2014 app/academics/planner/page.tsx:414", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/planner/page.tsx:414"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fe943ba207c0b913", "name": "`truncate` class without `title=` for hover reveal \u2014 app/academics/planner/workload/page.tsx:225", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/planner/workload/page.tsx:225"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-90b601d2717f38e8", "name": "`truncate` class without `title=` for hover reveal \u2014 app/academics/planner/templates/page.tsx:389", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/planner/templates/page.tsx:389"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-71fbaf6b44bfe3c4", "name": "`truncate` class without `title=` for hover reveal \u2014 app/academics/students/page.tsx:321", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/students/page.tsx:321"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6f713dbd9c1401bb", "name": "`truncate` class without `title=` for hover reveal \u2014 app/academics/students/[id]/page.tsx:1978", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/students/[id]/page.tsx:1978"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-24e77ed9eb7800e1", "name": "`truncate` class without `title=` for hover reveal \u2014 app/academics/students/[id]/portfolio/page.tsx:580", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/students/[id]/portfolio/page.tsx:580"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-95b89451ecdaf2f0", "name": "`truncate` class without `title=` for hover reveal \u2014 app/academics/students/import/page.tsx:321", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/students/import/page.tsx:321"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f67fabec1a3f3a0b", "name": "`truncate` class without `title=` for hover reveal \u2014 app/academics/skill-sheets/page.tsx:310", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/skill-sheets/page.tsx:310"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c06899224dfe038b", "name": "`truncate` class without `title=` for hover reveal \u2014 app/academics/skill-sheets/[id]/page.tsx:698", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/skill-sheets/[id]/page.tsx:698"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-14b347a043811753", "name": "`truncate` class without `title=` for hover reveal \u2014 app/academics/cohorts/[id]/page.tsx:187", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/cohorts/[id]/page.tsx:187"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-36c4996ef882c83e", "name": "`truncate` class without `title=` for hover reveal \u2014 app/academics/cohorts/[id]/groups/page.tsx:756", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/cohorts/[id]/groups/page.tsx:756"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9596c6bf4f059257", "name": "`truncate` class without `title=` for hover reveal \u2014 app/academics/cohorts/[id]/intake/page.tsx:218", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/cohorts/[id]/intake/page.tsx:218"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-11cd035710fb0487", "name": "`truncate` class without `title=` for hover reveal \u2014 app/academics/cohorts/[id]/smc/page.tsx:337", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/cohorts/[id]/smc/page.tsx:337"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-96b9df1e93b52559", "name": "`truncate` class without `title=` for hover reveal \u2014 app/academics/cohorts/[id]/semester-review/page.tsx:251", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/cohorts/[id]/semester-review/page.tsx:251"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3e3ad4c9e7e122bc", "name": "`truncate` class without `title=` for hover reveal \u2014 app/academics/cohorts/[id]/calendar/page.tsx:197", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/cohorts/[id]/calendar/page.tsx:197"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0fb70e0338ee9263", "name": "`truncate` class without `title=` for hover reveal \u2014 app/cases/session/[code]/instructor/page.tsx:464", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/cases/session/[code]/instructor/page.tsx:464"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a1f9017db35692b6", "name": "`truncate` class without `title=` for hover reveal \u2014 app/cases/session/[code]/student/page.tsx:628", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/cases/session/[code]/student/page.tsx:628"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a77f31ca152db2d7", "name": "`truncate` class without `title=` for hover reveal \u2014 app/cases/session/[code]/tv/page.tsx:724", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/cases/session/[code]/tv/page.tsx:724"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-95530259299fa961", "name": "`truncate` class without `title=` for hover reveal \u2014 app/cases/session/[code]/join/page.tsx:213", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/cases/session/[code]/join/page.tsx:213"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0bbb76ed8679f487", "name": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/page.tsx:490", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/page.tsx:490"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-04d0115f793395cb", "name": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/internships/page.tsx:354", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/internships/page.tsx:354"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bb36031805f96a88", "name": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/internships/[id]/page.tsx:1288", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/internships/[id]/page.tsx:1288"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0b158768d6fe0bdb", "name": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/internships/cohort/[id]/page.tsx:520", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/internships/cohort/[id]/page.tsx:520"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6b89cf340e82cf90", "name": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/ride-alongs/availability/page.tsx:313", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/ride-alongs/availability/page.tsx:313"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b3989683f4ad4b3f", "name": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/ride-alongs/import/page.tsx:362", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/ride-alongs/import/page.tsx:362"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-75782f53152a59eb", "name": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/agencies/page.tsx:460", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/agencies/page.tsx:460"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a98891de9c4fc26e", "name": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/rotation-scheduler/page.tsx:828", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/rotation-scheduler/page.tsx:828"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-44ce5bb53cb8c219", "name": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/site-visit-settings/page.tsx:301", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/site-visit-settings/page.tsx:301"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4992ed402abc2c93", "name": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/preceptors/page.tsx:587", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/preceptors/page.tsx:587"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-86d2b543288ba7cc", "name": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/summative-evaluations/page.tsx:553", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/summative-evaluations/page.tsx:553"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-95fd6346fd9094b6", "name": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/compliance-tracker/page.tsx:519", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/compliance-tracker/page.tsx:519"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-429c182325dfb3d9", "name": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/mce/page.tsx:713", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/mce/page.tsx:713"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6cf99588d841b946", "name": "Stray `console.log` in TS/JS \u2014 scripts/find-duplicate-skills.js:40", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-duplicate-skills.js:40"}, "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-a3fb219bf4033830", "name": "Stray `console.log` in TS/JS \u2014 scripts/import-ride-alongs.js:302", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-ride-alongs.js:302"}, "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-ab327d5d7200ec9e", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-cleanup-state.js:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-cleanup-state.js:24"}, "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-073feff008346858", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-nremt-skill-sheets.js:420", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-nremt-skill-sheets.js:420"}, "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-d5280336c3da85a6", "name": "Stray `console.log` in TS/JS \u2014 scripts/reset-pm-g14-s2-lab-stations.js:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reset-pm-g14-s2-lab-stations.js:62"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7b60e99e776ddd9b", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-station-constraints.js:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-station-constraints.js:34"}, "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-b5c3e4a1b7cf3919", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-station-fks.js:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-station-fks.js:33"}, "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-bad2f22e27fcb1ba", "name": "Stray `console.log` in TS/JS \u2014 scripts/reseed-lvfr-schedule.js:520", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reseed-lvfr-schedule.js:520"}, "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-6671195cbed9e2d4", "name": "Stray `console.log` in TS/JS \u2014 scripts/dump-schema.js:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/dump-schema.js:66"}, "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-56000e3ab59d419f", "name": "Stray `console.log` in TS/JS \u2014 scripts/extract-scenario-demographics.js:86", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-scenario-demographics.js:86"}, "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-128e1295c96642d5", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-smc-requirements.js:95", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-smc-requirements.js:95"}, "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-98c0d02c1d46f014", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-lab-label.js:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-lab-label.js:28"}, "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-27a7a86669ba3471", "name": "Stray `console.log` in TS/JS \u2014 scripts/audit-lab-day-dow-mismatch.js:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-lab-day-dow-mismatch.js:68"}, "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-e57d3cfe1fbe6985", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-semester-planner.js:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-semester-planner.js:43"}, "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-e37650c8129af732", "name": "Stray `console.log` in TS/JS \u2014 scripts/verify-lvfr-aemt-runsheets.js:20", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-lvfr-aemt-runsheets.js:20"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-010850ddaae5e6c8", "name": "Stray `console.log` in TS/JS \u2014 scripts/bulk-assign-coordinator-dryrun.js:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/bulk-assign-coordinator-dryrun.js:37"}, "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-9067d8a2a9b8a598", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-osce-scenarios.js:279", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-osce-scenarios.js:279"}, "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-7493fd8da8932f8d", "name": "Stray `console.log` in TS/JS \u2014 scripts/unwrap-scenario-critical-actions.js:60", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/unwrap-scenario-critical-actions.js:60"}, "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-a5f67b2948a22d9e", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-lab-day-role-calendar.js:95", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-lab-day-role-calendar.js:95"}, "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-460387bb035ca15a", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-lab-day-role-sync.js:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-lab-day-role-sync.js:21"}, "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-bb1f9e9dbb2f023e", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-lab-blocks-and-emt-g5-labs.js:100", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-lab-blocks-and-emt-g5-labs.js:100"}, "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-b4651bd83ebe1a96", "name": "Stray `console.log` in TS/JS \u2014 scripts/smc-dedup-audit.js:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/smc-dedup-audit.js:50"}, "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-0b6b033838226a64", "name": "Stray `console.log` in TS/JS \u2014 scripts/reseed-group14-s1.js:31", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reseed-group14-s1.js:31"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6d5c8814186e9c1a", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-lvfr-aemt-state.js:35", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-lvfr-aemt-state.js:35"}, "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-bf42995e64f99a29", "name": "Stray `console.log` in TS/JS \u2014 scripts/identify-extra-blocks.js:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/identify-extra-blocks.js:87"}, "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-639246563ca2b42a", "name": "Stray `console.log` in TS/JS \u2014 scripts/backfill-station-instructor-user-ids.js:46", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-station-instructor-user-ids.js:46"}, "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-4a10e6e9d490470c", "name": "Stray `console.log` in TS/JS \u2014 scripts/compare-emt-s1-templates.js:90", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/compare-emt-s1-templates.js:90"}, "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-89dfcfbead83ae95", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-feedback-tables.js:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-feedback-tables.js:37"}, "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-f71321a318904e90", "name": "Stray `console.log` in TS/JS \u2014 scripts/reimport-paramedic-s2-v4-and-propagate.js:100", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reimport-paramedic-s2-v4-and-propagate.js:100"}, "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-9c5bc429c2592b9e", "name": "Stray `console.log` in TS/JS \u2014 scripts/reimport-paramedic-s2-labs.js:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reimport-paramedic-s2-labs.js:54"}, "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-8f4f62061a088e4b", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-group14-s1.js:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-group14-s1.js:36"}, "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-842c9a30211633b7", "name": "Stray `console.log` in TS/JS \u2014 scripts/bulk-update-feedback-status.js:75", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/bulk-update-feedback-status.js:75"}, "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-11f93e008229d70d", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-course-planner.js:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-course-planner.js:76"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1af2bd9d8ea5834e", "name": "Stray `console.log` in TS/JS \u2014 scripts/resolve-feedback-batch.js:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/resolve-feedback-batch.js:50"}, "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-b7b58f14e65c3b49", "name": "Stray `console.log` in TS/JS \u2014 scripts/phase2-dedup.js:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/phase2-dedup.js:49"}, "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-d2636815ed7247b6", "name": "Stray `console.log` in TS/JS \u2014 scripts/cleanup_dry_run.js:38", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup_dry_run.js:38"}, "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-affd4aa18ca908a1", "name": "Stray `console.log` in TS/JS \u2014 scripts/resolve_feedback.js:34", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/resolve_feedback.js:34"}, "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-72057c575650e04b", "name": "Stray `console.log` in TS/JS \u2014 scripts/populate-lvfr-aemt-runsheets.js:214", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/populate-lvfr-aemt-runsheets.js:214"}, "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-bb04cd16fa43108f", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-availability-direct.js:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-availability-direct.js:52"}, "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-765ac19e51c4e883", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect_trigger.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect_trigger.js:16"}, "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-76a3f820c8999720", "name": "Stray `console.log` in TS/JS \u2014 scripts/delete-pm-g15-memorial-day.js:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/delete-pm-g15-memorial-day.js:54"}, "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-ba36cfc3a384bd6f", "name": "Stray `console.log` in TS/JS \u2014 scripts/run-scenario-transform.js:254", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run-scenario-transform.js:254"}, "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-d64e30c3b4d3fd1a", "name": "Stray `console.log` in TS/JS \u2014 scripts/run-migration.js:78", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run-migration.js:78"}, "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-f31dd3f351430a08", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-emt-g5-labs.js:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-emt-g5-labs.js:28"}, "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-a0ef4f1a8e3aa0ac", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-lvfr.js:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-lvfr.js:71"}, "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-2585e1a513a62c89", "name": "Stray `console.log` in TS/JS \u2014 scripts/extract-scenario-demographics-regex.js:179", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-scenario-demographics-regex.js:179"}, "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-b5bd23e9c9fd62f6", "name": "Stray `console.log` in TS/JS \u2014 scripts/debug-josh-sync.js:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-josh-sync.js:44"}, "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-bc84abc3e606ba81", "name": "Stray `console.log` in TS/JS \u2014 scripts/reseed-osce-adf.js:269", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reseed-osce-adf.js:269"}, "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-8a354a1fe4fed6dc", "name": "Stray `console.log` in TS/JS \u2014 scripts/fix-pm-g14-g15-missing-blocks.js:165", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-pm-g14-g15-missing-blocks.js:165"}, "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-c29e58a50572f5f5", "name": "Stray `console.log` in TS/JS \u2014 scripts/check-fk-ambiguity.js:392", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-fk-ambiguity.js:392"}, "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-7f8470371e015671", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-pm-smc.js:133", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-pm-smc.js:133"}, "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-a2beed858d8af5dd", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-pm-g14-s2-issues.js:49", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-pm-g14-s2-issues.js:49"}, "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-b3599e8b93c43f16", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-emt-aemt-smc.js:193", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-emt-aemt-smc.js:193"}, "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-ea6064d17b0d2749", "name": "Stray `console.log` in TS/JS \u2014 scripts/inspect-jlomonaco-account.js:24", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-jlomonaco-account.js:24"}, "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-4d9941ac59f6cf3c", "name": "`truncate` class without `title=` for hover reveal \u2014 components/LabCalendarPanel.tsx:307", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/LabCalendarPanel.tsx:307"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4c57d587608d84ad", "name": "`truncate` class without `title=` for hover reveal \u2014 components/ScenarioVersionHistory.tsx:437", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/ScenarioVersionHistory.tsx:437"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68015cfd2fbc40a0", "name": "`truncate` class without `title=` for hover reveal \u2014 components/NotificationBell.tsx:564", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/NotificationBell.tsx:564"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a31e44e97f58c75d", "name": "`truncate` class without `title=` for hover reveal \u2014 components/ChecklistAttendance.tsx:265", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/ChecklistAttendance.tsx:265"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-251aee7540227333", "name": "Stray `console.log` in TS/JS \u2014 components/LabTimer.tsx:319", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 components/LabTimer.tsx:319"}, "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-a1a51491afb6c1e3", "name": "`truncate` class without `title=` for hover reveal \u2014 components/BulkPhotoUpload.tsx:316", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/BulkPhotoUpload.tsx:316"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-469bcffc2951bf1f", "name": "`truncate` class without `title=` for hover reveal \u2014 components/CommandPalette.tsx:888", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/CommandPalette.tsx:888"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bef74c4bc2ee4610", "name": "`truncate` class without `title=` for hover reveal \u2014 components/AttendanceSection.tsx:468", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/AttendanceSection.tsx:468"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d87e9e94e05b581f", "name": "`truncate` class without `title=` for hover reveal \u2014 components/StudentPicker.tsx:108", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/StudentPicker.tsx:108"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7e21e843d87838c3", "name": "`truncate` class without `title=` for hover reveal \u2014 components/NremtTimer.tsx:345", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/NremtTimer.tsx:345"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e0f68efe4881efb", "name": "`truncate` class without `title=` for hover reveal \u2014 components/UserMenu.tsx:161", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/UserMenu.tsx:161"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2375204f4cc87a11", "name": "`truncate` class without `title=` for hover reveal \u2014 components/GlobalTimerBanner.tsx:248", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/GlobalTimerBanner.tsx:248"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-143ac7a62bc353a5", "name": "`truncate` class without `title=` for hover reveal \u2014 components/TemplateDiffModal.tsx:227", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/TemplateDiffModal.tsx:227"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bd9f3fb05b96832c", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 components/QRCodeDisplay.tsx:101", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/QRCodeDisplay.tsx:101"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7e5ce7f2cf38b8ac", "name": "`truncate` class without `title=` for hover reveal \u2014 components/SkillSheetPanel.tsx:1622", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/SkillSheetPanel.tsx:1622"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2ff583f9b5b30a10", "name": "`truncate` class without `title=` for hover reveal \u2014 components/FeedbackButton.tsx:361", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/FeedbackButton.tsx:361"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7dae0d4c94a0d41e", "name": "`truncate` class without `title=` for hover reveal \u2014 components/LearningStyleDistribution.tsx:256", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/LearningStyleDistribution.tsx:256"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cb2055a321508c77", "name": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/DraggableWidgetGrid.tsx:157", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/DraggableWidgetGrid.tsx:157"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c81735dd33e14525", "name": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/AtRiskStudentsWidget.tsx:110", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/AtRiskStudentsWidget.tsx:110"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5ee204cd7ae990e4", "name": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/ProgramSnapshotWidget.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/ProgramSnapshotWidget.tsx:96"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-753ae9645f122d88", "name": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/MyTasksWidget.tsx:200", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/MyTasksWidget.tsx:200"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-70fcfec7e78328fc", "name": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/MyLabsWidget.tsx:135", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/MyLabsWidget.tsx:135"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-015baea94d603290", "name": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/OverdueTasksWidget.tsx:102", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/OverdueTasksWidget.tsx:102"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1b844995fc92dd46", "name": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/RecentFeedbackWidget.tsx:77", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/RecentFeedbackWidget.tsx:77"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dbd89bd5ad7c0bdf", "name": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/OpenStationsWidget.tsx:136", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/OpenStationsWidget.tsx:136"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e843d12b9065c8ba", "name": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/CertExpiryWidget.tsx:120", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/CertExpiryWidget.tsx:120"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bf66157fb2c221e7", "name": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/RecentActivityWidget.tsx:192", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/RecentActivityWidget.tsx:192"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d6b12b123e545d0", "name": "`truncate` class without `title=` for hover reveal \u2014 components/lvfr/WeekStripView.tsx:474", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/lvfr/WeekStripView.tsx:474"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-df4b0f61346c65ee", "name": "`truncate` class without `title=` for hover reveal \u2014 components/grading/ScenarioReferencePanel.tsx:323", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/grading/ScenarioReferencePanel.tsx:323"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a02f586834ec22b1", "name": "`truncate` class without `title=` for hover reveal \u2014 components/calendar/EventDetailPanel.tsx:231", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/calendar/EventDetailPanel.tsx:231"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0605921ef83357b7", "name": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/EditStationModal.tsx:825", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/EditStationModal.tsx:825"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ae7e40096b1ed44c", "name": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/LabDaySkillSignoffs.tsx:208", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/LabDaySkillSignoffs.tsx:208"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3f5a437f3a371c17", "name": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/SkillCoveragePanel.tsx:538", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/SkillCoveragePanel.tsx:538"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ad3e0cac6ce5c3d7", "name": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/StudentRatingsSection.tsx:148", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/StudentRatingsSection.tsx:148"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3c259b9810c90430", "name": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/StationCards.tsx:265", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/StationCards.tsx:265"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-713358d2bd001f04", "name": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/ScenarioPickerModal.tsx:154", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/ScenarioPickerModal.tsx:154"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-63463c28b2265a9c", "name": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/CostsSection.tsx:216", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/CostsSection.tsx:216"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a4d33a51b96519fc", "name": "Stray `console.log` in TS/JS \u2014 components/lab-day/LabDayChatInner.tsx:291", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 components/lab-day/LabDayChatInner.tsx:291"}, "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-6f4d32aab4a80be3", "name": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/LabDayCheckInSection.tsx:70", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/LabDayCheckInSection.tsx:70"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c9892b377e39eec5", "name": "`truncate` class without `title=` for hover reveal \u2014 components/scheduling/CoordinatorCalendarView.tsx:779", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/scheduling/CoordinatorCalendarView.tsx:779"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-248af46106c5f326", "name": "`truncate` class without `title=` for hover reveal \u2014 components/scheduling/GenerateLabShiftsModal.tsx:321", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/scheduling/GenerateLabShiftsModal.tsx:321"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-03fe76c7e9636a3e", "name": "`truncate` class without `title=` for hover reveal \u2014 components/seating/Suite1Layout.tsx:296", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/seating/Suite1Layout.tsx:296"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-02128db8544456d4", "name": "`truncate` class without `title=` for hover reveal \u2014 components/clinical/PreceptorsSection.tsx:357", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/clinical/PreceptorsSection.tsx:357"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-288de3d9497bcc11", "name": "`truncate` class without `title=` for hover reveal \u2014 components/clinical/CollapsibleCard.tsx:105", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/clinical/CollapsibleCard.tsx:105"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bdfc9f8d31b47003", "name": "`truncate` class without `title=` for hover reveal \u2014 components/clinical/PreceptorEvalModal.tsx:162", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/clinical/PreceptorEvalModal.tsx:162"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3448793e9b78f516", "name": "`truncate` class without `title=` for hover reveal \u2014 components/clinical/CloseoutSection.tsx:1424", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/clinical/CloseoutSection.tsx:1424"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0fbefb4e88c4540a", "name": "`truncate` class without `title=` for hover reveal \u2014 components/scheduler/SchedulerAdmin.tsx:457", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/scheduler/SchedulerAdmin.tsx:457"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0dee82b036778a97", "name": "Insecure pattern 'node_child_process' in app/api/admin/compliance/route.ts:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in app/api/admin/compliance/route.ts:4"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ac3c41198be87292", "name": "Insecure pattern 'direct_innerhtml_assignment' in app/labs/groups/page.tsx:1038", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in app/labs/groups/page.tsx:1038"}, "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-7118cb2584078a58", "name": "Insecure pattern 'dangerous_innerhtml' in app/labs/schedule/[id]/assignments/page.tsx:264", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in app/labs/schedule/[id]/assignments/page.tsx:264"}, "fullDescription": {"text": "Found a known-risky pattern (dangerous_innerhtml). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9973576610ce17bb", "name": "Insecure pattern 'local_storage_auth_token' in app/osce-scoring/enter/page.tsx:46", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in app/osce-scoring/enter/page.tsx:46"}, "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-9c639b263ddace55", "name": "Insecure pattern 'document_write' in app/osce-scoring/[assessmentId]/page.tsx:558", "shortDescription": {"text": "Insecure pattern 'document_write' in app/osce-scoring/[assessmentId]/page.tsx:558"}, "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-dffa8cd94b8f224d", "name": "Insecure pattern 'local_storage_auth_token' in app/settings/sessions/page.tsx:204", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in app/settings/sessions/page.tsx:204"}, "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-bee54415a44ebd27", "name": "Insecure pattern 'local_storage_auth_token' in app/guest/page.tsx:98", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in app/guest/page.tsx:98"}, "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-86646c32852d0f7d", "name": "Insecure pattern 'node_child_process' in scripts/lvfr-rebuild/parse-sources.mjs:14", "shortDescription": {"text": "Insecure pattern 'node_child_process' in scripts/lvfr-rebuild/parse-sources.mjs:14"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-392f76f09d6df2af", "name": "Insecure pattern 'weak_hash' in components/TwoFactorPanel.tsx:127", "shortDescription": {"text": "Insecure pattern 'weak_hash' in components/TwoFactorPanel.tsx:127"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-20c53a03519e8ec4", "name": "Insecure pattern 'direct_innerhtml_assignment' in components/SessionTimeoutWatcher.tsx:56", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in components/SessionTimeoutWatcher.tsx:56"}, "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-7fb2b35c8852600c", "name": "Insecure pattern 'document_write' in components/clinical/EmploymentVerificationModal.tsx:210", "shortDescription": {"text": "Insecure pattern 'document_write' in components/clinical/EmploymentVerificationModal.tsx:210"}, "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-9ceff0c99f5cb927", "name": "Insecure pattern 'document_write' in components/clinical/CloseoutSection.tsx:729", "shortDescription": {"text": "Insecure pattern 'document_write' in components/clinical/CloseoutSection.tsx:729"}, "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-981a09033f4a3628", "name": "Insecure pattern 'document_write' in lib/print-utils.ts:10", "shortDescription": {"text": "Insecure pattern 'document_write' in lib/print-utils.ts:10"}, "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-f2fac476ff39276b", "name": "Insecure pattern 'document_write' in lib/export-utils.ts:123", "shortDescription": {"text": "Insecure pattern 'document_write' in lib/export-utils.ts:123"}, "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-dad73eada4acdb26", "name": "Insecure pattern 'direct_innerhtml_assignment' in lib/export-utils.ts:82", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in lib/export-utils.ts:82"}, "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-21a9286666d621dd", "name": "Very large file: app/page.tsx (1236 lines)", "shortDescription": {"text": "Very large file: app/page.tsx (1236 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-4f7d61360bcb5060", "name": "Very large file: app/api/lvfr-aemt/planner/reseed/route.ts (801 lines)", "shortDescription": {"text": "Very large file: app/api/lvfr-aemt/planner/reseed/route.ts (801 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-e22d5a952dcbec24", "name": "Very large file: app/labs/grade/station/[id]/page.tsx (1813 lines)", "shortDescription": {"text": "Very large file: app/labs/grade/station/[id]/page.tsx (1813 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-839ef00296b36117", "name": "Very large file: app/labs/groups/page.tsx (1224 lines)", "shortDescription": {"text": "Very large file: app/labs/groups/page.tsx (1224 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-fbe775cb872a3a08", "name": "Very large file: app/labs/templates/weekly/page.tsx (1054 lines)", "shortDescription": {"text": "Very large file: app/labs/templates/weekly/page.tsx (1054 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-e5891ec91d9130e9", "name": "Very large file: app/labs/scenarios/[id]/page.tsx (3288 lines)", "shortDescription": {"text": "Very large file: app/labs/scenarios/[id]/page.tsx (3288 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-b2aa406b1b5ce79c", "name": "Very large file: app/labs/scenarios/new/page.tsx (2122 lines)", "shortDescription": {"text": "Very large file: app/labs/scenarios/new/page.tsx (2122 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-4e78cff1c254dabd", "name": "Very large file: app/labs/skill-drills/page.tsx (1310 lines)", "shortDescription": {"text": "Very large file: app/labs/skill-drills/page.tsx (1310 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-1bd2d91cb1b19f88", "name": "Very large file: app/labs/schedule/page.tsx (2217 lines)", "shortDescription": {"text": "Very large file: app/labs/schedule/page.tsx (2217 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-47e08977bd83b38f", "name": "Very large file: app/labs/schedule/[id]/page.tsx (1046 lines)", "shortDescription": {"text": "Very large file: app/labs/schedule/[id]/page.tsx (1046 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-36f745b277441124", "name": "Very large file: app/labs/schedule/[id]/stations/new/page.tsx (1611 lines)", "shortDescription": {"text": "Very large file: app/labs/schedule/[id]/stations/new/page.tsx (1611 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-0353130f3d94a47c", "name": "Very large file: app/labs/schedule/[id]/coordinator/page.tsx (2934 lines)", "shortDescription": {"text": "Very large file: app/labs/schedule/[id]/coordinator/page.tsx (2934 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-b918ff42469f2abb", "name": "Very large file: app/labs/schedule/[id]/edit/page.tsx (1431 lines)", "shortDescription": {"text": "Very large file: app/labs/schedule/[id]/edit/page.tsx (1431 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-36403411e752159d", "name": "Very large file: app/labs/schedule/[id]/results/page.tsx (1226 lines)", "shortDescription": {"text": "Very large file: app/labs/schedule/[id]/results/page.tsx (1226 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-d4b84cc6f885ab40", "name": "Very large file: app/labs/schedule/new/page.tsx (3052 lines)", "shortDescription": {"text": "Very large file: app/labs/schedule/new/page.tsx (3052 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-0050d9737e5a315a", "name": "Very large file: app/lvfr-aemt/planner/page.tsx (1844 lines)", "shortDescription": {"text": "Very large file: app/lvfr-aemt/planner/page.tsx (1844 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-14dedb35e88bc0e8", "name": "Very large file: app/lvfr-aemt/calendar/page.tsx (1095 lines)", "shortDescription": {"text": "Very large file: app/lvfr-aemt/calendar/page.tsx (1095 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-c600d38676c81895", "name": "Very large file: app/admin/equipment/maintenance/page.tsx (1281 lines)", "shortDescription": {"text": "Very large file: app/admin/equipment/maintenance/page.tsx (1281 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-3e150f6484947059", "name": "Very large file: app/admin/osce-events/[id]/page.tsx (1936 lines)", "shortDescription": {"text": "Very large file: app/admin/osce-events/[id]/page.tsx (1936 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-d40e6fe000a0a960", "name": "Very large file: app/admin/alumni/page.tsx (1531 lines)", "shortDescription": {"text": "Very large file: app/admin/alumni/page.tsx (1531 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-0bfddfadbff59bd5", "name": "Very large file: app/admin/scenarios/audit/page.tsx (1837 lines)", "shortDescription": {"text": "Very large file: app/admin/scenarios/audit/page.tsx (1837 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-f0308df3b7e86765", "name": "Very large file: app/admin/scenarios/bulk-import/page.tsx (1172 lines)", "shortDescription": {"text": "Very large file: app/admin/scenarios/bulk-import/page.tsx (1172 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-cfa36f75ed962df0", "name": "Very large file: app/admin/volunteer-events/page.tsx (1718 lines)", "shortDescription": {"text": "Very large file: app/admin/volunteer-events/page.tsx (1718 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-72bd5ecda4cc039f", "name": "Very large file: app/admin/lab-templates/page.tsx (1344 lines)", "shortDescription": {"text": "Very large file: app/admin/lab-templates/page.tsx (1344 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-1a478fab5d517ff9", "name": "Very large file: app/admin/qa-checklist/page.tsx (940 lines)", "shortDescription": {"text": "Very large file: app/admin/qa-checklist/page.tsx (940 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-edc86b129d5b5a36", "name": "Very large file: app/admin/email-templates/page.tsx (1425 lines)", "shortDescription": {"text": "Very large file: app/admin/email-templates/page.tsx (1425 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-016d85a26c0ba1b4", "name": "Very large file: app/admin/cases/generate/page.tsx (1254 lines)", "shortDescription": {"text": "Very large file: app/admin/cases/generate/page.tsx (1254 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-b81686813c4cbfa7", "name": "Very large file: app/resources/medications/page.tsx (1176 lines)", "shortDescription": {"text": "Very large file: app/resources/medications/page.tsx (1176 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-717e05bf3e5cd10f", "name": "Very large file: app/students/[id]/progress/page.tsx (1267 lines)", "shortDescription": {"text": "Very large file: app/students/[id]/progress/page.tsx (1267 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-a3187d7b21b6fa6c", "name": "Very large file: app/skill-sheets/[id]/page.tsx (1349 lines)", "shortDescription": {"text": "Very large file: app/skill-sheets/[id]/page.tsx (1349 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-b40f0f9c40817734", "name": "Very large file: app/settings/page.tsx (2200 lines)", "shortDescription": {"text": "Very large file: app/settings/page.tsx (2200 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-6c246c67e01f4431", "name": "Very large file: app/onboarding/page.tsx (1210 lines)", "shortDescription": {"text": "Very large file: app/onboarding/page.tsx (1210 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-1e222b9cb1f0d7a4", "name": "Very large file: app/calendar/page.tsx (1974 lines)", "shortDescription": {"text": "Very large file: app/calendar/page.tsx (1974 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-a331c436ab544dfe", "name": "Very large file: app/tasks/page.tsx (1286 lines)", "shortDescription": {"text": "Very large file: app/tasks/page.tsx (1286 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-bb6baf615e4be5ae", "name": "Very large file: app/scheduling/page.tsx (1385 lines)", "shortDescription": {"text": "Very large file: app/scheduling/page.tsx (1385 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-d04e28ebed7afb0a", "name": "Very large file: app/scheduling/shifts/page.tsx (1944 lines)", "shortDescription": {"text": "Very large file: app/scheduling/shifts/page.tsx (1944 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-55b4dbf2cd471283", "name": "Very large file: app/scheduling/resource-bookings/page.tsx (1181 lines)", "shortDescription": {"text": "Very large file: app/scheduling/resource-bookings/page.tsx (1181 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-11575c1555c086b2", "name": "Very large file: app/scheduling/availability/all/page.tsx (1852 lines)", "shortDescription": {"text": "Very large file: app/scheduling/availability/all/page.tsx (1852 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-b652e4333fd35ca5", "name": "Very large file: app/scheduling/planner/page.tsx (3349 lines)", "shortDescription": {"text": "Very large file: app/scheduling/planner/page.tsx (3349 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-d68c5ec0c45cf537", "name": "Very large file: app/notifications/page.tsx (1309 lines)", "shortDescription": {"text": "Very large file: app/notifications/page.tsx (1309 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-6a5b3119e6b71a0b", "name": "Very large file: app/help/page.tsx (1389 lines)", "shortDescription": {"text": "Very large file: app/help/page.tsx (1389 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-9e1b27badd336140", "name": "Very large file: app/academics/admin/smc/page.tsx (1465 lines)", "shortDescription": {"text": "Very large file: app/academics/admin/smc/page.tsx (1465 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-434599d345f42c46", "name": "Very large file: app/academics/planner/page.tsx (3589 lines)", "shortDescription": {"text": "Very large file: app/academics/planner/page.tsx (3589 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-f46d35c70e35038c", "name": "Very large file: app/academics/students/[id]/page.tsx (2612 lines)", "shortDescription": {"text": "Very large file: app/academics/students/[id]/page.tsx (2612 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-c574674c5b40ab2e", "name": "Very large file: app/academics/students/import/page.tsx (1137 lines)", "shortDescription": {"text": "Very large file: app/academics/students/import/page.tsx (1137 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-494a53f85157558b", "name": "Very large file: app/academics/skill-sheets/[id]/page.tsx (1349 lines)", "shortDescription": {"text": "Very large file: app/academics/skill-sheets/[id]/page.tsx (1349 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-512c4d262afb83e2", "name": "Very large file: app/academics/cohorts/[id]/page.tsx (2206 lines)", "shortDescription": {"text": "Very large file: app/academics/cohorts/[id]/page.tsx (2206 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-ee3d30cf7faa079c", "name": "Very large file: app/cases/[id]/practice/page.tsx (1658 lines)", "shortDescription": {"text": "Very large file: app/cases/[id]/practice/page.tsx (1658 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-dec7ae805245dbb9", "name": "Very large file: app/cases/session/[code]/student/page.tsx (1400 lines)", "shortDescription": {"text": "Very large file: app/cases/session/[code]/student/page.tsx (1400 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-27e04e4b49fd5fec", "name": "Very large file: app/clinical/internships/[id]/page.tsx (3023 lines)", "shortDescription": {"text": "Very large file: app/clinical/internships/[id]/page.tsx (3023 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-bd1aa370d0eaf50d", "name": "Very large file: app/clinical/internships/all/page.tsx (1867 lines)", "shortDescription": {"text": "Very large file: app/clinical/internships/all/page.tsx (1867 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-acb9d555d6409096", "name": "Very large file: app/clinical/rotation-scheduler/page.tsx (1200 lines)", "shortDescription": {"text": "Very large file: app/clinical/rotation-scheduler/page.tsx (1200 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-1588d849d8d270a8", "name": "Very large file: app/clinical/hours/page.tsx (1833 lines)", "shortDescription": {"text": "Very large file: app/clinical/hours/page.tsx (1833 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-7a92540b299e4b7a", "name": "Very large file: components/LabTimer.tsx (1501 lines)", "shortDescription": {"text": "Very large file: components/LabTimer.tsx (1501 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-b3073f9b6fca6a8f", "name": "Very large file: components/SkillSheetPanel.tsx (3625 lines)", "shortDescription": {"text": "Very large file: components/SkillSheetPanel.tsx (3625 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-cbf4c87ce66b6a16", "name": "Very large file: components/lab-day/EditStationModal.tsx (1421 lines)", "shortDescription": {"text": "Very large file: components/lab-day/EditStationModal.tsx (1421 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-60942eae7685422f", "name": "Very large file: components/scheduling/CoordinatorCalendarView.tsx (1149 lines)", "shortDescription": {"text": "Very large file: components/scheduling/CoordinatorCalendarView.tsx (1149 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-35d4a3ae75f34934", "name": "Very large file: components/cases/CaseEditor.tsx (1384 lines)", "shortDescription": {"text": "Very large file: components/cases/CaseEditor.tsx (1384 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-cbe000dc1328b64c", "name": "Very large file: components/clinical/CloseoutSection.tsx (1621 lines)", "shortDescription": {"text": "Very large file: components/clinical/CloseoutSection.tsx (1621 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-885fc6f2bf0053c6", "name": "Very large file: components/scheduler/SchedulerAdmin.tsx (1147 lines)", "shortDescription": {"text": "Very large file: components/scheduler/SchedulerAdmin.tsx (1147 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": "4 test file(s) for 1247 source file(s) (ratio 0.00). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 946 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 946 placeholder/mock markers across 216 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-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing license, ci. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-3523b1bfd8f99048", "name": "Commented-code block (8 lines) in next.config.ts:36", "shortDescription": {"text": "Commented-code block (8 lines) in next.config.ts:36"}, "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-f097e046d7a13fe4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/page.tsx:229", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/page.tsx: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-b32f5ef16bb6ca9c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/peer-evaluations/aggregate/route.ts:93", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/peer-evaluations/aggregate/route.ts:93"}, "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-b9a6e12d30972f8d", "name": "Commented-code block (7 lines) in app/api/cron/affiliation-expiry/route.ts:50", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/cron/affiliation-expiry/route.ts:50"}, "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-25eed4c8bdf533d6", "name": "Commented-code block (6 lines) in app/api/cron/cert-expiry/route.ts:70", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/cron/cert-expiry/route.ts:70"}, "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-ea536043a5ada882", "name": "Commented-code block (6 lines) in app/api/cron/internship-milestones/route.ts:61", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/cron/internship-milestones/route.ts:61"}, "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-352e367d81c54a3c", "name": "Commented-code block (5 lines) in app/api/cron/clinical-hours-reminder/route.ts:57", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/cron/clinical-hours-reminder/route.ts:57"}, "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-128355371fab1905", "name": "Commented-code block (7 lines) in app/api/cron/calendar-sync/route.ts:22", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/cron/calendar-sync/route.ts:22"}, "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-66e42d5e19443ba9", "name": "Commented-code block (6 lines) in app/api/lvfr-aemt/admin/seed/route.ts:321", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/lvfr-aemt/admin/seed/route.ts:321"}, "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-1eda510ce4c5d020", "name": "Commented-code block (5 lines) in app/api/lvfr-aemt/grades/import/confirm/route.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/lvfr-aemt/grades/import/confirm/route.ts: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-c19a119a32ca49aa", "name": "Commented-code block (6 lines) in app/api/lvfr-aemt/planner/reseed/route.ts:673", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/lvfr-aemt/planner/reseed/route.ts:673"}, "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-bc10d2a32ab621ff", "name": "Commented-code block (5 lines) in app/api/lvfr-aemt/runsheet/[date]/seed/route.ts:97", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/lvfr-aemt/runsheet/[date]/seed/route.ts:97"}, "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-50093133f8d05a04", "name": "Commented-code block (5 lines) in app/api/admin/seed-instructor-availability/route.ts:90", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/admin/seed-instructor-availability/route.ts:90"}, "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-4d39ed3e18b3906c", "name": "Commented-code block (7 lines) in app/api/admin/equipment/maintenance/route.ts:8", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/admin/equipment/maintenance/route.ts: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-be4554ffb270984c", "name": "Legacy-named symbol `full_backup` in app/api/admin/data-export/route.ts:11", "shortDescription": {"text": "Legacy-named symbol `full_backup` in app/api/admin/data-export/route.ts:11"}, "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-b85642e4be37eb6b", "name": "Commented-code block (7 lines) in app/api/admin/feedback/import/route.ts:11", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/admin/feedback/import/route.ts: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-3318491025437c90", "name": "Commented-code block (5 lines) in app/api/admin/scenarios/transform/route.ts:334", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/admin/scenarios/transform/route.ts:334"}, "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-a211d5cd9580cc72", "name": "Commented-code block (9 lines) in app/api/admin/scenarios/bulk-import/route.ts:399", "shortDescription": {"text": "Commented-code block (9 lines) in app/api/admin/scenarios/bulk-import/route.ts:399"}, "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-e63a2fc6906c8c23", "name": "Commented-code block (8 lines) in app/api/admin/scenarios/bulk-import/commit/route.ts:11", "shortDescription": {"text": "Commented-code block (8 lines) in app/api/admin/scenarios/bulk-import/commit/route.ts: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-9dfd1d0e385eff8f", "name": "Commented-code block (6 lines) in app/api/admin/scenarios/auto-fill/route.ts:156", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/admin/scenarios/auto-fill/route.ts:156"}, "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-2688b71ef467de9a", "name": "Commented-code block (9 lines) in app/api/admin/broadcast/route.ts:100", "shortDescription": {"text": "Commented-code block (9 lines) in app/api/admin/broadcast/route.ts:100"}, "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-9149dceded0801e8", "name": "Commented-code block (5 lines) in app/api/admin/skill-drills/import/route.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/admin/skill-drills/import/route.ts: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-5e19597dd1f18ff1", "name": "Commented-code block (9 lines) in app/api/admin/lab-templates/apply/route.ts:11", "shortDescription": {"text": "Commented-code block (9 lines) in app/api/admin/lab-templates/apply/route.ts: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-fb8cf87ce4928620", "name": "Commented-code block (6 lines) in app/api/admin/lab-templates/[id]/versions/route.ts:105", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/admin/lab-templates/[id]/versions/route.ts:105"}, "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-95c8936c469bb6a0", "name": "Commented-code block (11 lines) in app/api/admin/lab-templates/refresh-day/route.ts:138", "shortDescription": {"text": "Commented-code block (11 lines) in app/api/admin/lab-templates/refresh-day/route.ts:138"}, "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-adfb6fe0359ed620", "name": "Commented-code block (6 lines) in app/api/admin/lab-templates/update-existing/route.ts:99", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/admin/lab-templates/update-existing/route.ts:99"}, "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-c2b0702765d266bf", "name": "Commented-code block (5 lines) in app/api/admin/lab-templates/seed/route.ts:21", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/admin/lab-templates/seed/route.ts:21"}, "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-ee2f07a41cc00a8a", "name": "Commented-code block (5 lines) in app/api/admin/lab-templates/update-from-lab/route.ts:78", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/admin/lab-templates/update-from-lab/route.ts:78"}, "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-f5a032a95116bd56", "name": "Commented-code block (5 lines) in app/api/admin/lab-templates/import/route.ts:8", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/admin/lab-templates/import/route.ts: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-13827215ccd4dc83", "name": "Commented-code block (6 lines) in app/api/admin/incidents/route.ts:8", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/admin/incidents/route.ts: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-c880314cd204bcdf", "name": "Commented-code block (5 lines) in app/api/admin/incidents/[id]/route.ts:40", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/admin/incidents/[id]/route.ts:40"}, "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-96077149a121bfb8", "name": "Commented-code block (6 lines) in app/api/admin/cases/briefs/route.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/admin/cases/briefs/route.ts: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-d05d15fc27c0f89a", "name": "Commented-code block (6 lines) in app/api/admin/cases/prompt-template/route.ts:1", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/admin/cases/prompt-template/route.ts: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-aa638cc7c73abf2a", "name": "Commented-code block (5 lines) in app/api/admin/calendar-sync/route.ts:125", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/admin/calendar-sync/route.ts:125"}, "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-23c0f2055099a90f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/calendar-sync/cleanup-duplicates/route.ts:120", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/calendar-sync/cleanup-duplicates/route.ts:120"}, "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-258899920927de0d", "name": "Commented-code block (5 lines) in app/api/admin/calendar-sync/force-resync/route.ts:101", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/admin/calendar-sync/force-resync/route.ts:101"}, "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-4b1b49e3477c373b", "name": "Commented-code block (7 lines) in app/api/lab-management/groups/route.ts:27", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/lab-management/groups/route.ts:27"}, "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-ff0dd3033cc8f835", "name": "Commented-code block (8 lines) in app/api/lab-management/groups/[id]/members/route.ts:118", "shortDescription": {"text": "Commented-code block (8 lines) in app/api/lab-management/groups/[id]/members/route.ts:118"}, "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-0ed0c1ce0b1b2a32", "name": "Commented-code block (5 lines) in app/api/lab-management/lab-days/route.ts:245", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/lab-management/lab-days/route.ts:245"}, "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-2f3eb1d745944502", "name": "Commented-code block (8 lines) in app/api/lab-management/lab-days/[id]/skill-results/resend/route.ts:24", "shortDescription": {"text": "Commented-code block (8 lines) in app/api/lab-management/lab-days/[id]/skill-results/resend/route.ts:24"}, "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-419930afd3ae1517", "name": "Commented-code block (6 lines) in app/api/lab-management/lab-days/[id]/checkoff-status/route.ts:40", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/lab-management/lab-days/[id]/checkoff-status/route.ts:40"}, "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-4fe4b77e8d7f1914", "name": "Commented-code block (5 lines) in app/api/lab-management/lab-days/[id]/assistance-alerts/route.ts:56", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/lab-management/lab-days/[id]/assistance-alerts/route.ts:56"}, "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-123f64c5711e90f8", "name": "Commented-code block (6 lines) in app/api/lab-management/lab-days/[id]/retake-status/route.ts:97", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/lab-management/lab-days/[id]/retake-status/route.ts:97"}, "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-8243cadc3c171efb", "name": "Commented-code block (6 lines) in app/api/lab-management/lab-days/[id]/student-pdf/route.ts:236", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/lab-management/lab-days/[id]/student-pdf/route.ts:236"}, "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-9c6064c89284f226", "name": "Commented-code block (5 lines) in app/api/lab-management/lab-days/templates/route.ts:44", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/lab-management/lab-days/templates/route.ts:44"}, "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-354b348c582a876f", "name": "Commented-code block (6 lines) in app/api/lab-management/costs/route.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/lab-management/costs/route.ts: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-54eab47606af4b2e", "name": "Commented-code block (8 lines) in app/api/lab-management/student-queue/route.ts:54", "shortDescription": {"text": "Commented-code block (8 lines) in app/api/lab-management/student-queue/route.ts: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-49af94d618ac1efe", "name": "Commented-code block (7 lines) in app/api/lab-management/stations/route.ts:204", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/lab-management/stations/route.ts:204"}, "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-f8a4389a8a460eac", "name": "Commented-code block (5 lines) in app/api/lab-management/stations/[id]/route.ts:281", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/lab-management/stations/[id]/route.ts:281"}, "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-5b00c66f2f7cb8b8", "name": "Commented-code block (6 lines) in app/api/lab-management/scenarios/route.ts:19", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/lab-management/scenarios/route.ts:19"}, "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-0dfa5d26f1443d20", "name": "Commented-code block (6 lines) in app/api/lab-management/scenarios/[id]/versions/route.ts:74", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/lab-management/scenarios/[id]/versions/route.ts:74"}, "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-cb8ab0fb665f8392", "name": "Commented-code block (5 lines) in app/api/lab-management/instructor-availability/route.ts:292", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/lab-management/instructor-availability/route.ts:292"}, "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-c16fd81bf7f0f21d", "name": "Commented-code block (5 lines) in app/api/lab-management/cohorts/[id]/stats/route.ts:62", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/lab-management/cohorts/[id]/stats/route.ts:62"}, "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-9beefe522fa9a64f", "name": "Commented-code block (7 lines) in app/api/lab-management/schedule/suggestions/route.ts:38", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/lab-management/schedule/suggestions/route.ts: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-75514913489b144c", "name": "Commented-code block (9 lines) in app/api/lab-management/timer/route.ts:60", "shortDescription": {"text": "Commented-code block (9 lines) in app/api/lab-management/timer/route.ts: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-6fe2e4de0d86c657", "name": "Commented-code block (16 lines) in app/api/lab-management/timer/adjust/route.ts:109", "shortDescription": {"text": "Commented-code block (16 lines) in app/api/lab-management/timer/adjust/route.ts:109"}, "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-667b775d9ea94364", "name": "Commented-code block (5 lines) in app/api/lab-management/timer/active/route.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/lab-management/timer/active/route.ts: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-ab7686a1b565dfe6", "name": "Commented-code block (5 lines) in app/api/lab-management/debrief-notes/counts/route.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/lab-management/debrief-notes/counts/route.ts: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-0c136a4b39ece7bc", "name": "Commented-code block (5 lines) in app/api/lab-management/attendance/at-risk/route.ts:39", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/lab-management/attendance/at-risk/route.ts:39"}, "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-7a40df771318a189", "name": "Commented-code block (6 lines) in app/api/resources/route.ts:82", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/resources/route.ts:82"}, "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-da361caa1b04d744", "name": "Commented-code block (5 lines) in app/api/resources/medications/route.ts:23", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/resources/medications/route.ts: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-5634e673dcedcc77", "name": "Commented-code block (6 lines) in app/api/students/[id]/graduate/route.ts:91", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/students/[id]/graduate/route.ts:91"}, "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-847852326ae7a782", "name": "Commented-code block (8 lines) in app/api/students/[id]/transfer/route.ts:81", "shortDescription": {"text": "Commented-code block (8 lines) in app/api/students/[id]/transfer/route.ts:81"}, "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-96b0c95b8a83768f", "name": "Commented-code block (7 lines) in app/api/skill-sheets/[id]/evaluate/route.ts:108", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/skill-sheets/[id]/evaluate/route.ts: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-0895ceb210175020", "name": "Commented-code block (6 lines) in app/api/skill-sheets/[id]/evaluations/route.ts:119", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/skill-sheets/[id]/evaluations/route.ts:119"}, "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-1f3eef9d80964178", "name": "Commented-code block (5 lines) in app/api/skill-sheets/evaluations-by-lab-day/route.ts:20", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/skill-sheets/evaluations-by-lab-day/route.ts: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}}, {"id": "scanner-7b28d8559ac096f6", "name": "Commented-code block (6 lines) in app/api/skill-sheets/by-skill-name/route.ts:153", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/skill-sheets/by-skill-name/route.ts:153"}, "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-bc67144efc779438", "name": "Commented-code block (6 lines) in app/api/skill-sheets/evaluations/send-email/route.ts:57", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/skill-sheets/evaluations/send-email/route.ts:57"}, "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-eb5e8c1107f2e09b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/osce/events/[id]/calendar-invites/route.ts:192", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/osce/events/[id]/calendar-invites/route.ts:192"}, "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-9836dedb6d89bf62", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/instructor/email-history/route.ts:160", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/instructor/email-history/route.ts:160"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9efd0f649823b696", "name": "Commented-code block (6 lines) in app/api/deep-links/route.ts:18", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/deep-links/route.ts: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-98f90f1e07fb379c", "name": "Commented-code block (5 lines) in app/api/student/my-progress/route.ts:296", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/student/my-progress/route.ts:296"}, "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-181b0af800a32829", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/calendar/create-event/route.ts:137", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/calendar/create-event/route.ts:137"}, "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-6d1cee0973831964", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/calendar/find-conflicts/route.ts:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/calendar/find-conflicts/route.ts:42"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-30cc286a3d81a2d8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/calendar/find-slots/route.ts:57", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/calendar/find-slots/route.ts:57"}, "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-d586968c7610c076", "name": "Commented-code block (8 lines) in app/api/calendar/sync-my-blocks/route.ts:76", "shortDescription": {"text": "Commented-code block (8 lines) in app/api/calendar/sync-my-blocks/route.ts:76"}, "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-bc1be75120276ca0", "name": "Commented-code block (6 lines) in app/api/calendar/availability/route.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/calendar/availability/route.ts: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-c9008cc1bee5e353", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/calendar/calendars/route.ts:30", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/calendar/calendars/route.ts: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-1866e71c247dbc18", "name": "Commented-code block (5 lines) in app/api/calendar/export-ics/route.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/calendar/export-ics/route.ts: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-dec2b2ab744f045c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/calendar/google-events/route.ts:66", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/calendar/google-events/route.ts:66"}, "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-4fa7993ee09be8f8", "name": "Commented-code block (9 lines) in app/api/calendar/callback/route.ts:67", "shortDescription": {"text": "Commented-code block (9 lines) in app/api/calendar/callback/route.ts:67"}, "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-491f5e73fa603691", "name": "Commented-code block (10 lines) in app/api/calendar/unified/route.ts:75", "shortDescription": {"text": "Commented-code block (10 lines) in app/api/calendar/unified/route.ts:75"}, "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-9521e0c61b2f0e3d", "name": "Commented-code block (6 lines) in app/api/scheduling/shifts/generate-from-labs/route.ts:91", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/scheduling/shifts/generate-from-labs/route.ts:91"}, "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-c5025232fd044249", "name": "Commented-code block (9 lines) in app/api/scheduling/planner/generate/route.ts:53", "shortDescription": {"text": "Commented-code block (9 lines) in app/api/scheduling/planner/generate/route.ts:53"}, "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-fcae4ed6a30edc2f", "name": "Commented-code block (6 lines) in app/api/scheduling/planner/blocks/route.ts:138", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/scheduling/planner/blocks/route.ts:138"}, "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-ba7ba34ad85a201e", "name": "Commented-code block (5 lines) in app/api/scheduling/planner/blocks/[id]/route.ts:127", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/scheduling/planner/blocks/[id]/route.ts:127"}, "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-27821c8afa09f6f1", "name": "Commented-code block (6 lines) in app/api/scheduling/planner/blocks/recurring/route.ts:92", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/scheduling/planner/blocks/recurring/route.ts:92"}, "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-07c36f0d444dacec", "name": "Commented-code block (5 lines) in app/api/scheduling/planner/blocks/check-existing/route.ts:39", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/scheduling/planner/blocks/check-existing/route.ts:39"}, "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-f783be3236d74c83", "name": "Commented-code block (6 lines) in app/api/scheduling/planner/programs/route.ts:19", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/scheduling/planner/programs/route.ts:19"}, "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-170bfc06333d378f", "name": "Commented-code block (8 lines) in app/api/scheduling/planner/semesters/[id]/route.ts:135", "shortDescription": {"text": "Commented-code block (8 lines) in app/api/scheduling/planner/semesters/[id]/route.ts:135"}, "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-0ba7a5fd5919ad1f", "name": "Commented-code block (6 lines) in app/api/scheduling/planner/lab-templates/route.ts:24", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/scheduling/planner/lab-templates/route.ts:24"}, "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-ae54dba33ad8c7db", "name": "Commented-code block (6 lines) in app/api/scheduling/manual-hours/route.ts:85", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/scheduling/manual-hours/route.ts:85"}, "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-038ae5ef20531ac8", "name": "Commented-code block (6 lines) in app/api/scheduling/coordinator-calendar/route.ts:110", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/scheduling/coordinator-calendar/route.ts:110"}, "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-6e01468d924e0676", "name": "Commented-code block (6 lines) in app/api/volunteer/events/[id]/send-correction/route.ts:12", "shortDescription": {"text": "Commented-code block (6 lines) in app/api/volunteer/events/[id]/send-correction/route.ts:12"}, "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-7ad4c5b98c09c08d", "name": "Commented-code block (5 lines) in app/api/announcements/route.ts:146", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/announcements/route.ts:146"}, "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-5106cb8898eae849", "name": "Commented-code block (5 lines) in app/api/cases/leaderboard/[cohortId]/route.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/cases/leaderboard/[cohortId]/route.ts: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-910c2f232aa4e632", "name": "Commented-code block (5 lines) in app/api/clinical/internships/route.ts:31", "shortDescription": {"text": "Commented-code block (5 lines) in app/api/clinical/internships/route.ts:31"}, "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-b27dc1da94beeca7", "name": "Commented-code block (7 lines) in app/api/clinical/internships/[id]/route.ts:34", "shortDescription": {"text": "Commented-code block (7 lines) in app/api/clinical/internships/[id]/route.ts:34"}, "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-cfa0242af6849ed6", "name": "Commented-code block (5 lines) in app/labs/scenario-library/page.tsx:881", "shortDescription": {"text": "Commented-code block (5 lines) in app/labs/scenario-library/page.tsx:881"}, "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-bd6abe5a99067ca9", "name": "Commented-code block (8 lines) in app/labs/grade/station/[id]/page.tsx:304", "shortDescription": {"text": "Commented-code block (8 lines) in app/labs/grade/station/[id]/page.tsx:304"}, "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-05091744384bd7ab", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/grade/station/[id]/page.tsx:778", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/grade/station/[id]/page.tsx:778"}, "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-42c2371ee11d5631", "name": "Commented-code block (8 lines) in app/labs/groups/page.tsx:719", "shortDescription": {"text": "Commented-code block (8 lines) in app/labs/groups/page.tsx:719"}, "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-cdc47f88da86547a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/groups/page.tsx:382", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/groups/page.tsx:382"}, "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-20ba8dbaf99198e4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/my-certifications/CETracker.tsx:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/my-certifications/CETracker.tsx:79"}, "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-5819126a742ff837", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/my-certifications/CertList.tsx:186", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/my-certifications/CertList.tsx:186"}, "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-234a6a64db4d21b8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/my-certifications/page.tsx:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/my-certifications/page.tsx:64"}, "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-2ef52d115e22e766", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/templates/weekly/page.tsx:183", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/templates/weekly/page.tsx:183"}, "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-a73e30cc26ea2096", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/templates/review/[id]/item/[itemId]/page.tsx:274", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/templates/review/[id]/item/[itemId]/page.tsx:274"}, "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-e97b9bea7b5a848e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/stations/log/page.tsx:215", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/stations/log/page.tsx:215"}, "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-1431e278df599d80", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/stations/pool/page.tsx:218", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/stations/pool/page.tsx:218"}, "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-0bcd688d0cd2c437", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/scenarios/page.tsx:174", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/scenarios/page.tsx:174"}, "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-760824aa7e66ca28", "name": "Commented-code block (8 lines) in app/labs/scenarios/[id]/page.tsx:1197", "shortDescription": {"text": "Commented-code block (8 lines) in app/labs/scenarios/[id]/page.tsx:1197"}, "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-15b8a0145151b609", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/scenarios/[id]/page.tsx:1259", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/scenarios/[id]/page.tsx:1259"}, "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-27c4ac38a644a431", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/scenarios/new/page.tsx:793", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/scenarios/new/page.tsx:793"}, "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-fc33be059a5214b0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/peer-evals/page.tsx:182", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/peer-evals/page.tsx:182"}, "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-b5d7487f2af541d7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/skill-drills/page.tsx:389", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/skill-drills/page.tsx:389"}, "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-19c4fbdab776d707", "name": "Commented-code block (5 lines) in app/labs/skill-drills/[id]/page.tsx:6", "shortDescription": {"text": "Commented-code block (5 lines) in app/labs/skill-drills/[id]/page.tsx: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-0871845b9692cd8d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/skill-sheets/page.tsx:201", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/skill-sheets/page.tsx:201"}, "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-2f53ec023d2762eb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/page.tsx:282", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/page.tsx:282"}, "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-286d18da05fb9213", "name": "Commented-code block (5 lines) in app/labs/schedule/[id]/page.tsx:89", "shortDescription": {"text": "Commented-code block (5 lines) in app/labs/schedule/[id]/page.tsx:89"}, "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-4fa0fd3dd2224f9b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/[id]/page.tsx:197", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/[id]/page.tsx:197"}, "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-c3b16f0a8f57207d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/[id]/stations/new/page.tsx:254", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/[id]/stations/new/page.tsx:254"}, "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-8cde7bb5431ffc0b", "name": "Commented-code block (6 lines) in app/labs/schedule/[id]/assignments/page.tsx:125", "shortDescription": {"text": "Commented-code block (6 lines) in app/labs/schedule/[id]/assignments/page.tsx:125"}, "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-68b663a3d71c3bba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/[id]/assignments/page.tsx:215", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/[id]/assignments/page.tsx:215"}, "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-aa15bee864051dd4", "name": "Commented-code block (5 lines) in app/labs/schedule/[id]/coordinator/page.tsx:196", "shortDescription": {"text": "Commented-code block (5 lines) in app/labs/schedule/[id]/coordinator/page.tsx:196"}, "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-e9228b7c93f75061", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/[id]/coordinator/page.tsx:851", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/[id]/coordinator/page.tsx:851"}, "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-b2aed17778654f4a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/[id]/edit/page.tsx:328", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/[id]/edit/page.tsx:328"}, "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-c458941b59416346", "name": "Commented-code block (5 lines) in app/labs/schedule/new/page.tsx:287", "shortDescription": {"text": "Commented-code block (5 lines) in app/labs/schedule/new/page.tsx:287"}, "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-adae41d27288cada", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/new/page.tsx:488", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/new/page.tsx:488"}, "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-1c5e456df83b9cad", "name": "Commented-code block (5 lines) in app/labs/seating/charts/page.tsx:80", "shortDescription": {"text": "Commented-code block (5 lines) in app/labs/seating/charts/page.tsx:80"}, "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-a7db7d868038ca99", "name": "Commented-code block (7 lines) in app/labs/seating/charts/[id]/page.tsx:442", "shortDescription": {"text": "Commented-code block (7 lines) in app/labs/seating/charts/[id]/page.tsx:442"}, "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-76012f344c260779", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/seating/learning-styles/page.tsx:196", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/seating/learning-styles/page.tsx:196"}, "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-43b1c88e9e44dba6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/seating/preferences/page.tsx:142", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/seating/preferences/page.tsx:142"}, "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-108eb3ad49f896f2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/mentorship/page.tsx:321", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/mentorship/page.tsx:321"}, "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-2832221ffb346466", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/lvfr-aemt/files/page.tsx:168", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lvfr-aemt/files/page.tsx:168"}, "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-b7c7db74ee078db4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/lvfr-aemt/grades/page.tsx:680", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lvfr-aemt/grades/page.tsx:680"}, "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-d8456c15e9e41512", "name": "Commented-code block (6 lines) in app/lvfr-aemt/day/[date]/page.tsx:159", "shortDescription": {"text": "Commented-code block (6 lines) in app/lvfr-aemt/day/[date]/page.tsx:159"}, "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-dea4ef7263fd521c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/lvfr-aemt/day/[date]/page.tsx:281", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lvfr-aemt/day/[date]/page.tsx:281"}, "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-28bb06e842f98fbd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/lvfr-aemt/planner/page.tsx:1193", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lvfr-aemt/planner/page.tsx:1193"}, "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-09ccc64f99fb818e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/lvfr-aemt/skills/page.tsx:157", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lvfr-aemt/skills/page.tsx:157"}, "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-bde669f9c7b7539c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/bulk-operations/page.tsx:439", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/bulk-operations/page.tsx:439"}, "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-4a4b71d246bb3e06", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/equipment/page.tsx:920", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/equipment/page.tsx:920"}, "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-e9814647cef74047", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/equipment/maintenance/page.tsx:814", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/equipment/maintenance/page.tsx:814"}, "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-a038628b8b9a19d0", "name": "Legacy-named symbol `full_backup` in app/admin/data-export/page.tsx:31", "shortDescription": {"text": "Legacy-named symbol `full_backup` in app/admin/data-export/page.tsx:31"}, "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-8e3f313a4acc30b2", "name": "Commented-code block (6 lines) in app/admin/feedback/page.tsx:256", "shortDescription": {"text": "Commented-code block (6 lines) in app/admin/feedback/page.tsx:256"}, "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-59b1df610e76aef0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/feedback/page.tsx:344", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/feedback/page.tsx:344"}, "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-d5e9982c759b2bc7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/alumni/page.tsx:983", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/alumni/page.tsx:983"}, "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-c8598c95ac46e4f5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/scenarios/transform/page.tsx:153", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/scenarios/transform/page.tsx:153"}, "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-f292d33c49252e16", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/scenarios/bulk-import/page.tsx:264", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/scenarios/bulk-import/page.tsx:264"}, "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-d7f82ccc5a88e7a0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/volunteer-events/page.tsx:221", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/volunteer-events/page.tsx:221"}, "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-e88dba177f0f4865", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/webhooks/page.tsx:813", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/webhooks/page.tsx:813"}, "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-49d2017e32f31c82", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/rubrics/page.tsx:731", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/rubrics/page.tsx:731"}, "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-5088087d35fa1c5c", "name": "Commented-code block (5 lines) in app/admin/settings/page.tsx:295", "shortDescription": {"text": "Commented-code block (5 lines) in app/admin/settings/page.tsx: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-f7feca3a5bc2cd3b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/semesters/page.tsx:488", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/semesters/page.tsx:488"}, "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-360e7fc3762d05b4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/lab-templates/page.tsx:343", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/lab-templates/page.tsx:343"}, "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-3a9e1fee3db8d866", "name": "Commented-code block (6 lines) in app/admin/lab-templates/import/page.tsx:187", "shortDescription": {"text": "Commented-code block (6 lines) in app/admin/lab-templates/import/page.tsx:187"}, "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-1dfd3aa93512323d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/lab-templates/import/page.tsx:292", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/lab-templates/import/page.tsx:292"}, "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-9e358eb23a3a7fc9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/instructor-workload/page.tsx:137", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/instructor-workload/page.tsx:137"}, "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-59a04196ff2388cb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/announcements/page.tsx:403", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/announcements/page.tsx:403"}, "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-9b406d50ca720795", "name": "Legacy-named symbol `pmi_qa_checklist_v1` in app/admin/qa-checklist/page.tsx:352", "shortDescription": {"text": "Legacy-named symbol `pmi_qa_checklist_v1` in app/admin/qa-checklist/page.tsx:352"}, "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-e6a4c86fba08c3d0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/time-clock/page.tsx:203", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/time-clock/page.tsx:203"}, "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-4937d47b5c83f507", "name": "Commented-code block (6 lines) in app/admin/calendar-sync/page.tsx:422", "shortDescription": {"text": "Commented-code block (6 lines) in app/admin/calendar-sync/page.tsx:422"}, "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-f10904d3e592c4a1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/feedback/my-submissions/page.tsx:174", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/feedback/my-submissions/page.tsx:174"}, "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-17b6ee7c80393c56", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/timer-display/live/[labDayId]/page.tsx:294", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/timer-display/live/[labDayId]/page.tsx:294"}, "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-47212a4609bea7e8", "name": "Commented-code block (8 lines) in app/timer-display/[token]/page.tsx:211", "shortDescription": {"text": "Commented-code block (8 lines) in app/timer-display/[token]/page.tsx:211"}, "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-e361c3c91cfcc056", "name": "Commented-code block (7 lines) in app/reports/page.tsx:187", "shortDescription": {"text": "Commented-code block (7 lines) in app/reports/page.tsx:187"}, "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-822905a806259a6f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/scenario-usage/page.tsx:107", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/scenario-usage/page.tsx:107"}, "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-89b7591d82b3a163", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/lab-progress/page.tsx:150", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/lab-progress/page.tsx:150"}, "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-1be06e5a4bdffcd3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/builder/page.tsx:295", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/builder/page.tsx:295"}, "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-24cea9055d34ede5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/lab-costs/page.tsx:149", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/lab-costs/page.tsx:149"}, "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-7a5b9ffa056947a3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/student-dashboard/page.tsx:89", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/student-dashboard/page.tsx:89"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-39f777e96d5d90b5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/instructor-workload/page.tsx:129", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/instructor-workload/page.tsx:129"}, "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-e25db107d58773e4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/skill-trends/page.tsx:211", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/skill-trends/page.tsx:211"}, "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-f62e5c14ffa53300", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/program-outcomes/page.tsx:572", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/program-outcomes/page.tsx:572"}, "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-eff07810094b0a60", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/attendance/page.tsx:121", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/attendance/page.tsx:121"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7a06c992c4ac2c1c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/scenario-analytics/page.tsx:152", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/scenario-analytics/page.tsx:152"}, "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-a8ac0022b8b54cf4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/resources/page.tsx:760", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/resources/page.tsx:760"}, "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-9922a6904538d7b9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/resources/medications/page.tsx:892", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/resources/medications/page.tsx:892"}, "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-c5af1efb96cdbb91", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/osce-scoring/[assessmentId]/page.tsx:416", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/osce-scoring/[assessmentId]/page.tsx:416"}, "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-cfdaf8bd6dcfe866", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/osce-scenario/[letter]/page.tsx:67", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/osce-scenario/[letter]/page.tsx:67"}, "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-f1e5de12b763a491", "name": "Commented-code block (7 lines) in app/poll/[id]/page.tsx:23", "shortDescription": {"text": "Commented-code block (7 lines) in app/poll/[id]/page.tsx: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-cc84ec1eda3573f7", "name": "Commented-code block (7 lines) in app/poll/create/page.tsx:81", "shortDescription": {"text": "Commented-code block (7 lines) in app/poll/create/page.tsx:81"}, "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-d9595122d4dfccd3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/settings/page.tsx:252", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/settings/page.tsx:252"}, "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-87467c14fa3a6a50", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/settings/sessions/page.tsx:319", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/settings/sessions/page.tsx:319"}, "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-4ce0b2eb13517acc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/instructor/page.tsx:130", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/instructor/page.tsx:130"}, "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-473dbb739a871703", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/instructor/ce/page.tsx:93", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/instructor/ce/page.tsx:93"}, "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-70b138972c86ffcc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/instructor/email-history/page.tsx:124", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/instructor/email-history/page.tsx:124"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c49a012fb0d7fde1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/instructor/certifications/page.tsx:134", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/instructor/certifications/page.tsx:134"}, "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-05ab40f64f6ff03e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/instructor/teaching/page.tsx:100", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/instructor/teaching/page.tsx:100"}, "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-1c5dbae4b37814fb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/instructor/history/page.tsx:190", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/instructor/history/page.tsx:190"}, "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-dee8047820a8c9d7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/student/page.tsx:150", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/student/page.tsx:150"}, "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-f47ef1393f4ec5a2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/student/peer-eval/page.tsx:215", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/student/peer-eval/page.tsx:215"}, "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-4bfaaa10b0788d90", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/student/skill-evaluations/[id]/page.tsx:86", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/student/skill-evaluations/[id]/page.tsx:86"}, "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-8630702d5f08f30a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/onboarding/page.tsx:360", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/onboarding/page.tsx:360"}, "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-d9a9e49f5e39fb86", "name": "Commented-code block (7 lines) in app/calendar/page.tsx:554", "shortDescription": {"text": "Commented-code block (7 lines) in app/calendar/page.tsx:554"}, "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-c81adf9919bf8d87", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/calendar/page.tsx:670", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/calendar/page.tsx:670"}, "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-c650471106fc15ae", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/tasks/page.tsx:191", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/tasks/page.tsx:191"}, "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-9489a670a6caa264", "name": "Commented-code block (11 lines) in app/scheduling/page.tsx:81", "shortDescription": {"text": "Commented-code block (11 lines) in app/scheduling/page.tsx:81"}, "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-33079c17e79f47db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/page.tsx:188", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/page.tsx:188"}, "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-c4c02bae9a006160", "name": "Commented-code block (10 lines) in app/scheduling/shifts/page.tsx:848", "shortDescription": {"text": "Commented-code block (10 lines) in app/scheduling/shifts/page.tsx:848"}, "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-c1c4a6c6f32b59a9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/shifts/page.tsx:334", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/shifts/page.tsx:334"}, "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-f85422d89ff8e443", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/shifts/new/page.tsx:451", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/shifts/new/page.tsx:451"}, "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-ecec7b5d4f4b8317", "name": "Commented-code block (5 lines) in app/scheduling/polls/create/page.tsx:46", "shortDescription": {"text": "Commented-code block (5 lines) in app/scheduling/polls/create/page.tsx:46"}, "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-8e4a80118eb7c58c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/polls/create/page.tsx:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/polls/create/page.tsx:29"}, "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-c0d6a65e6081d605", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/resource-bookings/page.tsx:200", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/resource-bookings/page.tsx:200"}, "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-9cedcb5b939f6cfb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/availability/page.tsx:481", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/availability/page.tsx:481"}, "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-ecf1bac366b5a5f0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/availability/all/page.tsx:1435", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/availability/all/page.tsx:1435"}, "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-d3517957f04e4358", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/reports/page.tsx:171", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/reports/page.tsx:171"}, "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-37fc5bb123b0e290", "name": "Commented-code block (9 lines) in app/scheduling/planner/page.tsx:2409", "shortDescription": {"text": "Commented-code block (9 lines) in app/scheduling/planner/page.tsx:2409"}, "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-fa7439a169974b13", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/planner/page.tsx:1465", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/planner/page.tsx:1465"}, "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-f98be790a7c8afea", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/planner/templates/page.tsx:116", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/planner/templates/page.tsx:116"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-85de5bfd5c99e9ed", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/notifications/page.tsx:279", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/notifications/page.tsx:279"}, "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-ef18c4a395456c0b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/skill-evaluations/[id]/page.tsx:114", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/skill-evaluations/[id]/page.tsx:114"}, "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-3be7eff010c04550", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/admin/smc/page.tsx:190", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/admin/smc/page.tsx:190"}, "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-2bd82aa3b5e34195", "name": "Commented-code block (6 lines) in app/academics/planner/page.tsx:1325", "shortDescription": {"text": "Commented-code block (6 lines) in app/academics/planner/page.tsx:1325"}, "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-176079844dd5467d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/planner/page.tsx:1481", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/planner/page.tsx:1481"}, "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-54d8a12109b8b71e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/planner/templates/page.tsx:116", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/planner/templates/page.tsx:116"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4f24d88af767c3ad", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/students/page.tsx:124", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/students/page.tsx:124"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9f3884b65e399d92", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/students/[id]/page.tsx:471", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/students/[id]/page.tsx:471"}, "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-8fd728e90023cf93", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/cohorts/page.tsx:143", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/cohorts/page.tsx:143"}, "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-2581a0bf436b5842", "name": "Commented-code block (7 lines) in app/academics/cohorts/[id]/page.tsx:255", "shortDescription": {"text": "Commented-code block (7 lines) in app/academics/cohorts/[id]/page.tsx:255"}, "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-c67b056779328537", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/cohorts/[id]/page.tsx:348", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/cohorts/[id]/page.tsx:348"}, "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-1142fd252abaf06b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/cohorts/[id]/skill-log/page.tsx:108", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/cohorts/[id]/skill-log/page.tsx:108"}, "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-d3fa43da1c088950", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/cohorts/[id]/groups/page.tsx:126", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/cohorts/[id]/groups/page.tsx:126"}, "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-9285800749287291", "name": "Commented-code block (5 lines) in app/academics/cohorts/[id]/intake/page.tsx:59", "shortDescription": {"text": "Commented-code block (5 lines) in app/academics/cohorts/[id]/intake/page.tsx:59"}, "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-7a8cd93ee8cfafc3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/cohorts/[id]/intake/page.tsx:108", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/cohorts/[id]/intake/page.tsx:108"}, "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-d4f36f1ca4236fe7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/cases/page.tsx:195", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/cases/page.tsx:195"}, "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-79a176fad78bcd44", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/cases/session/[code]/join/page.tsx:106", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/cases/session/[code]/join/page.tsx:106"}, "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-e334fcd224e0f49f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/cases/leaderboard/page.tsx:112", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/cases/leaderboard/page.tsx:112"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d683409aedac2f3d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/layout.tsx:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/layout.tsx:35"}, "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-db4f2b0df35a787b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/page.tsx:96", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/page.tsx:96"}, "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-3e69cae729158b91", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/aemt-tracking/page.tsx:104", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/aemt-tracking/page.tsx:104"}, "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-22b4812978e5c081", "name": "Commented-code block (8 lines) in app/clinical/internships/[id]/page.tsx:194", "shortDescription": {"text": "Commented-code block (8 lines) in app/clinical/internships/[id]/page.tsx:194"}, "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-de3bfdb52d13506a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/internships/[id]/page.tsx:443", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/internships/[id]/page.tsx:443"}, "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-8ff0ac99c8bf9f40", "name": "Commented-code block (6 lines) in app/clinical/internships/all/page.tsx:408", "shortDescription": {"text": "Commented-code block (6 lines) in app/clinical/internships/all/page.tsx:408"}, "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-4e931fd80b68efbb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/internships/all/page.tsx:312", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/internships/all/page.tsx:312"}, "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-c449065496b206bf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/internships/cohort/[id]/page.tsx:351", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/internships/cohort/[id]/page.tsx:351"}, "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-c967295eda27b850", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/ride-alongs/page.tsx:68", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/ride-alongs/page.tsx:68"}, "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-f95377de13322374", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/ride-alongs/shifts/page.tsx:145", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/ride-alongs/shifts/page.tsx:145"}, "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-041fa1735569b4a1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/ride-alongs/availability/page.tsx:118", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/ride-alongs/availability/page.tsx:118"}, "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-7705be016ebff2d7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/agencies/page.tsx:103", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/agencies/page.tsx:103"}, "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-c609e9f2d062173d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/rotation-scheduler/page.tsx:262", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/rotation-scheduler/page.tsx:262"}, "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-48b0f11772122b4f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/site-visits/page.tsx:228", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/site-visits/page.tsx:228"}, "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-771b0f975d1d4b93", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/site-visit-settings/page.tsx:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/site-visit-settings/page.tsx:73"}, "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-7238566cd4b5f924", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/preceptors/page.tsx:205", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/preceptors/page.tsx:205"}, "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-bed618f6e61deb2f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/summative-evaluations/page.tsx:140", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/summative-evaluations/page.tsx:140"}, "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-76e7a99ea5ea68cf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/summative-evaluations/[id]/grade/page.tsx:299", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/summative-evaluations/[id]/grade/page.tsx:299"}, "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-53df65966cbca286", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/compliance-tracker/page.tsx:209", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/compliance-tracker/page.tsx:209"}, "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-7bb326e6b60c1a8f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/compliance/page.tsx:101", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/compliance/page.tsx:101"}, "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-a661ae0aeb781c64", "name": "Commented-code block (8 lines) in app/clinical/hours/page.tsx:575", "shortDescription": {"text": "Commented-code block (8 lines) in app/clinical/hours/page.tsx:575"}, "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-7d9c96fb4dfadf18", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/hours/page.tsx:483", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/hours/page.tsx:483"}, "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-bfb393f19e993816", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/mce/page.tsx:155", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/mce/page.tsx:155"}, "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-70740a32529017c6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/emt-tracking/page.tsx:98", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/emt-tracking/page.tsx:98"}, "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-7db99f2e8d6623dd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/planning-calendar/page.tsx:207", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/planning-calendar/page.tsx:207"}, "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-dfde853290301660", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduler/create/page.tsx:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduler/create/page.tsx:29"}, "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-fbaaac6de9254293", "name": "`fetch()` without try/.catch or AbortSignal \u2014 app/preceptor/evaluate/[token]/page.tsx:126", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/preceptor/evaluate/[token]/page.tsx:126"}, "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-e18baf8ea36a5935", "name": "Commented-code block (5 lines) in scripts/reset-pm-g14-s2-lab-stations.js:2", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/reset-pm-g14-s2-lab-stations.js:2"}, "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-73d060943e7bd0ce", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-lab-label.js:17", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-lab-label.js:17"}, "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-0c144db3ec915ad1", "name": "Commented-code block (5 lines) in scripts/audit-lab-day-dow-mismatch.js:38", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/audit-lab-day-dow-mismatch.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-12f165d28b59de81", "name": "Commented-code block (7 lines) in scripts/unwrap-scenario-critical-actions.js:4", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/unwrap-scenario-critical-actions.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-0ea37b5eba25d598", "name": "Commented-code block (7 lines) in scripts/fix-lab-blocks-and-emt-g5-labs.js:4", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/fix-lab-blocks-and-emt-g5-labs.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-e891286fd8105d49", "name": "Commented-code block (7 lines) in scripts/reimport-paramedic-s2-v4-and-propagate.js:6", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/reimport-paramedic-s2-v4-and-propagate.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-ce347d456e2702db", "name": "Commented-code block (5 lines) in scripts/reimport-paramedic-s2-labs.js:5", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/reimport-paramedic-s2-labs.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-37d146a848e3e0ee", "name": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/verify-calendar-scope.mjs:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/verify-calendar-scope.mjs:58"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2922b6768e0952ef", "name": "Commented-code block (6 lines) in scripts/extract-scenario-demographics-regex.js:144", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/extract-scenario-demographics-regex.js:144"}, "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-c72f4d02a749afb6", "name": "Commented-code block (7 lines) in scripts/debug-josh-sync.js:5", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/debug-josh-sync.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-6e1a149cfc176253", "name": "Commented-code block (8 lines) in scripts/fix-pm-g14-g15-missing-blocks.js:9", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/fix-pm-g14-g15-missing-blocks.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-c1a7812c04316756", "name": "Commented-code block (5 lines) in scripts/check-fk-ambiguity.js:16", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/check-fk-ambiguity.js:16"}, "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-7539102967defc34", "name": "Commented-code block (8 lines) in scripts/seed-pm-smc.js:92", "shortDescription": {"text": "Commented-code block (8 lines) in scripts/seed-pm-smc.js:92"}, "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-54db07642f7a15ab", "name": "Commented-code block (5 lines) in scripts/lvfr-rebuild/parse-sources.mjs:52", "shortDescription": {"text": "Commented-code block (5 lines) in scripts/lvfr-rebuild/parse-sources.mjs:52"}, "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-dabf8ba5559d93db", "name": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useCurrentUser.ts:5", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useCurrentUser.ts:5"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-81f779bc44875892", "name": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useStudents.ts:32", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useStudents.ts:32"}, "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-2857fa3af64756ca", "name": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useSkillSheets.ts:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useSkillSheets.ts:52"}, "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-d1fb2b570954fb14", "name": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useLabDays.ts:75", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useLabDays.ts:75"}, "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-96631333a54407c2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useCohorts.ts:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useCohorts.ts:29"}, "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-d698906702448b33", "name": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useScenarios.ts:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useScenarios.ts:29"}, "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-6a21d3e3f101e5b8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/StudentCommunications.tsx:146", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/StudentCommunications.tsx:146"}, "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-df5aef38c05a49cd", "name": "Commented-code block (6 lines) in components/TimerBanner.tsx:184", "shortDescription": {"text": "Commented-code block (6 lines) in components/TimerBanner.tsx:184"}, "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-3d68771abd3a352d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/TimerBanner.tsx:95", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/TimerBanner.tsx:95"}, "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-8ebd960a124d9a93", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/NotificationBell.tsx:204", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/NotificationBell.tsx:204"}, "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-f262b811644a1e2d", "name": "Commented-code block (5 lines) in components/LabTimer.tsx:97", "shortDescription": {"text": "Commented-code block (5 lines) in components/LabTimer.tsx:97"}, "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-d7ff69da59517ec7", "name": "Commented-code block (6 lines) in components/BulkPhotoUpload.tsx:42", "shortDescription": {"text": "Commented-code block (6 lines) in components/BulkPhotoUpload.tsx:42"}, "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-d61f5c936a4ea997", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/AttendanceSection.tsx:132", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/AttendanceSection.tsx:132"}, "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-90d4a49a059d68bf", "name": "Commented-code block (7 lines) in components/UserMenu.tsx:129", "shortDescription": {"text": "Commented-code block (7 lines) in components/UserMenu.tsx:129"}, "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-d782c488655f4dce", "name": "Commented-code block (7 lines) in components/GlobalTimerBanner.tsx:108", "shortDescription": {"text": "Commented-code block (7 lines) in components/GlobalTimerBanner.tsx: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-a942d63ac7075455", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/InlineTimerWidget.tsx:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/InlineTimerWidget.tsx:41"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7372c3abf37e2c06", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/OnboardingTourWrapper.tsx:35", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/OnboardingTourWrapper.tsx:35"}, "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-1bb3679635b9a956", "name": "Commented-code block (5 lines) in components/SkillSheetPanel.tsx:410", "shortDescription": {"text": "Commented-code block (5 lines) in components/SkillSheetPanel.tsx:410"}, "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-46c5be51faf1eb02", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/SkillSheetPanel.tsx:769", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/SkillSheetPanel.tsx:769"}, "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-500355800cdca872", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/FeedbackButton.tsx:122", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/FeedbackButton.tsx:122"}, "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-c9daccf85c5f09f4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/BLSPlatinumChecklist.tsx:71", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/BLSPlatinumChecklist.tsx:71"}, "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-39466edefcdafdbb", "name": "Commented-code block (5 lines) in components/dashboard/CalendarConnectBanner.tsx:51", "shortDescription": {"text": "Commented-code block (5 lines) in components/dashboard/CalendarConnectBanner.tsx:51"}, "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-bc51a6179ec1040d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/dashboard/CalendarConnectBanner.tsx:57", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/dashboard/CalendarConnectBanner.tsx:57"}, "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-af9f230732488fe6", "name": "Commented-code block (5 lines) in components/dashboard/widgets/index.ts:122", "shortDescription": {"text": "Commented-code block (5 lines) in components/dashboard/widgets/index.ts:122"}, "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-76c238276fba787a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/dashboard/widgets/NotificationsWidget.tsx:50", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/dashboard/widgets/NotificationsWidget.tsx:50"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-05aa6edfe9b7f64d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/dashboard/widgets/NeedsAttentionWidget.tsx:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/dashboard/widgets/NeedsAttentionWidget.tsx:44"}, "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-e5e3cc93a000db17", "name": "Commented-code block (7 lines) in components/dashboard/widgets/QuickLinksWidget.tsx:92", "shortDescription": {"text": "Commented-code block (7 lines) in components/dashboard/widgets/QuickLinksWidget.tsx:92"}, "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-c46139fc2698fe54", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/dashboard/widgets/OverviewStatsWidget.tsx:102", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/dashboard/widgets/OverviewStatsWidget.tsx:102"}, "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-14b34c5275961687", "name": "Commented-code block (5 lines) in components/dashboard/widgets/QuickStatsWidget.tsx:80", "shortDescription": {"text": "Commented-code block (5 lines) in components/dashboard/widgets/QuickStatsWidget.tsx:80"}, "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-8929451ca9c93de9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/dashboard/widgets/RecentActivityWidget.tsx:242", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/dashboard/widgets/RecentActivityWidget.tsx:242"}, "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-55087bf54ec541b1", "name": "Commented-code block (5 lines) in components/students/TransferCohortModal.tsx:181", "shortDescription": {"text": "Commented-code block (5 lines) in components/students/TransferCohortModal.tsx:181"}, "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-04a6422cc74999c7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/students/TransferCohortModal.tsx:190", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/students/TransferCohortModal.tsx:190"}, "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-91bd1bd2ba25f6cc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/calendar/EventDetailPanel.tsx:185", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/calendar/EventDetailPanel.tsx:185"}, "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-d676a0557520a002", "name": "Commented-code block (7 lines) in components/lab-day/EditStationModal.tsx:69", "shortDescription": {"text": "Commented-code block (7 lines) in components/lab-day/EditStationModal.tsx:69"}, "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-d59483809b1f6892", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/lab-day/EditStationModal.tsx:151", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/lab-day/EditStationModal.tsx:151"}, "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-a8c330e56dbfd536", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/lab-day/LabDayCoverageSection.tsx:51", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/lab-day/LabDayCoverageSection.tsx:51"}, "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-870e35952a67e0a1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/lab-day/DebriefSection.tsx:52", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/lab-day/DebriefSection.tsx:52"}, "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-fba8c919d9b970e9", "name": "Commented-code block (5 lines) in components/lab-day/SkillCoveragePanel.tsx:155", "shortDescription": {"text": "Commented-code block (5 lines) in components/lab-day/SkillCoveragePanel.tsx:155"}, "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-3bbda682dcf0f788", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/lab-day/LabDayPrintView.tsx:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/lab-day/LabDayPrintView.tsx:62"}, "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-83979ca87af19dca", "name": "Commented-code block (6 lines) in components/lab-day/types.ts:217", "shortDescription": {"text": "Commented-code block (6 lines) in components/lab-day/types.ts:217"}, "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-a56decb7f4a17dbf", "name": "Commented-code block (5 lines) in components/lab-day/LabDayChatInner.tsx:94", "shortDescription": {"text": "Commented-code block (5 lines) in components/lab-day/LabDayChatInner.tsx:94"}, "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-5dbd63c35fe6f5b1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/lab-day/IndividualTestingGrid.tsx:236", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/lab-day/IndividualTestingGrid.tsx:236"}, "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-68a1439b594aefd0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduling/LogMyShiftModal.tsx:87", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduling/LogMyShiftModal.tsx:87"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-893b606f5586f9b7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduling/RequestCoverageModal.tsx:92", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduling/RequestCoverageModal.tsx:92"}, "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-1511d04772752471", "name": "Commented-code block (5 lines) in components/scheduling/CoordinatorCalendarView.tsx:167", "shortDescription": {"text": "Commented-code block (5 lines) in components/scheduling/CoordinatorCalendarView.tsx:167"}, "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-33991c34691db1fa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduling/CoordinatorCalendarView.tsx:235", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduling/CoordinatorCalendarView.tsx:235"}, "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-a88ff3279e12e1e1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduling/RecurringAvailabilityModal.tsx:94", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduling/RecurringAvailabilityModal.tsx:94"}, "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-f7648611366b335f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduling/LogHoursModal.tsx:150", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduling/LogHoursModal.tsx:150"}, "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-49de5c114f5e1a92", "name": "Commented-code block (5 lines) in components/seating/Suite1Layout.tsx:34", "shortDescription": {"text": "Commented-code block (5 lines) in components/seating/Suite1Layout.tsx:34"}, "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-27b4d845588450b4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/cases/CaseEditor.tsx:381", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/cases/CaseEditor.tsx:381"}, "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-52b2ba445c76d251", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/clinical/SummativeEvaluationsSection.tsx:113", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/clinical/SummativeEvaluationsSection.tsx:113"}, "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-ec032b4ff7f691dd", "name": "Commented-code block (6 lines) in components/clinical/PreceptorsSection.tsx:133", "shortDescription": {"text": "Commented-code block (6 lines) in components/clinical/PreceptorsSection.tsx:133"}, "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-c4d7477842f88c63", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/clinical/EmploymentVerificationModal.tsx:178", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/clinical/EmploymentVerificationModal.tsx:178"}, "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-7fcd006c2fe4bd42", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/clinical/CloseoutSurveyModal.tsx:208", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/clinical/CloseoutSurveyModal.tsx:208"}, "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-0fadad7d13ff9aeb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduler/SchedulerAdmin.tsx:84", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduler/SchedulerAdmin.tsx:84"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-93edbfb3a6be091c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduler/SchedulerParticipant.tsx:111", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduler/SchedulerParticipant.tsx:111"}, "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-4398685c63faaa83", "name": "Commented-code block (5 lines) in lib/calendar-auto-sync.ts:84", "shortDescription": {"text": "Commented-code block (5 lines) in lib/calendar-auto-sync.ts:84"}, "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-9bef5ab5427c8891", "name": "Commented-code block (10 lines) in lib/calendar-availability.ts:194", "shortDescription": {"text": "Commented-code block (10 lines) in lib/calendar-availability.ts:194"}, "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-8555c29e6d699d5f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/calendar-availability.ts:65", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/calendar-availability.ts:65"}, "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-f62a6c1257448462", "name": "Commented-code block (13 lines) in lib/email.ts:466", "shortDescription": {"text": "Commented-code block (13 lines) in lib/email.ts:466"}, "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-bdac9ab330c4b0ed", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/fetch-utils.ts:4", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/fetch-utils.ts:4"}, "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-4703891eb09b9f36", "name": "Commented-code block (5 lines) in lib/auth.ts:228", "shortDescription": {"text": "Commented-code block (5 lines) in lib/auth.ts:228"}, "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-80bc484fac309ecc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/google-shared-calendar.ts:123", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/google-shared-calendar.ts:123"}, "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-2419f921a95bb4bb", "name": "Commented-code block (5 lines) in lib/scenario-export.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in lib/scenario-export.ts: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-78160a1d63eafe73", "name": "Commented-code block (5 lines) in lib/question-types.ts:4", "shortDescription": {"text": "Commented-code block (5 lines) in lib/question-types.ts: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-743a7463b5324e6d", "name": "Commented-code block (5 lines) in lib/nremt-instructions.ts:249", "shortDescription": {"text": "Commented-code block (5 lines) in lib/nremt-instructions.ts:249"}, "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-3ba1e19d807f42e4", "name": "Commented-code block (6 lines) in lib/instructor-blocks.ts:66", "shortDescription": {"text": "Commented-code block (6 lines) in lib/instructor-blocks.ts:66"}, "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-13bbefb253626a92", "name": "Commented-code block (10 lines) in lib/google-calendar.ts:330", "shortDescription": {"text": "Commented-code block (10 lines) in lib/google-calendar.ts:330"}, "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-05ff827193b1f2da", "name": "`fetch()` without try/.catch or AbortSignal \u2014 lib/google-calendar.ts:161", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/google-calendar.ts:161"}, "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-d136ec743adb046d", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (scripts/verify-calendar-scope.mjs:58)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (scripts/verify-calendar-scope.mjs:58)"}, "fullDescription": {"text": "`scripts/verify-calendar-scope.mjs:58` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-458e92c9c6ba6831", "name": "Dangling fetch: POST https://www.googleapis.com/calendar/v3/freeBusy (scripts/verify-calendar-scope.mjs:75)", "shortDescription": {"text": "Dangling fetch: POST https://www.googleapis.com/calendar/v3/freeBusy (scripts/verify-calendar-scope.mjs:75)"}, "fullDescription": {"text": "`scripts/verify-calendar-scope.mjs:75` calls `POST https://www.googleapis.com/calendar/v3/freeBusy` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.googleapis.com/calendar/v3/freebusy`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-35affc322416691f", "name": "Dangling fetch: POST https://www.googleapis.com/calendar/v3/calendars/primary/events?sendUpdates=none (scripts/verify-ca", "shortDescription": {"text": "Dangling fetch: POST https://www.googleapis.com/calendar/v3/calendars/primary/events?sendUpdates=none (scripts/verify-calendar-scope.mjs:89)"}, "fullDescription": {"text": "`scripts/verify-calendar-scope.mjs:89` calls `POST https://www.googleapis.com/calendar/v3/calendars/primary/events?sendUpdates=none` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.googleapis.com/calendar/v3/calendars/primary/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bac1b4f06a988c32", "name": "Dangling fetch: DELETE https://www.googleapis.com/calendar/v3/calendars/primary/events/${encodeURIComponent(ev.id)}?send", "shortDescription": {"text": "Dangling fetch: DELETE https://www.googleapis.com/calendar/v3/calendars/primary/events/${encodeURIComponent(ev.id)}?sendUpdates=none (scripts/verify-calendar-scope.mjs:101)"}, "fullDescription": {"text": "`scripts/verify-calendar-scope.mjs:101` calls `DELETE https://www.googleapis.com/calendar/v3/calendars/primary/events/${encodeURIComponent(ev.id)}?sendUpdates=none` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.googleapis.com/calendar/v3/calendars/primary/events/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-10e20885604aef95", "name": "Dangling fetch: POST /api/errors/log (app/error.tsx:27)", "shortDescription": {"text": "Dangling fetch: POST /api/errors/log (app/error.tsx:27)"}, "fullDescription": {"text": "`app/error.tsx:27` calls `POST /api/errors/log` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/errors/log`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-57307801355e8285", "name": "Dangling fetch: PUT /api/dashboard/layout (app/page.tsx:104)", "shortDescription": {"text": "Dangling fetch: PUT /api/dashboard/layout (app/page.tsx:104)"}, "fullDescription": {"text": "`app/page.tsx:104` calls `PUT /api/dashboard/layout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/layout`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5bb263ead9eb5faf", "name": "Dangling fetch: GET /api/user/preferences (app/page.tsx:147)", "shortDescription": {"text": "Dangling fetch: GET /api/user/preferences (app/page.tsx:147)"}, "fullDescription": {"text": "`app/page.tsx:147` calls `GET /api/user/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-35ac1f11d2a7427f", "name": "Dangling fetch: GET /api/onboarding/dashboard (app/page.tsx:148)", "shortDescription": {"text": "Dangling fetch: GET /api/onboarding/dashboard (app/page.tsx:148)"}, "fullDescription": {"text": "`app/page.tsx:148` calls `GET /api/onboarding/dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/onboarding/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-53e5a73f475019e0", "name": "Dangling fetch: PUT /api/user/preferences (app/page.tsx:185)", "shortDescription": {"text": "Dangling fetch: PUT /api/user/preferences (app/page.tsx:185)"}, "fullDescription": {"text": "`app/page.tsx:185` calls `PUT /api/user/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d35926b52d986960", "name": "Dangling fetch: DELETE /api/user/preferences (app/page.tsx:205)", "shortDescription": {"text": "Dangling fetch: DELETE /api/user/preferences (app/page.tsx:205)"}, "fullDescription": {"text": "`app/page.tsx:205` calls `DELETE /api/user/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a48221893e5c9bd0", "name": "Dangling fetch: DELETE /api/dashboard/layout (app/page.tsx:207)", "shortDescription": {"text": "Dangling fetch: DELETE /api/dashboard/layout (app/page.tsx:207)"}, "fullDescription": {"text": "`app/page.tsx:207` calls `DELETE /api/dashboard/layout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/layout`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b22ec992b59bf18", "name": "Dangling fetch: GET /api/user/preferences (app/page.tsx:208)", "shortDescription": {"text": "Dangling fetch: GET /api/user/preferences (app/page.tsx:208)"}, "fullDescription": {"text": "`app/page.tsx:208` calls `GET /api/user/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b165478cf2999cdc", "name": "Dangling fetch: DELETE /api/user/preferences (app/page.tsx:223)", "shortDescription": {"text": "Dangling fetch: DELETE /api/user/preferences (app/page.tsx:223)"}, "fullDescription": {"text": "`app/page.tsx:223` calls `DELETE /api/user/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-75c99bf797c900b3", "name": "Dangling fetch: DELETE /api/dashboard/layout (app/page.tsx:224)", "shortDescription": {"text": "Dangling fetch: DELETE /api/dashboard/layout (app/page.tsx:224)"}, "fullDescription": {"text": "`app/page.tsx:224` calls `DELETE /api/dashboard/layout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/layout`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0696cbb6ee1f2330", "name": "Dangling fetch: GET /api/user/preferences (app/page.tsx:229)", "shortDescription": {"text": "Dangling fetch: GET /api/user/preferences (app/page.tsx:229)"}, "fullDescription": {"text": "`app/page.tsx:229` calls `GET /api/user/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-75d9717cdd36fcc2", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (app/api/calendar/callback/route.ts:38)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (app/api/calendar/callback/route.ts:38)"}, "fullDescription": {"text": "`app/api/calendar/callback/route.ts:38` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2d3079bb789eb23f", "name": "Dangling fetch: GET /api/instructor/me (app/labs/page.tsx:50)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/page.tsx:50)"}, "fullDescription": {"text": "`app/labs/page.tsx:50` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a01703f91e31f3d3", "name": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/protocol-tracking/page.tsx:128)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/protocol-tracking/page.tsx:128)"}, "fullDescription": {"text": "`app/labs/protocol-tracking/page.tsx:128` calls `GET /api/lab-management/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2bd61f99853f255b", "name": "Dangling fetch: GET /api/lab-management/students?cohortId=${selectedCohort}&status=active (app/labs/protocol-tracking/pa", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${selectedCohort}&status=active (app/labs/protocol-tracking/page.tsx:143)"}, "fullDescription": {"text": "`app/labs/protocol-tracking/page.tsx:143` calls `GET /api/lab-management/students?cohortId=${selectedCohort}&status=active` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6bd05be1ed90e33b", "name": "Dangling fetch: GET /api/tracking/protocol-completions?cohortId=${selectedCohort}&limit=20 (app/labs/protocol-tracking/p", "shortDescription": {"text": "Dangling fetch: GET /api/tracking/protocol-completions?cohortId=${selectedCohort}&limit=20 (app/labs/protocol-tracking/page.tsx:157)"}, "fullDescription": {"text": "`app/labs/protocol-tracking/page.tsx:157` calls `GET /api/tracking/protocol-completions?cohortId=${selectedCohort}&limit=20` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tracking/protocol-completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e15cc79d72bf3804", "name": "Dangling fetch: GET /api/tracking/protocol-completions?cohortId=${selectedCohort} (app/labs/protocol-tracking/page.tsx:1", "shortDescription": {"text": "Dangling fetch: GET /api/tracking/protocol-completions?cohortId=${selectedCohort} (app/labs/protocol-tracking/page.tsx:171)"}, "fullDescription": {"text": "`app/labs/protocol-tracking/page.tsx:171` calls `GET /api/tracking/protocol-completions?cohortId=${selectedCohort}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tracking/protocol-completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-94ee161745c961e5", "name": "Dangling fetch: POST /api/tracking/protocol-completions (app/labs/protocol-tracking/page.tsx:208)", "shortDescription": {"text": "Dangling fetch: POST /api/tracking/protocol-completions (app/labs/protocol-tracking/page.tsx:208)"}, "fullDescription": {"text": "`app/labs/protocol-tracking/page.tsx:208` calls `POST /api/tracking/protocol-completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tracking/protocol-completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-43cbb2dcfcd9e056", "name": "Dangling fetch: GET /api/lab-management/flagged-items?${params} (app/labs/flags/page.tsx:83)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/flagged-items?${params} (app/labs/flags/page.tsx:83)"}, "fullDescription": {"text": "`app/labs/flags/page.tsx:83` calls `GET /api/lab-management/flagged-items?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/flagged-items`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2cf134844ab9e806", "name": "Dangling fetch: PATCH /api/lab-management/flagged-items (app/labs/flags/page.tsx:99)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/flagged-items (app/labs/flags/page.tsx:99)"}, "fullDescription": {"text": "`app/labs/flags/page.tsx:99` calls `PATCH /api/lab-management/flagged-items` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/flagged-items`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1bce1cc43b5ac024", "name": "Dangling fetch: POST /api/lab-management/scenario-library/clone (app/labs/scenario-library/page.tsx:241)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/scenario-library/clone (app/labs/scenario-library/page.tsx:241)"}, "fullDescription": {"text": "`app/labs/scenario-library/page.tsx:241` calls `POST /api/lab-management/scenario-library/clone` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenario-library/clone`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4153ec002f339906", "name": "Dangling fetch: POST /api/lab-management/scenario-library/ratings (app/labs/scenario-library/page.tsx:330)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/scenario-library/ratings (app/labs/scenario-library/page.tsx:330)"}, "fullDescription": {"text": "`app/labs/scenario-library/page.tsx:330` calls `POST /api/lab-management/scenario-library/ratings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenario-library/ratings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b6bcb257b1946309", "name": "Dangling fetch: POST /api/lab-management/scenario-library/tags (app/labs/scenario-library/page.tsx:433)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/scenario-library/tags (app/labs/scenario-library/page.tsx:433)"}, "fullDescription": {"text": "`app/labs/scenario-library/page.tsx:433` calls `POST /api/lab-management/scenario-library/tags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenario-library/tags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cb5545268696e006", "name": "Dangling fetch: DELETE /api/lab-management/scenario-library/tags (app/labs/scenario-library/page.tsx:451)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/scenario-library/tags (app/labs/scenario-library/page.tsx:451)"}, "fullDescription": {"text": "`app/labs/scenario-library/page.tsx:451` calls `DELETE /api/lab-management/scenario-library/tags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenario-library/tags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-693e4a09f96cf9e9", "name": "Dangling fetch: GET /api/lab-management/scenario-library?${params} (app/labs/scenario-library/page.tsx:773)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/scenario-library?${params} (app/labs/scenario-library/page.tsx:773)"}, "fullDescription": {"text": "`app/labs/scenario-library/page.tsx:773` calls `GET /api/lab-management/scenario-library?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenario-library`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-324ccdeac290bae5", "name": "Dangling fetch: GET /api/lab-management/scenario-library/tags (app/labs/scenario-library/page.tsx:789)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/scenario-library/tags (app/labs/scenario-library/page.tsx:789)"}, "fullDescription": {"text": "`app/labs/scenario-library/page.tsx:789` calls `GET /api/lab-management/scenario-library/tags` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenario-library/tags`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-89b2afc25a3fe16d", "name": "Dangling fetch: GET /api/lab-management/scenarios/${scenario.id} (app/labs/scenario-library/page.tsx:865)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/scenarios/${scenario.id} (app/labs/scenario-library/page.tsx:865)"}, "fullDescription": {"text": "`app/labs/scenario-library/page.tsx:865` calls `GET /api/lab-management/scenarios/${scenario.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-caf1fce6c352b687", "name": "Dangling fetch: POST /api/lab-management/lab-days/${station.lab_day.id}/assistance-alerts (app/labs/grade/station/[id]/p", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${station.lab_day.id}/assistance-alerts (app/labs/grade/station/[id]/page.tsx:146)"}, "fullDescription": {"text": "`app/labs/grade/station/[id]/page.tsx:146` calls `POST /api/lab-management/lab-days/${station.lab_day.id}/assistance-alerts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/assistance-alerts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3af9b61747e5a0b6", "name": "Dangling fetch: PATCH /api/lab-management/lab-days/${station.lab_day.id}/assistance-alerts (app/labs/grade/station/[id]/", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/lab-days/${station.lab_day.id}/assistance-alerts (app/labs/grade/station/[id]/page.tsx:172)"}, "fullDescription": {"text": "`app/labs/grade/station/[id]/page.tsx:172` calls `PATCH /api/lab-management/lab-days/${station.lab_day.id}/assistance-alerts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/assistance-alerts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f04e60a89e9e6b1c", "name": "Dangling fetch: GET /api/skill-sheets/${panelSheetId} (app/labs/grade/station/[id]/page.tsx:388)", "shortDescription": {"text": "Dangling fetch: GET /api/skill-sheets/${panelSheetId} (app/labs/grade/station/[id]/page.tsx:388)"}, "fullDescription": {"text": "`app/labs/grade/station/[id]/page.tsx:388` calls `GET /api/skill-sheets/${panelSheetId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7a6591b89a0c1898", "name": "Dangling fetch: GET /api/nremt-scenarios/${selectedId} (app/labs/grade/station/[id]/page.tsx:429)", "shortDescription": {"text": "Dangling fetch: GET /api/nremt-scenarios/${selectedId} (app/labs/grade/station/[id]/page.tsx:429)"}, "fullDescription": {"text": "`app/labs/grade/station/[id]/page.tsx:429` calls `GET /api/nremt-scenarios/${selectedId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/nremt-scenarios/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-320bf1dd683fdcd5", "name": "Dangling fetch: POST /api/lab-management/stations/${station.id}/scenario/rotate (app/labs/grade/station/[id]/page.tsx:48", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/stations/${station.id}/scenario/rotate (app/labs/grade/station/[id]/page.tsx:482)"}, "fullDescription": {"text": "`app/labs/grade/station/[id]/page.tsx:482` calls `POST /api/lab-management/stations/${station.id}/scenario/rotate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations/<p>/scenario/rotate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-49a87ef02acf5d8a", "name": "Dangling fetch: GET /api/lab-management/stations/${stationId} (app/labs/grade/station/[id]/page.tsx:527)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/stations/${stationId} (app/labs/grade/station/[id]/page.tsx:527)"}, "fullDescription": {"text": "`app/labs/grade/station/[id]/page.tsx:527` calls `GET /api/lab-management/stations/${stationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-261dffd556b4e655", "name": "Dangling fetch: POST /api/skill-sheets/by-skill-name/bulk (app/labs/grade/station/[id]/page.tsx:541)", "shortDescription": {"text": "Dangling fetch: POST /api/skill-sheets/by-skill-name/bulk (app/labs/grade/station/[id]/page.tsx:541)"}, "fullDescription": {"text": "`app/labs/grade/station/[id]/page.tsx:541` calls `POST /api/skill-sheets/by-skill-name/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets/by-skill-name/bulk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-683e1160c9e5ae44", "name": "Dangling fetch: GET /api/skill-sheets/by-skill-name?name=${encodeURIComponent(skillName)}&program=${encodeURIComponent(p", "shortDescription": {"text": "Dangling fetch: GET /api/skill-sheets/by-skill-name?name=${encodeURIComponent(skillName)}&program=${encodeURIComponent(program.toLowerCase())} (app/labs/grade/station/[id]/page.tsx:555)"}, "fullDescription": {"text": "`app/labs/grade/station/[id]/page.tsx:555` calls `GET /api/skill-sheets/by-skill-name?name=${encodeURIComponent(skillName)}&program=${encodeURIComponent(program.toLowerCase())}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets/by-skill-name`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f0177ef5b7778eb6", "name": "Dangling fetch: GET /api/lab-management/groups?cohortId=${cohortId}&include=members (app/labs/grade/station/[id]/page.ts", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/groups?cohortId=${cohortId}&include=members (app/labs/grade/station/[id]/page.tsx:569)"}, "fullDescription": {"text": "`app/labs/grade/station/[id]/page.tsx:569` calls `GET /api/lab-management/groups?cohortId=${cohortId}&include=members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0c8ba8b6491852e4", "name": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId} (app/labs/grade/station/[id]/page.tsx:594)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId} (app/labs/grade/station/[id]/page.tsx:594)"}, "fullDescription": {"text": "`app/labs/grade/station/[id]/page.tsx:594` calls `GET /api/lab-management/students?cohortId=${cohortId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-98c348e16289425f", "name": "Dangling fetch: POST /api/lab-management/assessments/scenario (app/labs/grade/station/[id]/page.tsx:778)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/assessments/scenario (app/labs/grade/station/[id]/page.tsx:778)"}, "fullDescription": {"text": "`app/labs/grade/station/[id]/page.tsx:778` calls `POST /api/lab-management/assessments/scenario` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/assessments/scenario`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-27062ee2fc06e20d", "name": "Dangling fetch: POST /api/lab-management/team-leads (app/labs/grade/station/[id]/page.tsx:787)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/team-leads (app/labs/grade/station/[id]/page.tsx:787)"}, "fullDescription": {"text": "`app/labs/grade/station/[id]/page.tsx:787` calls `POST /api/lab-management/team-leads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/team-leads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-76ecd4a59ec56fe8", "name": "Dangling fetch: POST /api/lab-management/assessments/scenario/send-email (app/labs/grade/station/[id]/page.tsx:814)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/assessments/scenario/send-email (app/labs/grade/station/[id]/page.tsx:814)"}, "fullDescription": {"text": "`app/labs/grade/station/[id]/page.tsx:814` calls `POST /api/lab-management/assessments/scenario/send-email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/assessments/scenario/send-email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-63a1af16cba6845a", "name": "Dangling fetch: POST /api/lab-management/assessments/scenario (app/labs/grade/station/[id]/page.tsx:951)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/assessments/scenario (app/labs/grade/station/[id]/page.tsx:951)"}, "fullDescription": {"text": "`app/labs/grade/station/[id]/page.tsx:951` calls `POST /api/lab-management/assessments/scenario` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/assessments/scenario`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b476b1c163a74536", "name": "Dangling fetch: GET /api/instructor/me (app/labs/groups/page.tsx:340)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/groups/page.tsx:340)"}, "fullDescription": {"text": "`app/labs/groups/page.tsx:340` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0023c551d4a9039b", "name": "Dangling fetch: GET /api/lab-management/cohorts?status=active (app/labs/groups/page.tsx:356)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?status=active (app/labs/groups/page.tsx:356)"}, "fullDescription": {"text": "`app/labs/groups/page.tsx:356` calls `GET /api/lab-management/cohorts?status=active` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e2d683d53acfdeea", "name": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/labs/groups/page.tsx:376)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/labs/groups/page.tsx:376)"}, "fullDescription": {"text": "`app/labs/groups/page.tsx:376` calls `GET /api/lab-management/students?cohortId=${cohortId}&status=active` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7d84f65b12b9fd6d", "name": "Dangling fetch: GET /api/lab-management/groups?cohortId=${cohortId}&includeHistory=true (app/labs/groups/page.tsx:382)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/groups?cohortId=${cohortId}&includeHistory=true (app/labs/groups/page.tsx:382)"}, "fullDescription": {"text": "`app/labs/groups/page.tsx:382` calls `GET /api/lab-management/groups?cohortId=${cohortId}&includeHistory=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26b43741c123ded4", "name": "Dangling fetch: GET /api/lab-management/groups/${group.id}/members (app/labs/groups/page.tsx:390)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/groups/${group.id}/members (app/labs/groups/page.tsx:390)"}, "fullDescription": {"text": "`app/labs/groups/page.tsx:390` calls `GET /api/lab-management/groups/${group.id}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups/<p>/members`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7ba243ee92e25f7d", "name": "Dangling fetch: PUT /api/lab-management/groups (app/labs/groups/page.tsx:484)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/groups (app/labs/groups/page.tsx:484)"}, "fullDescription": {"text": "`app/labs/groups/page.tsx:484` calls `PUT /api/lab-management/groups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-920ead0012e84c3d", "name": "Dangling fetch: DELETE /api/lab-management/groups/${fromId}/members?studentId=${studentToMove.id} (app/labs/groups/page.", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/groups/${fromId}/members?studentId=${studentToMove.id} (app/labs/groups/page.tsx:537)"}, "fullDescription": {"text": "`app/labs/groups/page.tsx:537` calls `DELETE /api/lab-management/groups/${fromId}/members?studentId=${studentToMove.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups/<p>/members`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3035f2f4aa727cd8", "name": "Dangling fetch: PUT /api/lab-management/groups (app/labs/groups/page.tsx:542)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/groups (app/labs/groups/page.tsx:542)"}, "fullDescription": {"text": "`app/labs/groups/page.tsx:542` calls `PUT /api/lab-management/groups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8ad4ee0609b04fb5", "name": "Dangling fetch: GET /api/lab-management/groups?cohortId=${selectedCohortId}&includeHistory=true (app/labs/groups/page.ts", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/groups?cohortId=${selectedCohortId}&includeHistory=true (app/labs/groups/page.tsx:564)"}, "fullDescription": {"text": "`app/labs/groups/page.tsx:564` calls `GET /api/lab-management/groups?cohortId=${selectedCohortId}&includeHistory=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5f820ca7b391fe64", "name": "Dangling fetch: POST /api/lab-management/groups (app/labs/groups/page.tsx:577)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/groups (app/labs/groups/page.tsx:577)"}, "fullDescription": {"text": "`app/labs/groups/page.tsx:577` calls `POST /api/lab-management/groups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bd9d549312dbcd4a", "name": "Dangling fetch: DELETE /api/lab-management/groups/${groupId} (app/labs/groups/page.tsx:609)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/groups/${groupId} (app/labs/groups/page.tsx:609)"}, "fullDescription": {"text": "`app/labs/groups/page.tsx:609` calls `DELETE /api/lab-management/groups/${groupId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c2139542b9b4cd6d", "name": "Dangling fetch: PUT /api/lab-management/groups/${groupId} (app/labs/groups/page.tsx:627)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/groups/${groupId} (app/labs/groups/page.tsx:627)"}, "fullDescription": {"text": "`app/labs/groups/page.tsx:627` calls `PUT /api/lab-management/groups/${groupId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4bb03f305cfb25f6", "name": "Dangling fetch: PUT /api/lab-management/groups (app/labs/groups/page.tsx:656)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/groups (app/labs/groups/page.tsx:656)"}, "fullDescription": {"text": "`app/labs/groups/page.tsx:656` calls `PUT /api/lab-management/groups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bbf562e9f66e0300", "name": "Dangling fetch: PUT /api/lab-management/groups (app/labs/groups/page.tsx:699)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/groups (app/labs/groups/page.tsx:699)"}, "fullDescription": {"text": "`app/labs/groups/page.tsx:699` calls `PUT /api/lab-management/groups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7ae84233e9fc313e", "name": "Dangling fetch: PUT /api/lab-management/groups/${group.id}/members (app/labs/groups/page.tsx:733)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/groups/${group.id}/members (app/labs/groups/page.tsx:733)"}, "fullDescription": {"text": "`app/labs/groups/page.tsx:733` calls `PUT /api/lab-management/groups/${group.id}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups/<p>/members`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7a2783a706063b02", "name": "Dangling fetch: GET /api/lab-management/ce-requirements (app/labs/my-certifications/CETracker.tsx:79)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/ce-requirements (app/labs/my-certifications/CETracker.tsx:79)"}, "fullDescription": {"text": "`app/labs/my-certifications/CETracker.tsx:79` calls `GET /api/lab-management/ce-requirements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/ce-requirements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5322d190bc1c7065", "name": "Dangling fetch: GET /api/lab-management/ce-records?certificationId=${certificationId} (app/labs/my-certifications/CETrac", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/ce-records?certificationId=${certificationId} (app/labs/my-certifications/CETracker.tsx:93)"}, "fullDescription": {"text": "`app/labs/my-certifications/CETracker.tsx:93` calls `GET /api/lab-management/ce-records?certificationId=${certificationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/ce-records`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b0cfcde2ea6fc2c5", "name": "Dangling fetch: PATCH /api/lab-management/certifications/${certificationId} (app/labs/my-certifications/CETracker.tsx:10", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/certifications/${certificationId} (app/labs/my-certifications/CETracker.tsx:108)"}, "fullDescription": {"text": "`app/labs/my-certifications/CETracker.tsx:108` calls `PATCH /api/lab-management/certifications/${certificationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/certifications/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ef1d1d9e2023c2cc", "name": "Dangling fetch: POST /api/lab-management/ce-records (app/labs/my-certifications/CETracker.tsx:146)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/ce-records (app/labs/my-certifications/CETracker.tsx:146)"}, "fullDescription": {"text": "`app/labs/my-certifications/CETracker.tsx:146` calls `POST /api/lab-management/ce-records` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/ce-records`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a783ed53f55d3520", "name": "Dangling fetch: DELETE /api/lab-management/ce-records/${id} (app/labs/my-certifications/CETracker.tsx:173)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/ce-records/${id} (app/labs/my-certifications/CETracker.tsx:173)"}, "fullDescription": {"text": "`app/labs/my-certifications/CETracker.tsx:173` calls `DELETE /api/lab-management/ce-records/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/ce-records/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e981120b449cb32f", "name": "Dangling fetch: PATCH /api/lab-management/certifications/${editingCert.id} (app/labs/my-certifications/CertList.tsx:186)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/certifications/${editingCert.id} (app/labs/my-certifications/CertList.tsx:186)"}, "fullDescription": {"text": "`app/labs/my-certifications/CertList.tsx:186` calls `PATCH /api/lab-management/certifications/${editingCert.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/certifications/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0524eb636ec61ac5", "name": "Dangling fetch: POST /api/lab-management/certifications (app/labs/my-certifications/CertList.tsx:206)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/certifications (app/labs/my-certifications/CertList.tsx:206)"}, "fullDescription": {"text": "`app/labs/my-certifications/CertList.tsx:206` calls `POST /api/lab-management/certifications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/certifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b3660a5489c3ea8e", "name": "Dangling fetch: PATCH /api/lab-management/certifications/${data.certification.id} (app/labs/my-certifications/CertList.t", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/certifications/${data.certification.id} (app/labs/my-certifications/CertList.tsx:224)"}, "fullDescription": {"text": "`app/labs/my-certifications/CertList.tsx:224` calls `PATCH /api/lab-management/certifications/${data.certification.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/certifications/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-47fe52c69c512b20", "name": "Dangling fetch: DELETE /api/lab-management/certifications/${id} (app/labs/my-certifications/CertList.tsx:262)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/certifications/${id} (app/labs/my-certifications/CertList.tsx:262)"}, "fullDescription": {"text": "`app/labs/my-certifications/CertList.tsx:262` calls `DELETE /api/lab-management/certifications/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/certifications/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-70a75eff106f5015", "name": "Dangling fetch: PATCH /api/lab-management/certifications/${editingCert.id} (app/labs/my-certifications/CertList.tsx:281)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/certifications/${editingCert.id} (app/labs/my-certifications/CertList.tsx:281)"}, "fullDescription": {"text": "`app/labs/my-certifications/CertList.tsx:281` calls `PATCH /api/lab-management/certifications/${editingCert.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/certifications/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b5002a259884eda8", "name": "Dangling fetch: GET /api/lab-management/users (app/labs/my-certifications/page.tsx:52)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/users (app/labs/my-certifications/page.tsx:52)"}, "fullDescription": {"text": "`app/labs/my-certifications/page.tsx:52` calls `GET /api/lab-management/users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/users`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e7132aa3c4a27a3b", "name": "Dangling fetch: GET /api/lab-management/certifications?instructorId=${currentUser.id} (app/labs/my-certifications/page.t", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/certifications?instructorId=${currentUser.id} (app/labs/my-certifications/page.tsx:64)"}, "fullDescription": {"text": "`app/labs/my-certifications/page.tsx:64` calls `GET /api/lab-management/certifications?instructorId=${currentUser.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/certifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-13c3b2e835ced8e2", "name": "Dangling fetch: GET /api/lab-management/templates (app/labs/templates/page.tsx:116)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/templates (app/labs/templates/page.tsx:116)"}, "fullDescription": {"text": "`app/labs/templates/page.tsx:116` calls `GET /api/lab-management/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-97480833d158bcab", "name": "Dangling fetch: DELETE /api/lab-management/templates/${deleteId} (app/labs/templates/page.tsx:138)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/templates/${deleteId} (app/labs/templates/page.tsx:138)"}, "fullDescription": {"text": "`app/labs/templates/page.tsx:138` calls `DELETE /api/lab-management/templates/${deleteId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/templates/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5372d323539f9cf1", "name": "Dangling fetch: PUT /api/lab-management/templates/${editTemplate.id} (app/labs/templates/page.tsx:166)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/templates/${editTemplate.id} (app/labs/templates/page.tsx:166)"}, "fullDescription": {"text": "`app/labs/templates/page.tsx:166` calls `PUT /api/lab-management/templates/${editTemplate.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/templates/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-66b8c7cb19262d50", "name": "Dangling fetch: GET /api/lab-management/weekly-templates (app/labs/templates/weekly/page.tsx:180)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/weekly-templates (app/labs/templates/weekly/page.tsx:180)"}, "fullDescription": {"text": "`app/labs/templates/weekly/page.tsx:180` calls `GET /api/lab-management/weekly-templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/weekly-templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b440e591dae712ac", "name": "Dangling fetch: GET /api/lab-management/programs (app/labs/templates/weekly/page.tsx:181)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/programs (app/labs/templates/weekly/page.tsx:181)"}, "fullDescription": {"text": "`app/labs/templates/weekly/page.tsx:181` calls `GET /api/lab-management/programs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/programs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8a6b6cd399150e37", "name": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/templates/weekly/page.tsx:182)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/templates/weekly/page.tsx:182)"}, "fullDescription": {"text": "`app/labs/templates/weekly/page.tsx:182` calls `GET /api/lab-management/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83bb237bd5638f86", "name": "Dangling fetch: GET /api/lab-management/scenarios?limit=100 (app/labs/templates/weekly/page.tsx:183)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/scenarios?limit=100 (app/labs/templates/weekly/page.tsx:183)"}, "fullDescription": {"text": "`app/labs/templates/weekly/page.tsx:183` calls `GET /api/lab-management/scenarios?limit=100` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-07064d72ab5824e2", "name": "Dangling fetch: GET /api/lab-management/weekly-templates (app/labs/templates/weekly/page.tsx:315)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/weekly-templates (app/labs/templates/weekly/page.tsx:315)"}, "fullDescription": {"text": "`app/labs/templates/weekly/page.tsx:315` calls `GET /api/lab-management/weekly-templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/weekly-templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c3113fc40b192017", "name": "Dangling fetch: DELETE /api/lab-management/weekly-templates?id=${deleteId} (app/labs/templates/weekly/page.tsx:345)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/weekly-templates?id=${deleteId} (app/labs/templates/weekly/page.tsx:345)"}, "fullDescription": {"text": "`app/labs/templates/weekly/page.tsx:345` calls `DELETE /api/lab-management/weekly-templates?id=${deleteId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/weekly-templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b53e713db938ecb", "name": "Dangling fetch: POST /api/lab-management/weekly-templates/generate (app/labs/templates/weekly/page.tsx:374)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/weekly-templates/generate (app/labs/templates/weekly/page.tsx:374)"}, "fullDescription": {"text": "`app/labs/templates/weekly/page.tsx:374` calls `POST /api/lab-management/weekly-templates/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/weekly-templates/generate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-afbe684bd1bd9ead", "name": "Dangling fetch: GET /api/lab-management/template-reviews (app/labs/templates/review/page.tsx:137)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/template-reviews (app/labs/templates/review/page.tsx:137)"}, "fullDescription": {"text": "`app/labs/templates/review/page.tsx:137` calls `GET /api/lab-management/template-reviews` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/template-reviews`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7546a3d6ab0e41f7", "name": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/templates/review/page.tsx:138)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/templates/review/page.tsx:138)"}, "fullDescription": {"text": "`app/labs/templates/review/page.tsx:138` calls `GET /api/lab-management/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f1337b400f27c590", "name": "Dangling fetch: GET /api/lab-management/instructors (app/labs/templates/review/page.tsx:139)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/instructors (app/labs/templates/review/page.tsx:139)"}, "fullDescription": {"text": "`app/labs/templates/review/page.tsx:139` calls `GET /api/lab-management/instructors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/instructors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-acb269b9a37fb2bb", "name": "Dangling fetch: GET /api/lab-management/lab-days?cohortId=${formCohortId}&limit=100 (app/labs/templates/review/page.tsx:", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days?cohortId=${formCohortId}&limit=100 (app/labs/templates/review/page.tsx:173)"}, "fullDescription": {"text": "`app/labs/templates/review/page.tsx:173` calls `GET /api/lab-management/lab-days?cohortId=${formCohortId}&limit=100` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a604ec9424c26f4f", "name": "Dangling fetch: POST /api/lab-management/template-reviews (app/labs/templates/review/page.tsx:203)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/template-reviews (app/labs/templates/review/page.tsx:203)"}, "fullDescription": {"text": "`app/labs/templates/review/page.tsx:203` calls `POST /api/lab-management/template-reviews` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/template-reviews`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e0cf8496577536aa", "name": "Dangling fetch: GET /api/lab-management/template-reviews/${reviewId} (app/labs/templates/review/[id]/page.tsx:147)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/template-reviews/${reviewId} (app/labs/templates/review/[id]/page.tsx:147)"}, "fullDescription": {"text": "`app/labs/templates/review/[id]/page.tsx:147` calls `GET /api/lab-management/template-reviews/${reviewId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/template-reviews/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0962a42e037a8375", "name": "Dangling fetch: POST /api/lab-management/template-reviews/${reviewId}/finalize (app/labs/templates/review/[id]/page.tsx:", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/template-reviews/${reviewId}/finalize (app/labs/templates/review/[id]/page.tsx:170)"}, "fullDescription": {"text": "`app/labs/templates/review/[id]/page.tsx:170` calls `POST /api/lab-management/template-reviews/${reviewId}/finalize` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/template-reviews/<p>/finalize`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-11f8b2444948d589", "name": "Dangling fetch: GET /api/lab-management/template-reviews/${reviewId}/items/${itemId} (app/labs/templates/review/[id]/ite", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/template-reviews/${reviewId}/items/${itemId} (app/labs/templates/review/[id]/item/[itemId]/page.tsx:191)"}, "fullDescription": {"text": "`app/labs/templates/review/[id]/item/[itemId]/page.tsx:191` calls `GET /api/lab-management/template-reviews/${reviewId}/items/${itemId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/template-reviews/<p>/items/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5c83894de415f72f", "name": "Dangling fetch: GET /api/lab-management/template-reviews/${reviewId} (app/labs/templates/review/[id]/item/[itemId]/page.", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/template-reviews/${reviewId} (app/labs/templates/review/[id]/item/[itemId]/page.tsx:192)"}, "fullDescription": {"text": "`app/labs/templates/review/[id]/item/[itemId]/page.tsx:192` calls `GET /api/lab-management/template-reviews/${reviewId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/template-reviews/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e7fe2b0d40d5c4c3", "name": "Dangling fetch: PUT /api/lab-management/template-reviews/${reviewId}/items/${itemId} (app/labs/templates/review/[id]/ite", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/template-reviews/${reviewId}/items/${itemId} (app/labs/templates/review/[id]/item/[itemId]/page.tsx:241)"}, "fullDescription": {"text": "`app/labs/templates/review/[id]/item/[itemId]/page.tsx:241` calls `PUT /api/lab-management/template-reviews/${reviewId}/items/${itemId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/template-reviews/<p>/items/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-862b75cc05018886", "name": "Dangling fetch: PUT /api/lab-management/template-reviews/${reviewId}/items/${itemId} (app/labs/templates/review/[id]/ite", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/template-reviews/${reviewId}/items/${itemId} (app/labs/templates/review/[id]/item/[itemId]/page.tsx:274)"}, "fullDescription": {"text": "`app/labs/templates/review/[id]/item/[itemId]/page.tsx:274` calls `PUT /api/lab-management/template-reviews/${reviewId}/items/${itemId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/template-reviews/<p>/items/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4efa8fbb7596de43", "name": "Dangling fetch: POST /api/lab-management/template-reviews/${reviewId}/items/${itemId}/comments (app/labs/templates/revie", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/template-reviews/${reviewId}/items/${itemId}/comments (app/labs/templates/review/[id]/item/[itemId]/page.tsx:302)"}, "fullDescription": {"text": "`app/labs/templates/review/[id]/item/[itemId]/page.tsx:302` calls `POST /api/lab-management/template-reviews/${reviewId}/items/${itemId}/comments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/template-reviews/<p>/items/<p>/comments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d2262a7b4595819", "name": "Dangling fetch: GET /api/instructor/me (app/labs/stations/log/page.tsx:155)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/stations/log/page.tsx:155)"}, "fullDescription": {"text": "`app/labs/stations/log/page.tsx:155` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7aadabfa51c11e3c", "name": "Dangling fetch: GET /api/stations/pool?withStats=true&active=true (app/labs/stations/log/page.tsx:168)", "shortDescription": {"text": "Dangling fetch: GET /api/stations/pool?withStats=true&active=true (app/labs/stations/log/page.tsx:168)"}, "fullDescription": {"text": "`app/labs/stations/log/page.tsx:168` calls `GET /api/stations/pool?withStats=true&active=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stations/pool`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5854605c46b3bbc7", "name": "Dangling fetch: GET /api/lab-management/cohorts?active=true (app/labs/stations/log/page.tsx:181)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?active=true (app/labs/stations/log/page.tsx:181)"}, "fullDescription": {"text": "`app/labs/stations/log/page.tsx:181` calls `GET /api/lab-management/cohorts?active=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d9784b26bda8a16", "name": "Dangling fetch: GET /api/stations/pool/favorites (app/labs/stations/log/page.tsx:193)", "shortDescription": {"text": "Dangling fetch: GET /api/stations/pool/favorites (app/labs/stations/log/page.tsx:193)"}, "fullDescription": {"text": "`app/labs/stations/log/page.tsx:193` calls `GET /api/stations/pool/favorites` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stations/pool/favorites`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6b82e8b1031ce502", "name": "Dangling fetch: GET /api/lab-management/students?${studentParams} (app/labs/stations/log/page.tsx:215)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?${studentParams} (app/labs/stations/log/page.tsx:215)"}, "fullDescription": {"text": "`app/labs/stations/log/page.tsx:215` calls `GET /api/lab-management/students?${studentParams}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4476e58c52f46977", "name": "Dangling fetch: GET /api/stations/completions?stationId=${selectedStation.id} (app/labs/stations/log/page.tsx:225)", "shortDescription": {"text": "Dangling fetch: GET /api/stations/completions?stationId=${selectedStation.id} (app/labs/stations/log/page.tsx:225)"}, "fullDescription": {"text": "`app/labs/stations/log/page.tsx:225` calls `GET /api/stations/completions?stationId=${selectedStation.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stations/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2593bfebf058e365", "name": "Dangling fetch: POST /api/stations/completions (app/labs/stations/log/page.tsx:259)", "shortDescription": {"text": "Dangling fetch: POST /api/stations/completions (app/labs/stations/log/page.tsx:259)"}, "fullDescription": {"text": "`app/labs/stations/log/page.tsx:259` calls `POST /api/stations/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stations/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-21f8695614f0804b", "name": "Dangling fetch: GET /api/instructor/me (app/labs/stations/pool/page.tsx:146)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/stations/pool/page.tsx:146)"}, "fullDescription": {"text": "`app/labs/stations/pool/page.tsx:146` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3aa222a03918f761", "name": "Dangling fetch: GET /api/lab-management/cohorts?active=true (app/labs/stations/pool/page.tsx:158)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?active=true (app/labs/stations/pool/page.tsx:158)"}, "fullDescription": {"text": "`app/labs/stations/pool/page.tsx:158` calls `GET /api/lab-management/cohorts?active=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-788d77e72ab8b5ae", "name": "Dangling fetch: GET /api/stations/pool?${params} (app/labs/stations/pool/page.tsx:176)", "shortDescription": {"text": "Dangling fetch: GET /api/stations/pool?${params} (app/labs/stations/pool/page.tsx:176)"}, "fullDescription": {"text": "`app/labs/stations/pool/page.tsx:176` calls `GET /api/stations/pool?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stations/pool`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c3e7d9a1dbec172", "name": "Dangling fetch: GET /api/stations/pool/favorites (app/labs/stations/pool/page.tsx:189)", "shortDescription": {"text": "Dangling fetch: GET /api/stations/pool/favorites (app/labs/stations/pool/page.tsx:189)"}, "fullDescription": {"text": "`app/labs/stations/pool/page.tsx:189` calls `GET /api/stations/pool/favorites` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stations/pool/favorites`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bf53d57b294f9e07", "name": "Dangling fetch: DELETE /api/stations/pool/favorites?station_id=${stationId} (app/labs/stations/pool/page.tsx:214)", "shortDescription": {"text": "Dangling fetch: DELETE /api/stations/pool/favorites?station_id=${stationId} (app/labs/stations/pool/page.tsx:214)"}, "fullDescription": {"text": "`app/labs/stations/pool/page.tsx:214` calls `DELETE /api/stations/pool/favorites?station_id=${stationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stations/pool/favorites`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b4ea40fb5bf321b2", "name": "Dangling fetch: POST /api/stations/pool/favorites (app/labs/stations/pool/page.tsx:218)", "shortDescription": {"text": "Dangling fetch: POST /api/stations/pool/favorites (app/labs/stations/pool/page.tsx:218)"}, "fullDescription": {"text": "`app/labs/stations/pool/page.tsx:218` calls `POST /api/stations/pool/favorites` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stations/pool/favorites`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26af980e35ce4ad4", "name": "Dangling fetch: DELETE /api/stations/pool/${station.id} (app/labs/stations/pool/page.tsx:300)", "shortDescription": {"text": "Dangling fetch: DELETE /api/stations/pool/${station.id} (app/labs/stations/pool/page.tsx:300)"}, "fullDescription": {"text": "`app/labs/stations/pool/page.tsx:300` calls `DELETE /api/stations/pool/${station.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stations/pool/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-452c9da3c1e482a6", "name": "Dangling fetch: GET /api/lab-management/scenarios/${id} (app/labs/scenarios/page.tsx:129)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/scenarios/${id} (app/labs/scenarios/page.tsx:129)"}, "fullDescription": {"text": "`app/labs/scenarios/page.tsx:129` calls `GET /api/lab-management/scenarios/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c5ebfe8346e18dd9", "name": "Dangling fetch: GET /api/instructor/me (app/labs/scenarios/page.tsx:174)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/scenarios/page.tsx:174)"}, "fullDescription": {"text": "`app/labs/scenarios/page.tsx:174` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3822379da7268d1c", "name": "Dangling fetch: GET /api/lab-management/scenarios/favorites (app/labs/scenarios/page.tsx:191)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/scenarios/favorites (app/labs/scenarios/page.tsx:191)"}, "fullDescription": {"text": "`app/labs/scenarios/page.tsx:191` calls `GET /api/lab-management/scenarios/favorites` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios/favorites`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b77821e1ae286f38", "name": "Dangling fetch: GET /api/lab-management/scenarios/favorites (app/labs/scenarios/page.tsx:215)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/scenarios/favorites (app/labs/scenarios/page.tsx:215)"}, "fullDescription": {"text": "`app/labs/scenarios/page.tsx:215` calls `GET /api/lab-management/scenarios/favorites` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios/favorites`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-953e91698ebd141c", "name": "Dangling fetch: GET /api/lab-management/scenarios/favorites (app/labs/scenarios/page.tsx:322)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/scenarios/favorites (app/labs/scenarios/page.tsx:322)"}, "fullDescription": {"text": "`app/labs/scenarios/page.tsx:322` calls `GET /api/lab-management/scenarios/favorites` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios/favorites`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-52638ef058028916", "name": "Dangling fetch: GET /api/lab-management/scenarios/${scenarioId} (app/labs/scenarios/[id]/page.tsx:846)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/scenarios/${scenarioId} (app/labs/scenarios/[id]/page.tsx:846)"}, "fullDescription": {"text": "`app/labs/scenarios/[id]/page.tsx:846` calls `GET /api/lab-management/scenarios/${scenarioId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8ec68816dfa6adf0", "name": "Dangling fetch: POST /api/lab-management/scenarios/${scenarioId}/duplicate (app/labs/scenarios/[id]/page.tsx:1173)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/scenarios/${scenarioId}/duplicate (app/labs/scenarios/[id]/page.tsx:1173)"}, "fullDescription": {"text": "`app/labs/scenarios/[id]/page.tsx:1173` calls `POST /api/lab-management/scenarios/${scenarioId}/duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios/<p>/duplicate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e56aee35169049ab", "name": "Dangling fetch: PATCH /api/lab-management/scenarios/${scenarioId} (app/labs/scenarios/[id]/page.tsx:1259)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/scenarios/${scenarioId} (app/labs/scenarios/[id]/page.tsx:1259)"}, "fullDescription": {"text": "`app/labs/scenarios/[id]/page.tsx:1259` calls `PATCH /api/lab-management/scenarios/${scenarioId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bb5cba70e17670d2", "name": "Dangling fetch: POST /api/admin/scenarios/transform (app/labs/scenarios/[id]/page.tsx:1328)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/scenarios/transform (app/labs/scenarios/[id]/page.tsx:1328)"}, "fullDescription": {"text": "`app/labs/scenarios/[id]/page.tsx:1328` calls `POST /api/admin/scenarios/transform` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scenarios/transform`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a19986d40410d3f3", "name": "Dangling fetch: GET /api/lab-management/scenarios/${scenarioId} (app/labs/scenarios/[id]/page.tsx:1403)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/scenarios/${scenarioId} (app/labs/scenarios/[id]/page.tsx:1403)"}, "fullDescription": {"text": "`app/labs/scenarios/[id]/page.tsx:1403` calls `GET /api/lab-management/scenarios/${scenarioId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-50b078d891af55bd", "name": "Dangling fetch: POST /api/lab-management/scenarios/${scenarioId}/versions (app/labs/scenarios/[id]/page.tsx:1407)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/scenarios/${scenarioId}/versions (app/labs/scenarios/[id]/page.tsx:1407)"}, "fullDescription": {"text": "`app/labs/scenarios/[id]/page.tsx:1407` calls `POST /api/lab-management/scenarios/${scenarioId}/versions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios/<p>/versions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2c60eaac2c16c2ec", "name": "Dangling fetch: GET /api/instructor/me (app/labs/scenarios/new/page.tsx:793)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/scenarios/new/page.tsx:793)"}, "fullDescription": {"text": "`app/labs/scenarios/new/page.tsx:793` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2b482db51fac38ba", "name": "Dangling fetch: GET /api/lab-management/scenarios/${scenarioId} (app/labs/scenarios/new/page.tsx:816)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/scenarios/${scenarioId} (app/labs/scenarios/new/page.tsx:816)"}, "fullDescription": {"text": "`app/labs/scenarios/new/page.tsx:816` calls `GET /api/lab-management/scenarios/${scenarioId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2dc0a9a13a84752e", "name": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/debrief-review/page.tsx:91)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/debrief-review/page.tsx:91)"}, "fullDescription": {"text": "`app/labs/debrief-review/page.tsx:91` calls `GET /api/lab-management/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ed73288b356f223", "name": "Dangling fetch: GET /api/lab-management/debrief-notes?${params.toString()} (app/labs/debrief-review/page.tsx:112)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/debrief-notes?${params.toString()} (app/labs/debrief-review/page.tsx:112)"}, "fullDescription": {"text": "`app/labs/debrief-review/page.tsx:112` calls `GET /api/lab-management/debrief-notes?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/debrief-notes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a217acca26e4a92d", "name": "Dangling fetch: GET /api/instructor/me (app/labs/peer-evals/page.tsx:155)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/peer-evals/page.tsx:155)"}, "fullDescription": {"text": "`app/labs/peer-evals/page.tsx:155` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e4242210f27b4d6", "name": "Dangling fetch: GET /api/peer-evaluations/aggregate?${query.toString()} (app/labs/peer-evals/page.tsx:182)", "shortDescription": {"text": "Dangling fetch: GET /api/peer-evaluations/aggregate?${query.toString()} (app/labs/peer-evals/page.tsx:182)"}, "fullDescription": {"text": "`app/labs/peer-evals/page.tsx:182` calls `GET /api/peer-evaluations/aggregate?${query.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/peer-evaluations/aggregate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-239b4f3c85690183", "name": "Dangling fetch: GET /api/lab-management/skill-drills (app/labs/skill-drills/page.tsx:270)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skill-drills (app/labs/skill-drills/page.tsx:270)"}, "fullDescription": {"text": "`app/labs/skill-drills/page.tsx:270` calls `GET /api/lab-management/skill-drills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-drills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-46f5b6517ada5ca9", "name": "Dangling fetch: GET /api/lab-management/skill-drills/${drill.id}/documents (app/labs/skill-drills/page.tsx:290)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skill-drills/${drill.id}/documents (app/labs/skill-drills/page.tsx:290)"}, "fullDescription": {"text": "`app/labs/skill-drills/page.tsx:290` calls `GET /api/lab-management/skill-drills/${drill.id}/documents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-drills/<p>/documents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1dfe7a0801198910", "name": "Dangling fetch: GET /api/lab-management/skill-drills/${drillId}/documents (app/labs/skill-drills/page.tsx:304)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skill-drills/${drillId}/documents (app/labs/skill-drills/page.tsx:304)"}, "fullDescription": {"text": "`app/labs/skill-drills/page.tsx:304` calls `GET /api/lab-management/skill-drills/${drillId}/documents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-drills/<p>/documents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-72bd2a2ebde2f6ae", "name": "Dangling fetch: DELETE /api/lab-management/skill-drills/${id} (app/labs/skill-drills/page.tsx:415)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/skill-drills/${id} (app/labs/skill-drills/page.tsx:415)"}, "fullDescription": {"text": "`app/labs/skill-drills/page.tsx:415` calls `DELETE /api/lab-management/skill-drills/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-drills/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b8bd87048768c924", "name": "Dangling fetch: POST /api/admin/skill-drills/seed (app/labs/skill-drills/page.tsx:437)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/skill-drills/seed (app/labs/skill-drills/page.tsx:437)"}, "fullDescription": {"text": "`app/labs/skill-drills/page.tsx:437` calls `POST /api/admin/skill-drills/seed` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/skill-drills/seed`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8a876d755a38e5c9", "name": "Dangling fetch: POST /api/lab-management/skill-drills/${editingDrill.id}/documents (app/labs/skill-drills/page.tsx:492)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/skill-drills/${editingDrill.id}/documents (app/labs/skill-drills/page.tsx:492)"}, "fullDescription": {"text": "`app/labs/skill-drills/page.tsx:492` calls `POST /api/lab-management/skill-drills/${editingDrill.id}/documents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-drills/<p>/documents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b1d68401c42f1579", "name": "Dangling fetch: POST /api/lab-management/skill-drills/${editingDrill.id}/documents (app/labs/skill-drills/page.tsx:532)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/skill-drills/${editingDrill.id}/documents (app/labs/skill-drills/page.tsx:532)"}, "fullDescription": {"text": "`app/labs/skill-drills/page.tsx:532` calls `POST /api/lab-management/skill-drills/${editingDrill.id}/documents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-drills/<p>/documents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fd7369dbeb483db9", "name": "Dangling fetch: DELETE /api/lab-management/skill-drills/${editingDrill.id}/documents?documentId=${docId} (app/labs/skill", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/skill-drills/${editingDrill.id}/documents?documentId=${docId} (app/labs/skill-drills/page.tsx:558)"}, "fullDescription": {"text": "`app/labs/skill-drills/page.tsx:558` calls `DELETE /api/lab-management/skill-drills/${editingDrill.id}/documents?documentId=${docId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-drills/<p>/documents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-013bca1ed0028aa0", "name": "Dangling fetch: GET /api/lab-management/skill-drills/${id} (app/labs/skill-drills/[id]/page.tsx:59)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skill-drills/${id} (app/labs/skill-drills/[id]/page.tsx:59)"}, "fullDescription": {"text": "`app/labs/skill-drills/[id]/page.tsx:59` calls `GET /api/lab-management/skill-drills/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-drills/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a1b6081f13ef9e7c", "name": "Dangling fetch: GET /api/lab-management/skills?includeDocuments=true (app/labs/skill-sheets/page.tsx:104)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skills?includeDocuments=true (app/labs/skill-sheets/page.tsx:104)"}, "fullDescription": {"text": "`app/labs/skill-sheets/page.tsx:104` calls `GET /api/lab-management/skills?includeDocuments=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6b78d5749066e34e", "name": "Dangling fetch: POST /api/lab-management/skills/${addDocSkill.id}/documents (app/labs/skill-sheets/page.tsx:162)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/skills/${addDocSkill.id}/documents (app/labs/skill-sheets/page.tsx:162)"}, "fullDescription": {"text": "`app/labs/skill-sheets/page.tsx:162` calls `POST /api/lab-management/skills/${addDocSkill.id}/documents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skills/<p>/documents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f7fdb73819777e46", "name": "Dangling fetch: POST /api/lab-management/skills/${addDocSkill.id}/documents (app/labs/skill-sheets/page.tsx:201)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/skills/${addDocSkill.id}/documents (app/labs/skill-sheets/page.tsx:201)"}, "fullDescription": {"text": "`app/labs/skill-sheets/page.tsx:201` calls `POST /api/lab-management/skills/${addDocSkill.id}/documents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skills/<p>/documents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3486975aa07eff25", "name": "Dangling fetch: DELETE /api/lab-management/skills/${deleteTarget.skill.id}/documents?documentId=${deleteTarget.doc.id} (", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/skills/${deleteTarget.skill.id}/documents?documentId=${deleteTarget.doc.id} (app/labs/skill-sheets/page.tsx:224)"}, "fullDescription": {"text": "`app/labs/skill-sheets/page.tsx:224` calls `DELETE /api/lab-management/skills/${deleteTarget.skill.id}/documents?documentId=${deleteTarget.doc.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skills/<p>/documents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d3a533583f984bf4", "name": "Dangling fetch: GET /api/instructor/me (app/labs/schedule/page.tsx:282)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/schedule/page.tsx:282)"}, "fullDescription": {"text": "`app/labs/schedule/page.tsx:282` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cc13301b5b9ac8a4", "name": "Dangling fetch: GET /api/lab-management/daily-notes?${params} (app/labs/schedule/page.tsx:343)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/daily-notes?${params} (app/labs/schedule/page.tsx:343)"}, "fullDescription": {"text": "`app/labs/schedule/page.tsx:343` calls `GET /api/lab-management/daily-notes?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/daily-notes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d32a892dc128b98", "name": "Dangling fetch: POST /api/lab-management/daily-notes (app/labs/schedule/page.tsx:402)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/daily-notes (app/labs/schedule/page.tsx:402)"}, "fullDescription": {"text": "`app/labs/schedule/page.tsx:402` calls `POST /api/lab-management/daily-notes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/daily-notes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cebed10fca7c4c9d", "name": "Dangling fetch: POST /api/lab-management/daily-notes (app/labs/schedule/page.tsx:478)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/daily-notes (app/labs/schedule/page.tsx:478)"}, "fullDescription": {"text": "`app/labs/schedule/page.tsx:478` calls `POST /api/lab-management/daily-notes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/daily-notes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0f8ce9ecd70b5746", "name": "Dangling fetch: GET /api/lab-management/lab-days?${params} (app/labs/schedule/page.tsx:752)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days?${params} (app/labs/schedule/page.tsx:752)"}, "fullDescription": {"text": "`app/labs/schedule/page.tsx:752` calls `GET /api/lab-management/lab-days?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-57d9ae2c0b1e3e9f", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/page.tsx:195)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/page.tsx:195)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:195` calls `GET /api/lab-management/lab-days/${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5e2843b544b1e260", "name": "Dangling fetch: GET /api/lab-management/instructors (app/labs/schedule/[id]/page.tsx:196)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/instructors (app/labs/schedule/[id]/page.tsx:196)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:196` calls `GET /api/lab-management/instructors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/instructors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cdfda6be6d38854b", "name": "Dangling fetch: GET /api/lab-management/locations?type=room (app/labs/schedule/[id]/page.tsx:197)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/locations?type=room (app/labs/schedule/[id]/page.tsx:197)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:197` calls `GET /api/lab-management/locations?type=room` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/locations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-16ce0b80d68aa521", "name": "Dangling fetch: GET /api/lab-management/lab-day-roles?lab_day_id=${labDayId} (app/labs/schedule/[id]/page.tsx:198)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-day-roles?lab_day_id=${labDayId} (app/labs/schedule/[id]/page.tsx:198)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:198` calls `GET /api/lab-management/lab-day-roles?lab_day_id=${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-day-roles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-608a9ac2ef608ad9", "name": "Dangling fetch: GET /api/lab-management/skills?includeDocuments=true (app/labs/schedule/[id]/page.tsx:209)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skills?includeDocuments=true (app/labs/schedule/[id]/page.tsx:209)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:209` calls `GET /api/lab-management/skills?includeDocuments=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2f1eebde63a90506", "name": "Dangling fetch: GET /api/lab-management/station-skills?stationId=${station.id} (app/labs/schedule/[id]/page.tsx:218)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/station-skills?stationId=${station.id} (app/labs/schedule/[id]/page.tsx:218)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:218` calls `GET /api/lab-management/station-skills?stationId=${station.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/station-skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fb54a8ccb05505a4", "name": "Dangling fetch: GET /api/lab-management/stations/${station.id}/documents (app/labs/schedule/[id]/page.tsx:237)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/stations/${station.id}/documents (app/labs/schedule/[id]/page.tsx:237)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:237` calls `GET /api/lab-management/stations/${station.id}/documents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations/<p>/documents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-06771d7e23d711d3", "name": "Dangling fetch: GET /api/skill-sheets/by-skill-name?name=${encodeURIComponent(skillName)}&program=${encodeURIComponent(p", "shortDescription": {"text": "Dangling fetch: GET /api/skill-sheets/by-skill-name?name=${encodeURIComponent(skillName)}&program=${encodeURIComponent(program.toLowerCase())} (app/labs/schedule/[id]/page.tsx:263)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:263` calls `GET /api/skill-sheets/by-skill-name?name=${encodeURIComponent(skillName)}&program=${encodeURIComponent(program.toLowerCase())}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets/by-skill-name`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2e8c2072da5075e3", "name": "Dangling fetch: GET /api/nremt-scenarios (app/labs/schedule/[id]/page.tsx:281)", "shortDescription": {"text": "Dangling fetch: GET /api/nremt-scenarios (app/labs/schedule/[id]/page.tsx:281)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:281` calls `GET /api/nremt-scenarios` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/nremt-scenarios`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2c892533b17e8afb", "name": "Dangling fetch: GET /api/lab-management/students?cohortId=${labDay.cohort.id}&status=active (app/labs/schedule/[id]/page", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${labDay.cohort.id}&status=active (app/labs/schedule/[id]/page.tsx:294)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:294` calls `GET /api/lab-management/students?cohortId=${labDay.cohort.id}&status=active` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-104132a23a4fb539", "name": "Dangling fetch: GET /api/tracking/scenarios?labDayId=${labDayId} (app/labs/schedule/[id]/page.tsx:299)", "shortDescription": {"text": "Dangling fetch: GET /api/tracking/scenarios?labDayId=${labDayId} (app/labs/schedule/[id]/page.tsx:299)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:299` calls `GET /api/tracking/scenarios?labDayId=${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tracking/scenarios`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e7665ab18fca9b8", "name": "Dangling fetch: GET /api/instructor/me (app/labs/schedule/[id]/page.tsx:304)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/schedule/[id]/page.tsx:304)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:304` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-39481a6e9a4dafd4", "name": "Dangling fetch: GET /api/lab-management/skills (app/labs/schedule/[id]/page.tsx:310)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skills (app/labs/schedule/[id]/page.tsx:310)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:310` calls `GET /api/lab-management/skills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-88a4283cdf2df9d7", "name": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/schedule/[id]/page.tsx:316)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/schedule/[id]/page.tsx:316)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:316` calls `GET /api/lab-management/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aab621f54eb34f05", "name": "Dangling fetch: PATCH /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/page.tsx:326)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/page.tsx:326)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:326` calls `PATCH /api/lab-management/lab-days/${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-01121dd7a6cdcefa", "name": "Dangling fetch: POST /api/lab-management/stations (app/labs/schedule/[id]/page.tsx:349)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/stations (app/labs/schedule/[id]/page.tsx:349)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:349` calls `POST /api/lab-management/stations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-284da4f5c549aa62", "name": "Dangling fetch: POST /api/admin/lab-templates/refresh-day (app/labs/schedule/[id]/page.tsx:372)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/lab-templates/refresh-day (app/labs/schedule/[id]/page.tsx:372)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:372` calls `POST /api/admin/lab-templates/refresh-day` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/lab-templates/refresh-day`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9889195df98b0959", "name": "Dangling fetch: PATCH /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/page.tsx:401)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/page.tsx:401)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:401` calls `PATCH /api/lab-management/lab-days/${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83cf0bdeadb2f5b3", "name": "Dangling fetch: PATCH /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/page.tsx:409)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/page.tsx:409)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:409` calls `PATCH /api/lab-management/lab-days/${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a910a0ba90025de8", "name": "Dangling fetch: PATCH /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/page.tsx:436)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/page.tsx:436)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:436` calls `PATCH /api/lab-management/lab-days/${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c13375d79b6a1616", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/skill-results/resend (app/labs/schedule/[id]/page.tsx:470)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/skill-results/resend (app/labs/schedule/[id]/page.tsx:470)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/page.tsx:470` calls `POST /api/lab-management/lab-days/${labDayId}/skill-results/resend` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/skill-results/resend`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-554a8222bb546273", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/checkoff-status (app/labs/schedule/[id]/checkoff/page.tsx:1", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/checkoff-status (app/labs/schedule/[id]/checkoff/page.tsx:149)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/checkoff/page.tsx:149` calls `GET /api/lab-management/lab-days/${labDayId}/checkoff-status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/checkoff-status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-349bb5d59032b8f1", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/station-assignments (app/labs/schedule/[id]/checkoff/page.t", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/station-assignments (app/labs/schedule/[id]/checkoff/page.tsx:150)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/checkoff/page.tsx:150` calls `GET /api/lab-management/lab-days/${labDayId}/station-assignments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/station-assignments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e363837db5421fc", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/checkoff-status (app/labs/schedule/[id]/checkoff/page.tsx:", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/checkoff-status (app/labs/schedule/[id]/checkoff/page.tsx:222)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/checkoff/page.tsx:222` calls `POST /api/lab-management/lab-days/${labDayId}/checkoff-status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/checkoff-status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-01fa045034b27fcf", "name": "Dangling fetch: GET /api/lab-management/skill-drills/${drillId}/documents (app/labs/schedule/[id]/stations/new/page.tsx:", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skill-drills/${drillId}/documents (app/labs/schedule/[id]/stations/new/page.tsx:189)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/stations/new/page.tsx:189` calls `GET /api/lab-management/skill-drills/${drillId}/documents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-drills/<p>/documents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac210abe0ab09f62", "name": "Dangling fetch: GET /api/lab-management/instructor-availability?date=${labDay.date}&start_time=08:00&end_time=17:00&lab_", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/instructor-availability?date=${labDay.date}&start_time=08:00&end_time=17:00&lab_day_id=${labDay.id} (app/labs/schedule/[id]/stations/new/page.tsx:208)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/stations/new/page.tsx:208` calls `GET /api/lab-management/instructor-availability?date=${labDay.date}&start_time=08:00&end_time=17:00&lab_day_id=${labDay.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/instructor-availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e4028da12f211be7", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/stations/new/page.tsx:247)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/stations/new/page.tsx:247)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/stations/new/page.tsx:247` calls `GET /api/lab-management/lab-days/${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cc4257ada104e591", "name": "Dangling fetch: GET /api/lab-management/stations?labDayId=${labDayId} (app/labs/schedule/[id]/stations/new/page.tsx:254)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/stations?labDayId=${labDayId} (app/labs/schedule/[id]/stations/new/page.tsx:254)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/stations/new/page.tsx:254` calls `GET /api/lab-management/stations?labDayId=${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dfe5c3b3946091f2", "name": "Dangling fetch: GET /api/lab-management/scenarios (app/labs/schedule/[id]/stations/new/page.tsx:261)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/scenarios (app/labs/schedule/[id]/stations/new/page.tsx:261)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/stations/new/page.tsx:261` calls `GET /api/lab-management/scenarios` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-da30b0fc78091eee", "name": "Dangling fetch: GET /api/lab-management/skills?includeDocuments=true (app/labs/schedule/[id]/stations/new/page.tsx:268)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skills?includeDocuments=true (app/labs/schedule/[id]/stations/new/page.tsx:268)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/stations/new/page.tsx:268` calls `GET /api/lab-management/skills?includeDocuments=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-850853ce42ab332c", "name": "Dangling fetch: GET /api/lab-management/skill-drills (app/labs/schedule/[id]/stations/new/page.tsx:275)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skill-drills (app/labs/schedule/[id]/stations/new/page.tsx:275)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/stations/new/page.tsx:275` calls `GET /api/lab-management/skill-drills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-drills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cf4299d03e338d83", "name": "Dangling fetch: GET /api/lab-management/instructors (app/labs/schedule/[id]/stations/new/page.tsx:282)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/instructors (app/labs/schedule/[id]/stations/new/page.tsx:282)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/stations/new/page.tsx:282` calls `GET /api/lab-management/instructors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/instructors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a35304fdc6419f27", "name": "Dangling fetch: GET /api/lab-management/locations?type=room (app/labs/schedule/[id]/stations/new/page.tsx:289)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/locations?type=room (app/labs/schedule/[id]/stations/new/page.tsx:289)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/stations/new/page.tsx:289` calls `GET /api/lab-management/locations?type=room` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/locations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fb2c97993905b44f", "name": "Dangling fetch: POST /api/lab-management/stations (app/labs/schedule/[id]/stations/new/page.tsx:410)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/stations (app/labs/schedule/[id]/stations/new/page.tsx:410)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/stations/new/page.tsx:410` calls `POST /api/lab-management/stations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e1c279ed66f62e8", "name": "Dangling fetch: POST /api/lab-management/station-skills (app/labs/schedule/[id]/stations/new/page.tsx:441)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/station-skills (app/labs/schedule/[id]/stations/new/page.tsx:441)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/stations/new/page.tsx:441` calls `POST /api/lab-management/station-skills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/station-skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-336cf311a7bd6323", "name": "Dangling fetch: POST /api/lab-management/custom-skills (app/labs/schedule/[id]/stations/new/page.tsx:454)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/custom-skills (app/labs/schedule/[id]/stations/new/page.tsx:454)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/stations/new/page.tsx:454` calls `POST /api/lab-management/custom-skills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/custom-skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-854e42ea11ca359e", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/station-assignments (app/labs/schedule/[id]/assignments/pag", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/station-assignments (app/labs/schedule/[id]/assignments/page.tsx:132)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/assignments/page.tsx:132` calls `GET /api/lab-management/lab-days/${labDayId}/station-assignments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/station-assignments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b7ed611f6c147c38", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/checkoff-status (app/labs/schedule/[id]/assignments/page.ts", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/checkoff-status (app/labs/schedule/[id]/assignments/page.tsx:133)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/assignments/page.tsx:133` calls `GET /api/lab-management/lab-days/${labDayId}/checkoff-status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/checkoff-status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fcd365ca9c8e1390", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/station-assignments (app/labs/schedule/[id]/assignments/pa", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/station-assignments (app/labs/schedule/[id]/assignments/page.tsx:160)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/assignments/page.tsx:160` calls `POST /api/lab-management/lab-days/${labDayId}/station-assignments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/station-assignments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-656843ed966faf6a", "name": "Dangling fetch: DELETE /api/lab-management/lab-days/${labDayId}/station-assignments?student_id=${student.student_id} (ap", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/lab-days/${labDayId}/station-assignments?student_id=${student.student_id} (app/labs/schedule/[id]/assignments/page.tsx:188)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/assignments/page.tsx:188` calls `DELETE /api/lab-management/lab-days/${labDayId}/station-assignments?student_id=${student.student_id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/station-assignments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-897d76ba7f44ca61", "name": "Dangling fetch: GET /api/instructor/me (app/labs/schedule/[id]/coordinator/page.tsx:480)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/schedule/[id]/coordinator/page.tsx:480)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/coordinator/page.tsx:480` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-61edbeb8efd60609", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/coordinator/page.tsx:492)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/coordinator/page.tsx:492)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/coordinator/page.tsx:492` calls `GET /api/lab-management/lab-days/${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b5365534c83c139", "name": "Dangling fetch: GET /api/lab-management/student-queue?lab_day_id=${labDayId} (app/labs/schedule/[id]/coordinator/page.ts", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/student-queue?lab_day_id=${labDayId} (app/labs/schedule/[id]/coordinator/page.tsx:515)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/coordinator/page.tsx:515` calls `GET /api/lab-management/student-queue?lab_day_id=${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/student-queue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-84600134d279178c", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/assistance-alerts?unresolved=true (app/labs/schedule/[id]/c", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/assistance-alerts?unresolved=true (app/labs/schedule/[id]/coordinator/page.tsx:537)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/coordinator/page.tsx:537` calls `GET /api/lab-management/lab-days/${labDayId}/assistance-alerts?unresolved=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/assistance-alerts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-84fe245ebeb4693d", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/retake-status (app/labs/schedule/[id]/coordinator/page.tsx:", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/retake-status (app/labs/schedule/[id]/coordinator/page.tsx:553)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/coordinator/page.tsx:553` calls `GET /api/lab-management/lab-days/${labDayId}/retake-status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/retake-status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e8d6b71ee42834e2", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/volunteer-availability (app/labs/schedule/[id]/coordinator/", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/volunteer-availability (app/labs/schedule/[id]/coordinator/page.tsx:571)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/coordinator/page.tsx:571` calls `GET /api/lab-management/lab-days/${labDayId}/volunteer-availability` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/volunteer-availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8ad7c379b1b0aca2", "name": "Dangling fetch: PATCH /api/lab-management/lab-days/${labDayId}/assistance-alerts (app/labs/schedule/[id]/coordinator/pag", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/lab-days/${labDayId}/assistance-alerts (app/labs/schedule/[id]/coordinator/page.tsx:634)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/coordinator/page.tsx:634` calls `PATCH /api/lab-management/lab-days/${labDayId}/assistance-alerts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/assistance-alerts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-81c1b8d2ee281f52", "name": "Dangling fetch: GET /api/lab-management/instructors (app/labs/schedule/[id]/coordinator/page.tsx:677)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/instructors (app/labs/schedule/[id]/coordinator/page.tsx:677)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/coordinator/page.tsx:677` calls `GET /api/lab-management/instructors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/instructors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e3bc30cc518d31c0", "name": "Dangling fetch: GET /api/skill-sheets (app/labs/schedule/[id]/coordinator/page.tsx:678)", "shortDescription": {"text": "Dangling fetch: GET /api/skill-sheets (app/labs/schedule/[id]/coordinator/page.tsx:678)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/coordinator/page.tsx:678` calls `GET /api/skill-sheets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0128bc66c25d3af6", "name": "Dangling fetch: POST /api/lab-management/stations (app/labs/schedule/[id]/coordinator/page.tsx:851)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/stations (app/labs/schedule/[id]/coordinator/page.tsx:851)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/coordinator/page.tsx:851` calls `POST /api/lab-management/stations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9ffb0de674efc655", "name": "Dangling fetch: POST /api/lab-management/stations (app/labs/schedule/[id]/coordinator/page.tsx:884)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/stations (app/labs/schedule/[id]/coordinator/page.tsx:884)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/coordinator/page.tsx:884` calls `POST /api/lab-management/stations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3566626e29f90868", "name": "Dangling fetch: PATCH /api/lab-management/stations/${stationId} (app/labs/schedule/[id]/coordinator/page.tsx:932)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/stations/${stationId} (app/labs/schedule/[id]/coordinator/page.tsx:932)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/coordinator/page.tsx:932` calls `PATCH /api/lab-management/stations/${stationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dd6ca43f83459b09", "name": "Dangling fetch: PATCH /api/lab-management/stations/${stationId} (app/labs/schedule/[id]/coordinator/page.tsx:974)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/stations/${stationId} (app/labs/schedule/[id]/coordinator/page.tsx:974)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/coordinator/page.tsx:974` calls `PATCH /api/lab-management/stations/${stationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-60a583ce53f71c2f", "name": "Dangling fetch: DELETE /api/lab-management/stations/${station.id} (app/labs/schedule/[id]/coordinator/page.tsx:1008)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/stations/${station.id} (app/labs/schedule/[id]/coordinator/page.tsx:1008)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/coordinator/page.tsx:1008` calls `DELETE /api/lab-management/stations/${station.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f69d715c119f2f10", "name": "Dangling fetch: PUT /api/lab-management/student-queue (app/labs/schedule/[id]/coordinator/page.tsx:1284)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/student-queue (app/labs/schedule/[id]/coordinator/page.tsx:1284)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/coordinator/page.tsx:1284` calls `PUT /api/lab-management/student-queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/student-queue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d83b0815a14bbd54", "name": "Dangling fetch: DELETE /api/lab-management/student-queue (app/labs/schedule/[id]/coordinator/page.tsx:1308)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/student-queue (app/labs/schedule/[id]/coordinator/page.tsx:1308)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/coordinator/page.tsx:1308` calls `DELETE /api/lab-management/student-queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/student-queue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-719e4a68999672bd", "name": "Dangling fetch: POST /api/lab-management/student-queue (app/labs/schedule/[id]/coordinator/page.tsx:1339)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/student-queue (app/labs/schedule/[id]/coordinator/page.tsx:1339)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/coordinator/page.tsx:1339` calls `POST /api/lab-management/student-queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/student-queue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-010bcf0c17f3b55e", "name": "Dangling fetch: GET /api/timer-display (app/labs/schedule/[id]/edit/page.tsx:203)", "shortDescription": {"text": "Dangling fetch: GET /api/timer-display (app/labs/schedule/[id]/edit/page.tsx:203)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/edit/page.tsx:203` calls `GET /api/timer-display` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/timer-display`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dfade19f44c99d2f", "name": "Dangling fetch: GET /api/users/list (app/labs/schedule/[id]/edit/page.tsx:215)", "shortDescription": {"text": "Dangling fetch: GET /api/users/list (app/labs/schedule/[id]/edit/page.tsx:215)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/edit/page.tsx:215` calls `GET /api/users/list` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/list`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f22bbace7081fe08", "name": "Dangling fetch: GET /api/lab-management/lab-day-roles?lab_day_id=${labDayId} (app/labs/schedule/[id]/edit/page.tsx:227)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-day-roles?lab_day_id=${labDayId} (app/labs/schedule/[id]/edit/page.tsx:227)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/edit/page.tsx:227` calls `GET /api/lab-management/lab-day-roles?lab_day_id=${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-day-roles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7c4fccc49683bcd1", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/edit/page.tsx:242)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/edit/page.tsx:242)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/edit/page.tsx:242` calls `GET /api/lab-management/lab-days/${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3c0ce33509fddf4e", "name": "Dangling fetch: GET /api/lab-management/skill-coverage?cohort_id=${cohortId} (app/labs/schedule/[id]/edit/page.tsx:292)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skill-coverage?cohort_id=${cohortId} (app/labs/schedule/[id]/edit/page.tsx:292)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/edit/page.tsx:292` calls `GET /api/lab-management/skill-coverage?cohort_id=${cohortId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-coverage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fb59344d48fc2e04", "name": "Dangling fetch: POST /api/lab-management/schedule/conflicts (app/labs/schedule/[id]/edit/page.tsx:328)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/schedule/conflicts (app/labs/schedule/[id]/edit/page.tsx:328)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/edit/page.tsx:328` calls `POST /api/lab-management/schedule/conflicts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/schedule/conflicts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c79b9be0cb88708b", "name": "Dangling fetch: PATCH /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/edit/page.tsx:392)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/edit/page.tsx:392)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/edit/page.tsx:392` calls `PATCH /api/lab-management/lab-days/${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-91e1726f19eb19ff", "name": "Dangling fetch: POST /api/lab-management/request-coverage (app/labs/schedule/[id]/edit/page.tsx:421)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/request-coverage (app/labs/schedule/[id]/edit/page.tsx:421)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/edit/page.tsx:421` calls `POST /api/lab-management/request-coverage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/request-coverage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-665c10b4694687b6", "name": "Dangling fetch: DELETE /api/lab-management/lab-day-roles?lab_day_id=${labDayId} (app/labs/schedule/[id]/edit/page.tsx:43", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/lab-day-roles?lab_day_id=${labDayId} (app/labs/schedule/[id]/edit/page.tsx:439)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/edit/page.tsx:439` calls `DELETE /api/lab-management/lab-day-roles?lab_day_id=${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-day-roles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-666fb610bf0f3d0b", "name": "Dangling fetch: POST /api/lab-management/lab-day-roles (app/labs/schedule/[id]/edit/page.tsx:454)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-day-roles (app/labs/schedule/[id]/edit/page.tsx:454)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/edit/page.tsx:454` calls `POST /api/lab-management/lab-day-roles` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-day-roles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dad4647de4e7d020", "name": "Dangling fetch: DELETE /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/edit/page.tsx:487)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/edit/page.tsx:487)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/edit/page.tsx:487` calls `DELETE /api/lab-management/lab-days/${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-17b0e228c45c2c4a", "name": "Dangling fetch: PATCH /api/lab-management/stations/${stationId} (app/labs/schedule/[id]/edit/page.tsx:516)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/stations/${stationId} (app/labs/schedule/[id]/edit/page.tsx:516)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/edit/page.tsx:516` calls `PATCH /api/lab-management/stations/${stationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-34cd94357a54119a", "name": "Dangling fetch: POST /api/lab-management/station-instructors (app/labs/schedule/[id]/edit/page.tsx:526)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/station-instructors (app/labs/schedule/[id]/edit/page.tsx:526)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/edit/page.tsx:526` calls `POST /api/lab-management/station-instructors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/station-instructors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-40eb8dbd8ba13dbf", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/edit/page.tsx:540)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/edit/page.tsx:540)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/edit/page.tsx:540` calls `GET /api/lab-management/lab-days/${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-61f554e057fe45c9", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/skill-results (app/labs/schedule/[id]/results/page.tsx:154)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/skill-results (app/labs/schedule/[id]/results/page.tsx:154)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/results/page.tsx:154` calls `GET /api/lab-management/lab-days/${labDayId}/skill-results` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/skill-results`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ddfc064e583d8330", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/results/page.tsx:170)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/results/page.tsx:170)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/results/page.tsx:170` calls `GET /api/lab-management/lab-days/${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d92334acbc191507", "name": "Dangling fetch: GET /api/lab-management/students/${studentId}/skill-history (app/labs/schedule/[id]/results/page.tsx:200", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students/${studentId}/skill-history (app/labs/schedule/[id]/results/page.tsx:200)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/results/page.tsx:200` calls `GET /api/lab-management/students/${studentId}/skill-history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>/skill-history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9034babcadcd6395", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/skill-results/resend (app/labs/schedule/[id]/results/page.", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/skill-results/resend (app/labs/schedule/[id]/results/page.tsx:226)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/results/page.tsx:226` calls `POST /api/lab-management/lab-days/${labDayId}/skill-results/resend` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/skill-results/resend`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-69abb8a4552ec08d", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/skill-results/resend (app/labs/schedule/[id]/results/page.", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/skill-results/resend (app/labs/schedule/[id]/results/page.tsx:261)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/results/page.tsx:261` calls `POST /api/lab-management/lab-days/${labDayId}/skill-results/resend` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/skill-results/resend`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-051093c5aa6bb671", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/pdf-packet (app/labs/schedule/[id]/results/page.tsx:348)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/pdf-packet (app/labs/schedule/[id]/results/page.tsx:348)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/results/page.tsx:348` calls `GET /api/lab-management/lab-days/${labDayId}/pdf-packet` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/pdf-packet`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-87aa0927f7186a75", "name": "Dangling fetch: POST /api/lab-management/lab-days/${dayId}/skill-results/resend (app/labs/schedule/[id]/results/page.tsx", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${dayId}/skill-results/resend (app/labs/schedule/[id]/results/page.tsx:960)"}, "fullDescription": {"text": "`app/labs/schedule/[id]/results/page.tsx:960` calls `POST /api/lab-management/lab-days/${dayId}/skill-results/resend` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/skill-results/resend`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-960f6af1f5aaa1bc", "name": "Dangling fetch: GET /api/lab-management/skill-drills/${drillId}/documents (app/labs/schedule/new/page.tsx:423)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skill-drills/${drillId}/documents (app/labs/schedule/new/page.tsx:423)"}, "fullDescription": {"text": "`app/labs/schedule/new/page.tsx:423` calls `GET /api/lab-management/skill-drills/${drillId}/documents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-drills/<p>/documents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4ef5515e09b5cf0", "name": "Dangling fetch: GET /api/lab-management/schedule/suggestions?${params.toString()} (app/labs/schedule/new/page.tsx:457)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/schedule/suggestions?${params.toString()} (app/labs/schedule/new/page.tsx:457)"}, "fullDescription": {"text": "`app/labs/schedule/new/page.tsx:457` calls `GET /api/lab-management/schedule/suggestions?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/schedule/suggestions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ba7d7de01d3b03d3", "name": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/schedule/new/page.tsx:481)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/schedule/new/page.tsx:481)"}, "fullDescription": {"text": "`app/labs/schedule/new/page.tsx:481` calls `GET /api/lab-management/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-298c20d657241e78", "name": "Dangling fetch: GET /api/lab-management/scenarios (app/labs/schedule/new/page.tsx:488)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/scenarios (app/labs/schedule/new/page.tsx:488)"}, "fullDescription": {"text": "`app/labs/schedule/new/page.tsx:488` calls `GET /api/lab-management/scenarios` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-abbb8a25a96bd5d2", "name": "Dangling fetch: GET /api/lab-management/skills (app/labs/schedule/new/page.tsx:495)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skills (app/labs/schedule/new/page.tsx:495)"}, "fullDescription": {"text": "`app/labs/schedule/new/page.tsx:495` calls `GET /api/lab-management/skills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0cc5a0816b3b3598", "name": "Dangling fetch: GET /api/lab-management/skill-drills (app/labs/schedule/new/page.tsx:502)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skill-drills (app/labs/schedule/new/page.tsx:502)"}, "fullDescription": {"text": "`app/labs/schedule/new/page.tsx:502` calls `GET /api/lab-management/skill-drills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-drills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a845832f52aa3f18", "name": "Dangling fetch: GET /api/lab-management/instructors (app/labs/schedule/new/page.tsx:509)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/instructors (app/labs/schedule/new/page.tsx:509)"}, "fullDescription": {"text": "`app/labs/schedule/new/page.tsx:509` calls `GET /api/lab-management/instructors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/instructors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-605ca3407a3ac47a", "name": "Dangling fetch: GET /api/users/list (app/labs/schedule/new/page.tsx:516)", "shortDescription": {"text": "Dangling fetch: GET /api/users/list (app/labs/schedule/new/page.tsx:516)"}, "fullDescription": {"text": "`app/labs/schedule/new/page.tsx:516` calls `GET /api/users/list` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/list`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b55d304dbc1fef4b", "name": "Dangling fetch: GET /api/lab-management/templates (app/labs/schedule/new/page.tsx:525)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/templates (app/labs/schedule/new/page.tsx:525)"}, "fullDescription": {"text": "`app/labs/schedule/new/page.tsx:525` calls `GET /api/lab-management/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-87b0891682195557", "name": "Dangling fetch: POST /api/lab-management/schedule/conflicts (app/labs/schedule/new/page.tsx:557)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/schedule/conflicts (app/labs/schedule/new/page.tsx:557)"}, "fullDescription": {"text": "`app/labs/schedule/new/page.tsx:557` calls `POST /api/lab-management/schedule/conflicts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/schedule/conflicts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-22fe47ae750dda67", "name": "Dangling fetch: PUT /api/lab-management/templates/${existing.id} (app/labs/schedule/new/page.tsx:844)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/templates/${existing.id} (app/labs/schedule/new/page.tsx:844)"}, "fullDescription": {"text": "`app/labs/schedule/new/page.tsx:844` calls `PUT /api/lab-management/templates/${existing.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/templates/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3e6b6ca7f9fa6c61", "name": "Dangling fetch: POST /api/lab-management/templates (app/labs/schedule/new/page.tsx:860)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/templates (app/labs/schedule/new/page.tsx:860)"}, "fullDescription": {"text": "`app/labs/schedule/new/page.tsx:860` calls `POST /api/lab-management/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9bcf0ab8d80e018c", "name": "Dangling fetch: POST /api/lab-management/lab-days (app/labs/schedule/new/page.tsx:921)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days (app/labs/schedule/new/page.tsx:921)"}, "fullDescription": {"text": "`app/labs/schedule/new/page.tsx:921` calls `POST /api/lab-management/lab-days` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e66c430271050d8", "name": "Dangling fetch: POST /api/lab-management/request-coverage (app/labs/schedule/new/page.tsx:953)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/request-coverage (app/labs/schedule/new/page.tsx:953)"}, "fullDescription": {"text": "`app/labs/schedule/new/page.tsx:953` calls `POST /api/lab-management/request-coverage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/request-coverage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bbde684abf8f2c5e", "name": "Dangling fetch: POST /api/lab-management/lab-day-roles (app/labs/schedule/new/page.tsx:976)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-day-roles (app/labs/schedule/new/page.tsx:976)"}, "fullDescription": {"text": "`app/labs/schedule/new/page.tsx:976` calls `POST /api/lab-management/lab-day-roles` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-day-roles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-473cf8b25b4a81f1", "name": "Dangling fetch: POST /api/lab-management/stations (app/labs/schedule/new/page.tsx:992)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/stations (app/labs/schedule/new/page.tsx:992)"}, "fullDescription": {"text": "`app/labs/schedule/new/page.tsx:992` calls `POST /api/lab-management/stations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-475b8ef86b5af235", "name": "Dangling fetch: POST /api/lab-management/station-skills (app/labs/schedule/new/page.tsx:1025)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/station-skills (app/labs/schedule/new/page.tsx:1025)"}, "fullDescription": {"text": "`app/labs/schedule/new/page.tsx:1025` calls `POST /api/lab-management/station-skills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/station-skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-34e3dcccf8843b54", "name": "Dangling fetch: POST /api/lab-management/custom-skills (app/labs/schedule/new/page.tsx:1038)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/custom-skills (app/labs/schedule/new/page.tsx:1038)"}, "fullDescription": {"text": "`app/labs/schedule/new/page.tsx:1038` calls `POST /api/lab-management/custom-skills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/custom-skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a144ba6ddbaa1124", "name": "Dangling fetch: GET /api/seating/classrooms (app/labs/seating/charts/page.tsx:87)", "shortDescription": {"text": "Dangling fetch: GET /api/seating/classrooms (app/labs/seating/charts/page.tsx:87)"}, "fullDescription": {"text": "`app/labs/seating/charts/page.tsx:87` calls `GET /api/seating/classrooms` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seating/classrooms`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b0a9151d5830c0c3", "name": "Dangling fetch: GET /api/instructor/me (app/labs/seating/charts/page.tsx:106)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/seating/charts/page.tsx:106)"}, "fullDescription": {"text": "`app/labs/seating/charts/page.tsx:106` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2276990dd470599b", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/labs/seating/charts/page.tsx:124)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/labs/seating/charts/page.tsx:124)"}, "fullDescription": {"text": "`app/labs/seating/charts/page.tsx:124` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b6e44ba417cf24d8", "name": "Dangling fetch: POST /api/seating/charts (app/labs/seating/charts/page.tsx:161)", "shortDescription": {"text": "Dangling fetch: POST /api/seating/charts (app/labs/seating/charts/page.tsx:161)"}, "fullDescription": {"text": "`app/labs/seating/charts/page.tsx:161` calls `POST /api/seating/charts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seating/charts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e8accc865461a925", "name": "Dangling fetch: DELETE /api/seating/charts/${chartId} (app/labs/seating/charts/page.tsx:190)", "shortDescription": {"text": "Dangling fetch: DELETE /api/seating/charts/${chartId} (app/labs/seating/charts/page.tsx:190)"}, "fullDescription": {"text": "`app/labs/seating/charts/page.tsx:190` calls `DELETE /api/seating/charts/${chartId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seating/charts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5e44bca7f137e315", "name": "Dangling fetch: PUT /api/seating/charts/${chartId} (app/labs/seating/charts/page.tsx:205)", "shortDescription": {"text": "Dangling fetch: PUT /api/seating/charts/${chartId} (app/labs/seating/charts/page.tsx:205)"}, "fullDescription": {"text": "`app/labs/seating/charts/page.tsx:205` calls `PUT /api/seating/charts/${chartId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seating/charts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4dfa7451e5bfae7d", "name": "Dangling fetch: GET /api/seating/charts/${chartId} (app/labs/seating/charts/[id]/page.tsx:130)", "shortDescription": {"text": "Dangling fetch: GET /api/seating/charts/${chartId} (app/labs/seating/charts/[id]/page.tsx:130)"}, "fullDescription": {"text": "`app/labs/seating/charts/[id]/page.tsx:130` calls `GET /api/seating/charts/${chartId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seating/charts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-afa8190a76c4a92c", "name": "Dangling fetch: PUT /api/seating/charts/${chartId}/assignments (app/labs/seating/charts/[id]/page.tsx:286)", "shortDescription": {"text": "Dangling fetch: PUT /api/seating/charts/${chartId}/assignments (app/labs/seating/charts/[id]/page.tsx:286)"}, "fullDescription": {"text": "`app/labs/seating/charts/[id]/page.tsx:286` calls `PUT /api/seating/charts/${chartId}/assignments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seating/charts/<p>/assignments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d1c98903687eeb0d", "name": "Dangling fetch: POST /api/seating/charts/${chartId}/generate (app/labs/seating/charts/[id]/page.tsx:343)", "shortDescription": {"text": "Dangling fetch: POST /api/seating/charts/${chartId}/generate (app/labs/seating/charts/[id]/page.tsx:343)"}, "fullDescription": {"text": "`app/labs/seating/charts/[id]/page.tsx:343` calls `POST /api/seating/charts/${chartId}/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seating/charts/<p>/generate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-01cc37372d5491f0", "name": "Dangling fetch: GET /api/instructor/me (app/labs/seating/learning-styles/page.tsx:161)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/seating/learning-styles/page.tsx:161)"}, "fullDescription": {"text": "`app/labs/seating/learning-styles/page.tsx:161` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-67de7bd2613a3bd1", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/labs/seating/learning-styles/page.tsx:179)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/labs/seating/learning-styles/page.tsx:179)"}, "fullDescription": {"text": "`app/labs/seating/learning-styles/page.tsx:179` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d5d832edb39ebdfb", "name": "Dangling fetch: POST /api/seating/learning-styles (app/labs/seating/learning-styles/page.tsx:248)", "shortDescription": {"text": "Dangling fetch: POST /api/seating/learning-styles (app/labs/seating/learning-styles/page.tsx:248)"}, "fullDescription": {"text": "`app/labs/seating/learning-styles/page.tsx:248` calls `POST /api/seating/learning-styles` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seating/learning-styles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8293d9c21116a389", "name": "Dangling fetch: DELETE /api/seating/learning-styles?id=${id} (app/labs/seating/learning-styles/page.tsx:285)", "shortDescription": {"text": "Dangling fetch: DELETE /api/seating/learning-styles?id=${id} (app/labs/seating/learning-styles/page.tsx:285)"}, "fullDescription": {"text": "`app/labs/seating/learning-styles/page.tsx:285` calls `DELETE /api/seating/learning-styles?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seating/learning-styles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ca3f2734c3c17d28", "name": "Dangling fetch: POST /api/seating/learning-styles (app/labs/seating/learning-styles/page.tsx:326)", "shortDescription": {"text": "Dangling fetch: POST /api/seating/learning-styles (app/labs/seating/learning-styles/page.tsx:326)"}, "fullDescription": {"text": "`app/labs/seating/learning-styles/page.tsx:326` calls `POST /api/seating/learning-styles` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seating/learning-styles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d4d84ee521cb7b16", "name": "Dangling fetch: GET /api/instructor/me (app/labs/seating/preferences/page.tsx:97)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/seating/preferences/page.tsx:97)"}, "fullDescription": {"text": "`app/labs/seating/preferences/page.tsx:97` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2dfc9a358419be1c", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/labs/seating/preferences/page.tsx:115)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/labs/seating/preferences/page.tsx:115)"}, "fullDescription": {"text": "`app/labs/seating/preferences/page.tsx:115` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-53f0d6d1cab0fa40", "name": "Dangling fetch: POST /api/seating/preferences (app/labs/seating/preferences/page.tsx:174)", "shortDescription": {"text": "Dangling fetch: POST /api/seating/preferences (app/labs/seating/preferences/page.tsx:174)"}, "fullDescription": {"text": "`app/labs/seating/preferences/page.tsx:174` calls `POST /api/seating/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seating/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-45689ac440ffb09a", "name": "Dangling fetch: DELETE /api/seating/preferences?id=${id} (app/labs/seating/preferences/page.tsx:203)", "shortDescription": {"text": "Dangling fetch: DELETE /api/seating/preferences?id=${id} (app/labs/seating/preferences/page.tsx:203)"}, "fullDescription": {"text": "`app/labs/seating/preferences/page.tsx:203` calls `DELETE /api/seating/preferences?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seating/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dc2cbf6259750cc2", "name": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/skills/competencies/page.tsx:194)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/skills/competencies/page.tsx:194)"}, "fullDescription": {"text": "`app/labs/skills/competencies/page.tsx:194` calls `GET /api/lab-management/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ef9697b24ec17e83", "name": "Dangling fetch: GET /api/lab-management/competencies?cohort_id=${selectedCohort} (app/labs/skills/competencies/page.tsx:", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/competencies?cohort_id=${selectedCohort} (app/labs/skills/competencies/page.tsx:224)"}, "fullDescription": {"text": "`app/labs/skills/competencies/page.tsx:224` calls `GET /api/lab-management/competencies?cohort_id=${selectedCohort}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/competencies`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2998dcf8821f2932", "name": "Dangling fetch: POST /api/lab-management/competencies (app/labs/skills/competencies/page.tsx:262)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/competencies (app/labs/skills/competencies/page.tsx:262)"}, "fullDescription": {"text": "`app/labs/skills/competencies/page.tsx:262` calls `POST /api/lab-management/competencies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/competencies`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a1e75df6b0d43151", "name": "Dangling fetch: POST /api/lab-management/competencies (app/labs/skills/competencies/page.tsx:304)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/competencies (app/labs/skills/competencies/page.tsx:304)"}, "fullDescription": {"text": "`app/labs/skills/competencies/page.tsx:304` calls `POST /api/lab-management/competencies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/competencies`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c45c4e5e87f9f8a0", "name": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/skills/competencies/report/page.tsx:156)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/skills/competencies/report/page.tsx:156)"}, "fullDescription": {"text": "`app/labs/skills/competencies/report/page.tsx:156` calls `GET /api/lab-management/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e61b79d8e6b5fe6d", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/labs/ekg-warmup/page.tsx:120)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/labs/ekg-warmup/page.tsx:120)"}, "fullDescription": {"text": "`app/labs/ekg-warmup/page.tsx:120` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-39a96370e876dda2", "name": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/labs/ekg-warmup/page.tsx:133)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/labs/ekg-warmup/page.tsx:133)"}, "fullDescription": {"text": "`app/labs/ekg-warmup/page.tsx:133` calls `GET /api/lab-management/students?cohortId=${cohortId}&status=active` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3128606fb4c36a7b", "name": "Dangling fetch: GET /api/tracking/ekg-scores?cohortId=${cohortId}&limit=20 (app/labs/ekg-warmup/page.tsx:145)", "shortDescription": {"text": "Dangling fetch: GET /api/tracking/ekg-scores?cohortId=${cohortId}&limit=20 (app/labs/ekg-warmup/page.tsx:145)"}, "fullDescription": {"text": "`app/labs/ekg-warmup/page.tsx:145` calls `GET /api/tracking/ekg-scores?cohortId=${cohortId}&limit=20` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tracking/ekg-scores`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f8738779c1ca3b80", "name": "Dangling fetch: POST /api/tracking/ekg-scores (app/labs/ekg-warmup/page.tsx:194)", "shortDescription": {"text": "Dangling fetch: POST /api/tracking/ekg-scores (app/labs/ekg-warmup/page.tsx:194)"}, "fullDescription": {"text": "`app/labs/ekg-warmup/page.tsx:194` calls `POST /api/tracking/ekg-scores` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tracking/ekg-scores`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c6fd1d423b36b799", "name": "Dangling fetch: GET /api/instructor/me (app/labs/mentorship/page.tsx:167)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/mentorship/page.tsx:167)"}, "fullDescription": {"text": "`app/labs/mentorship/page.tsx:167` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6eb764ecba521362", "name": "Dangling fetch: GET /api/lab-management/mentorship?${query.toString()} (app/labs/mentorship/page.tsx:191)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/mentorship?${query.toString()} (app/labs/mentorship/page.tsx:191)"}, "fullDescription": {"text": "`app/labs/mentorship/page.tsx:191` calls `GET /api/lab-management/mentorship?${query.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/mentorship`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-660f9bea6e1eb68f", "name": "Dangling fetch: GET /api/lab-management/students?limit=200&status=active (app/labs/mentorship/page.tsx:206)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?limit=200&status=active (app/labs/mentorship/page.tsx:206)"}, "fullDescription": {"text": "`app/labs/mentorship/page.tsx:206` calls `GET /api/lab-management/students?limit=200&status=active` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-188f98bc2d9a5b10", "name": "Dangling fetch: GET /api/lab-management/mentorship/${pairId}/logs (app/labs/mentorship/page.tsx:219)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/mentorship/${pairId}/logs (app/labs/mentorship/page.tsx:219)"}, "fullDescription": {"text": "`app/labs/mentorship/page.tsx:219` calls `GET /api/lab-management/mentorship/${pairId}/logs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/mentorship/<p>/logs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-62f039d265a355a6", "name": "Dangling fetch: POST /api/lab-management/mentorship (app/labs/mentorship/page.tsx:256)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/mentorship (app/labs/mentorship/page.tsx:256)"}, "fullDescription": {"text": "`app/labs/mentorship/page.tsx:256` calls `POST /api/lab-management/mentorship` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/mentorship`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-32fb81888ddea057", "name": "Dangling fetch: POST /api/lab-management/mentorship/${pairId}/logs (app/labs/mentorship/page.tsx:292)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/mentorship/${pairId}/logs (app/labs/mentorship/page.tsx:292)"}, "fullDescription": {"text": "`app/labs/mentorship/page.tsx:292` calls `POST /api/lab-management/mentorship/${pairId}/logs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/mentorship/<p>/logs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-53ebe850c8d79fb8", "name": "Dangling fetch: PUT /api/lab-management/mentorship/${pairId} (app/labs/mentorship/page.tsx:321)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/mentorship/${pairId} (app/labs/mentorship/page.tsx:321)"}, "fullDescription": {"text": "`app/labs/mentorship/page.tsx:321` calls `PUT /api/lab-management/mentorship/${pairId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/mentorship/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d3abf741881ce1a6", "name": "Dangling fetch: PUT /api/lab-management/mentorship/${pairId} (app/labs/mentorship/page.tsx:340)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/mentorship/${pairId} (app/labs/mentorship/page.tsx:340)"}, "fullDescription": {"text": "`app/labs/mentorship/page.tsx:340` calls `PUT /api/lab-management/mentorship/${pairId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/mentorship/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-75f603456b1ebe95", "name": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/layout.tsx:31)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/layout.tsx:31)"}, "fullDescription": {"text": "`app/lvfr-aemt/layout.tsx:31` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-675dca5156b9de6c", "name": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/page.tsx:68)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/page.tsx:68)"}, "fullDescription": {"text": "`app/lvfr-aemt/page.tsx:68` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-36f053dacfa3f40c", "name": "Dangling fetch: GET /api/lvfr-aemt/dashboard (app/lvfr-aemt/page.tsx:76)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/dashboard (app/lvfr-aemt/page.tsx:76)"}, "fullDescription": {"text": "`app/lvfr-aemt/page.tsx:76` calls `GET /api/lvfr-aemt/dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e570b9a0c84291a6", "name": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/files/page.tsx:100)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/files/page.tsx:100)"}, "fullDescription": {"text": "`app/lvfr-aemt/files/page.tsx:100` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6599c16057879689", "name": "Dangling fetch: GET /api/lvfr-aemt/files?${params} (app/lvfr-aemt/files/page.tsx:111)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/files?${params} (app/lvfr-aemt/files/page.tsx:111)"}, "fullDescription": {"text": "`app/lvfr-aemt/files/page.tsx:111` calls `GET /api/lvfr-aemt/files?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/files`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e51e3e5dda356413", "name": "Dangling fetch: POST /api/lvfr-aemt/files (app/lvfr-aemt/files/page.tsx:168)", "shortDescription": {"text": "Dangling fetch: POST /api/lvfr-aemt/files (app/lvfr-aemt/files/page.tsx:168)"}, "fullDescription": {"text": "`app/lvfr-aemt/files/page.tsx:168` calls `POST /api/lvfr-aemt/files` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/files`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b017270e78cadac0", "name": "Dangling fetch: PATCH /api/lvfr-aemt/files/${file.id} (app/lvfr-aemt/files/page.tsx:202)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lvfr-aemt/files/${file.id} (app/lvfr-aemt/files/page.tsx:202)"}, "fullDescription": {"text": "`app/lvfr-aemt/files/page.tsx:202` calls `PATCH /api/lvfr-aemt/files/${file.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/files/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-230bd438a0cc8550", "name": "Dangling fetch: DELETE /api/lvfr-aemt/files/${file.id} (app/lvfr-aemt/files/page.tsx:215)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lvfr-aemt/files/${file.id} (app/lvfr-aemt/files/page.tsx:215)"}, "fullDescription": {"text": "`app/lvfr-aemt/files/page.tsx:215` calls `DELETE /api/lvfr-aemt/files/${file.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/files/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c26c51a05814d0f5", "name": "Dangling fetch: PATCH /api/lvfr-aemt/files/${editingFile.id} (app/lvfr-aemt/files/page.tsx:225)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lvfr-aemt/files/${editingFile.id} (app/lvfr-aemt/files/page.tsx:225)"}, "fullDescription": {"text": "`app/lvfr-aemt/files/page.tsx:225` calls `PATCH /api/lvfr-aemt/files/${editingFile.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/files/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d05f600daedb8eb0", "name": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/grades/page.tsx:139)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/grades/page.tsx:139)"}, "fullDescription": {"text": "`app/lvfr-aemt/grades/page.tsx:139` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-988ae795d0187884", "name": "Dangling fetch: GET /api/lvfr-aemt/grades (app/lvfr-aemt/grades/page.tsx:154)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/grades (app/lvfr-aemt/grades/page.tsx:154)"}, "fullDescription": {"text": "`app/lvfr-aemt/grades/page.tsx:154` calls `GET /api/lvfr-aemt/grades` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/grades`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-11a5d1ceaae28652", "name": "Dangling fetch: GET /api/lvfr-aemt/grades/summary (app/lvfr-aemt/grades/page.tsx:155)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/grades/summary (app/lvfr-aemt/grades/page.tsx:155)"}, "fullDescription": {"text": "`app/lvfr-aemt/grades/page.tsx:155` calls `GET /api/lvfr-aemt/grades/summary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/grades/summary`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3085cf52a9cad58c", "name": "Dangling fetch: GET /api/lvfr-aemt/grades/summary (app/lvfr-aemt/grades/page.tsx:680)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/grades/summary (app/lvfr-aemt/grades/page.tsx:680)"}, "fullDescription": {"text": "`app/lvfr-aemt/grades/page.tsx:680` calls `GET /api/lvfr-aemt/grades/summary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/grades/summary`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-24c6542c456db60f", "name": "Dangling fetch: GET /api/lvfr-aemt/grades?assessment_id=__list__ (app/lvfr-aemt/grades/page.tsx:681)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/grades?assessment_id=__list__ (app/lvfr-aemt/grades/page.tsx:681)"}, "fullDescription": {"text": "`app/lvfr-aemt/grades/page.tsx:681` calls `GET /api/lvfr-aemt/grades?assessment_id=__list__` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/grades`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6d2675180ce6e9a8", "name": "Dangling fetch: GET /api/lvfr-aemt/dashboard (app/lvfr-aemt/grades/page.tsx:689)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/dashboard (app/lvfr-aemt/grades/page.tsx:689)"}, "fullDescription": {"text": "`app/lvfr-aemt/grades/page.tsx:689` calls `GET /api/lvfr-aemt/dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0feef633a45f2f4b", "name": "Dangling fetch: GET /api/lvfr-aemt/grades/summary (app/lvfr-aemt/grades/page.tsx:699)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/grades/summary (app/lvfr-aemt/grades/page.tsx:699)"}, "fullDescription": {"text": "`app/lvfr-aemt/grades/page.tsx:699` calls `GET /api/lvfr-aemt/grades/summary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/grades/summary`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7fa0b351e02906a0", "name": "Dangling fetch: POST /api/lvfr-aemt/grades (app/lvfr-aemt/grades/page.tsx:721)", "shortDescription": {"text": "Dangling fetch: POST /api/lvfr-aemt/grades (app/lvfr-aemt/grades/page.tsx:721)"}, "fullDescription": {"text": "`app/lvfr-aemt/grades/page.tsx:721` calls `POST /api/lvfr-aemt/grades` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/grades`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f13ffc2c5fdf02e0", "name": "Dangling fetch: POST /api/lvfr-aemt/grades/import (app/lvfr-aemt/grades/import/page.tsx:110)", "shortDescription": {"text": "Dangling fetch: POST /api/lvfr-aemt/grades/import (app/lvfr-aemt/grades/import/page.tsx:110)"}, "fullDescription": {"text": "`app/lvfr-aemt/grades/import/page.tsx:110` calls `POST /api/lvfr-aemt/grades/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/grades/import`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-954252256aad2af1", "name": "Dangling fetch: POST /api/lvfr-aemt/grades/import/confirm (app/lvfr-aemt/grades/import/page.tsx:159)", "shortDescription": {"text": "Dangling fetch: POST /api/lvfr-aemt/grades/import/confirm (app/lvfr-aemt/grades/import/page.tsx:159)"}, "fullDescription": {"text": "`app/lvfr-aemt/grades/import/page.tsx:159` calls `POST /api/lvfr-aemt/grades/import/confirm` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/grades/import/confirm`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3549d8f553f67f57", "name": "Dangling fetch: GET /api/lvfr-aemt/runsheet/${dateParam} (app/lvfr-aemt/day/[date]/page.tsx:139)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/runsheet/${dateParam} (app/lvfr-aemt/day/[date]/page.tsx:139)"}, "fullDescription": {"text": "`app/lvfr-aemt/day/[date]/page.tsx:139` calls `GET /api/lvfr-aemt/runsheet/${dateParam}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/runsheet/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b639e3fe304ed88f", "name": "Dangling fetch: POST /api/lvfr-aemt/runsheet/${dateParam}/seed (app/lvfr-aemt/day/[date]/page.tsx:225)", "shortDescription": {"text": "Dangling fetch: POST /api/lvfr-aemt/runsheet/${dateParam}/seed (app/lvfr-aemt/day/[date]/page.tsx:225)"}, "fullDescription": {"text": "`app/lvfr-aemt/day/[date]/page.tsx:225` calls `POST /api/lvfr-aemt/runsheet/${dateParam}/seed` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/runsheet/<p>/seed`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-40c77e66b9103fbb", "name": "Dangling fetch: PATCH /api/lvfr-aemt/runsheet/items/${item.id} (app/lvfr-aemt/day/[date]/page.tsx:256)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lvfr-aemt/runsheet/items/${item.id} (app/lvfr-aemt/day/[date]/page.tsx:256)"}, "fullDescription": {"text": "`app/lvfr-aemt/day/[date]/page.tsx:256` calls `PATCH /api/lvfr-aemt/runsheet/items/${item.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/runsheet/items/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5010c4998e2dc6c7", "name": "Dangling fetch: DELETE /api/lvfr-aemt/runsheet/items/${id} (app/lvfr-aemt/day/[date]/page.tsx:281)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lvfr-aemt/runsheet/items/${id} (app/lvfr-aemt/day/[date]/page.tsx:281)"}, "fullDescription": {"text": "`app/lvfr-aemt/day/[date]/page.tsx:281` calls `DELETE /api/lvfr-aemt/runsheet/items/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/runsheet/items/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b9e5070321be5545", "name": "Dangling fetch: PATCH /api/lvfr-aemt/runsheet/${dateParam}?session=${sessionKey} (app/lvfr-aemt/day/[date]/page.tsx:288)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lvfr-aemt/runsheet/${dateParam}?session=${sessionKey} (app/lvfr-aemt/day/[date]/page.tsx:288)"}, "fullDescription": {"text": "`app/lvfr-aemt/day/[date]/page.tsx:288` calls `PATCH /api/lvfr-aemt/runsheet/${dateParam}?session=${sessionKey}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/runsheet/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4696116c64661f56", "name": "Dangling fetch: POST /api/lvfr-aemt/runsheet/items (app/lvfr-aemt/day/[date]/page.tsx:679)", "shortDescription": {"text": "Dangling fetch: POST /api/lvfr-aemt/runsheet/items (app/lvfr-aemt/day/[date]/page.tsx:679)"}, "fullDescription": {"text": "`app/lvfr-aemt/day/[date]/page.tsx:679` calls `POST /api/lvfr-aemt/runsheet/items` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/runsheet/items`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d18513d6ee711da2", "name": "Dangling fetch: POST /api/lvfr-aemt/planner/templates (app/lvfr-aemt/planner/page.tsx:911)", "shortDescription": {"text": "Dangling fetch: POST /api/lvfr-aemt/planner/templates (app/lvfr-aemt/planner/page.tsx:911)"}, "fullDescription": {"text": "`app/lvfr-aemt/planner/page.tsx:911` calls `POST /api/lvfr-aemt/planner/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/planner/templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e8c24a3997460dbd", "name": "Dangling fetch: POST /api/lvfr-aemt/planner/instances (app/lvfr-aemt/planner/page.tsx:1021)", "shortDescription": {"text": "Dangling fetch: POST /api/lvfr-aemt/planner/instances (app/lvfr-aemt/planner/page.tsx:1021)"}, "fullDescription": {"text": "`app/lvfr-aemt/planner/page.tsx:1021` calls `POST /api/lvfr-aemt/planner/instances` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/planner/instances`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e21d8f8aaff5f481", "name": "Dangling fetch: GET /api/lvfr-aemt/planner/blocks (app/lvfr-aemt/planner/page.tsx:1194)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/planner/blocks (app/lvfr-aemt/planner/page.tsx:1194)"}, "fullDescription": {"text": "`app/lvfr-aemt/planner/page.tsx:1194` calls `GET /api/lvfr-aemt/planner/blocks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/planner/blocks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5bc9b635389f7f0e", "name": "Dangling fetch: GET /api/lvfr-aemt/planner/availability (app/lvfr-aemt/planner/page.tsx:1195)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/planner/availability (app/lvfr-aemt/planner/page.tsx:1195)"}, "fullDescription": {"text": "`app/lvfr-aemt/planner/page.tsx:1195` calls `GET /api/lvfr-aemt/planner/availability` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/planner/availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e55f17a969084fba", "name": "Dangling fetch: GET /api/lvfr-aemt/planner/instances (app/lvfr-aemt/planner/page.tsx:1196)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/planner/instances (app/lvfr-aemt/planner/page.tsx:1196)"}, "fullDescription": {"text": "`app/lvfr-aemt/planner/page.tsx:1196` calls `GET /api/lvfr-aemt/planner/instances` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/planner/instances`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f77355df7ce146b0", "name": "Dangling fetch: GET /api/lvfr-aemt/planner/templates (app/lvfr-aemt/planner/page.tsx:1197)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/planner/templates (app/lvfr-aemt/planner/page.tsx:1197)"}, "fullDescription": {"text": "`app/lvfr-aemt/planner/page.tsx:1197` calls `GET /api/lvfr-aemt/planner/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/planner/templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9f8e442120ed4781", "name": "Dangling fetch: PUT /api/lvfr-aemt/planner/placements (app/lvfr-aemt/planner/page.tsx:1303)", "shortDescription": {"text": "Dangling fetch: PUT /api/lvfr-aemt/planner/placements (app/lvfr-aemt/planner/page.tsx:1303)"}, "fullDescription": {"text": "`app/lvfr-aemt/planner/page.tsx:1303` calls `PUT /api/lvfr-aemt/planner/placements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/planner/placements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-90d713d8fc1b7777", "name": "Dangling fetch: POST /api/lvfr-aemt/planner/placements/move (app/lvfr-aemt/planner/page.tsx:1366)", "shortDescription": {"text": "Dangling fetch: POST /api/lvfr-aemt/planner/placements/move (app/lvfr-aemt/planner/page.tsx:1366)"}, "fullDescription": {"text": "`app/lvfr-aemt/planner/page.tsx:1366` calls `POST /api/lvfr-aemt/planner/placements/move` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/planner/placements/move`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1477d7be0a004327", "name": "Dangling fetch: POST /api/lvfr-aemt/planner/placements/move (app/lvfr-aemt/planner/page.tsx:1410)", "shortDescription": {"text": "Dangling fetch: POST /api/lvfr-aemt/planner/placements/move (app/lvfr-aemt/planner/page.tsx:1410)"}, "fullDescription": {"text": "`app/lvfr-aemt/planner/page.tsx:1410` calls `POST /api/lvfr-aemt/planner/placements/move` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/planner/placements/move`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-80a56c745ab38d8e", "name": "Dangling fetch: DELETE /api/lvfr-aemt/planner/placements/${placementId} (app/lvfr-aemt/planner/page.tsx:1459)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lvfr-aemt/planner/placements/${placementId} (app/lvfr-aemt/planner/page.tsx:1459)"}, "fullDescription": {"text": "`app/lvfr-aemt/planner/page.tsx:1459` calls `DELETE /api/lvfr-aemt/planner/placements/${placementId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/planner/placements/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-63fb2741ec2020d4", "name": "Dangling fetch: PUT /api/lvfr-aemt/planner/placements (app/lvfr-aemt/planner/page.tsx:1492)", "shortDescription": {"text": "Dangling fetch: PUT /api/lvfr-aemt/planner/placements (app/lvfr-aemt/planner/page.tsx:1492)"}, "fullDescription": {"text": "`app/lvfr-aemt/planner/page.tsx:1492` calls `PUT /api/lvfr-aemt/planner/placements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/planner/placements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5b39aeb1214242f7", "name": "Dangling fetch: POST /api/lvfr-aemt/planner/validate (app/lvfr-aemt/planner/page.tsx:1520)", "shortDescription": {"text": "Dangling fetch: POST /api/lvfr-aemt/planner/validate (app/lvfr-aemt/planner/page.tsx:1520)"}, "fullDescription": {"text": "`app/lvfr-aemt/planner/page.tsx:1520` calls `POST /api/lvfr-aemt/planner/validate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/planner/validate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6116e7e1a41900e3", "name": "Dangling fetch: POST /api/lvfr-aemt/planner/validate (app/lvfr-aemt/planner/page.tsx:1540)", "shortDescription": {"text": "Dangling fetch: POST /api/lvfr-aemt/planner/validate (app/lvfr-aemt/planner/page.tsx:1540)"}, "fullDescription": {"text": "`app/lvfr-aemt/planner/page.tsx:1540` calls `POST /api/lvfr-aemt/planner/validate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/planner/validate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d04f65bae01faf6", "name": "Dangling fetch: PATCH /api/lvfr-aemt/planner/instances/${instance.id}/publish (app/lvfr-aemt/planner/page.tsx:1558)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lvfr-aemt/planner/instances/${instance.id}/publish (app/lvfr-aemt/planner/page.tsx:1558)"}, "fullDescription": {"text": "`app/lvfr-aemt/planner/page.tsx:1558` calls `PATCH /api/lvfr-aemt/planner/instances/${instance.id}/publish` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/planner/instances/<p>/publish`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-38d5cd15292cf58e", "name": "Dangling fetch: PATCH /api/lvfr-aemt/planner/instances/${instance.id}/publish (app/lvfr-aemt/planner/page.tsx:1574)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lvfr-aemt/planner/instances/${instance.id}/publish (app/lvfr-aemt/planner/page.tsx:1574)"}, "fullDescription": {"text": "`app/lvfr-aemt/planner/page.tsx:1574` calls `PATCH /api/lvfr-aemt/planner/instances/${instance.id}/publish` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/planner/instances/<p>/publish`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d1923a4c8492542", "name": "Dangling fetch: GET /api/lvfr-aemt/calendar (app/lvfr-aemt/calendar/page.tsx:112)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/calendar (app/lvfr-aemt/calendar/page.tsx:112)"}, "fullDescription": {"text": "`app/lvfr-aemt/calendar/page.tsx:112` calls `GET /api/lvfr-aemt/calendar` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/calendar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5e94f6db0bc029f0", "name": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/calendar/page.tsx:113)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/calendar/page.tsx:113)"}, "fullDescription": {"text": "`app/lvfr-aemt/calendar/page.tsx:113` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aa2c8d4c9c855c3d", "name": "Dangling fetch: GET /api/lvfr-aemt/scheduling (app/lvfr-aemt/calendar/page.tsx:139)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/scheduling (app/lvfr-aemt/calendar/page.tsx:139)"}, "fullDescription": {"text": "`app/lvfr-aemt/calendar/page.tsx:139` calls `GET /api/lvfr-aemt/scheduling` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/scheduling`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-71ab5e8069b4812a", "name": "Dangling fetch: PATCH /api/lvfr-aemt/calendar (app/lvfr-aemt/calendar/page.tsx:178)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lvfr-aemt/calendar (app/lvfr-aemt/calendar/page.tsx:178)"}, "fullDescription": {"text": "`app/lvfr-aemt/calendar/page.tsx:178` calls `PATCH /api/lvfr-aemt/calendar` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/calendar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5507a0cc7e43c55b", "name": "Dangling fetch: GET /api/lvfr-aemt/scheduling (app/lvfr-aemt/scheduling/page.tsx:68)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/scheduling (app/lvfr-aemt/scheduling/page.tsx:68)"}, "fullDescription": {"text": "`app/lvfr-aemt/scheduling/page.tsx:68` calls `GET /api/lvfr-aemt/scheduling` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/scheduling`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fb4425b4c9456863", "name": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/skills/page.tsx:127)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/skills/page.tsx:127)"}, "fullDescription": {"text": "`app/lvfr-aemt/skills/page.tsx:127` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-81556bfeb9b5cc1f", "name": "Dangling fetch: GET /api/lvfr-aemt/skills (app/lvfr-aemt/skills/page.tsx:152)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/skills (app/lvfr-aemt/skills/page.tsx:152)"}, "fullDescription": {"text": "`app/lvfr-aemt/skills/page.tsx:152` calls `GET /api/lvfr-aemt/skills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-232119125279a9f1", "name": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/skills/page.tsx:157)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/skills/page.tsx:157)"}, "fullDescription": {"text": "`app/lvfr-aemt/skills/page.tsx:157` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f5455c92fb049844", "name": "Dangling fetch: GET /api/lvfr-aemt/skills (app/lvfr-aemt/skills/page.tsx:162)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/skills (app/lvfr-aemt/skills/page.tsx:162)"}, "fullDescription": {"text": "`app/lvfr-aemt/skills/page.tsx:162` calls `GET /api/lvfr-aemt/skills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5716bfd3077d310c", "name": "Dangling fetch: GET /api/lvfr-aemt/skills/summary (app/lvfr-aemt/skills/page.tsx:194)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/skills/summary (app/lvfr-aemt/skills/page.tsx:194)"}, "fullDescription": {"text": "`app/lvfr-aemt/skills/page.tsx:194` calls `GET /api/lvfr-aemt/skills/summary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/skills/summary`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-28acbdc4add83f56", "name": "Dangling fetch: GET /api/lvfr-aemt/skills/matrix?nremt_only=false (app/lvfr-aemt/skills/page.tsx:203)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/skills/matrix?nremt_only=false (app/lvfr-aemt/skills/page.tsx:203)"}, "fullDescription": {"text": "`app/lvfr-aemt/skills/page.tsx:203` calls `GET /api/lvfr-aemt/skills/matrix?nremt_only=false` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/skills/matrix`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-76d0445efde6065d", "name": "Dangling fetch: GET /api/lvfr-aemt/skills/summary (app/lvfr-aemt/skills/page.tsx:211)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/skills/summary (app/lvfr-aemt/skills/page.tsx:211)"}, "fullDescription": {"text": "`app/lvfr-aemt/skills/page.tsx:211` calls `GET /api/lvfr-aemt/skills/summary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/skills/summary`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-be12f1c3a26534a2", "name": "Dangling fetch: GET /api/lvfr-aemt/skills/${studentId} (app/lvfr-aemt/skills/page.tsx:221)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/skills/${studentId} (app/lvfr-aemt/skills/page.tsx:221)"}, "fullDescription": {"text": "`app/lvfr-aemt/skills/page.tsx:221` calls `GET /api/lvfr-aemt/skills/${studentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/skills/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3b42fcf73280fb7c", "name": "Dangling fetch: GET /api/lvfr-aemt/skills/matrix?${params} (app/lvfr-aemt/skills/page.tsx:237)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/skills/matrix?${params} (app/lvfr-aemt/skills/page.tsx:237)"}, "fullDescription": {"text": "`app/lvfr-aemt/skills/page.tsx:237` calls `GET /api/lvfr-aemt/skills/matrix?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/skills/matrix`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b2ba87f77017e99", "name": "Dangling fetch: POST /api/lvfr-aemt/skills/attempts (app/lvfr-aemt/skills/page.tsx:280)", "shortDescription": {"text": "Dangling fetch: POST /api/lvfr-aemt/skills/attempts (app/lvfr-aemt/skills/page.tsx:280)"}, "fullDescription": {"text": "`app/lvfr-aemt/skills/page.tsx:280` calls `POST /api/lvfr-aemt/skills/attempts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/skills/attempts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3d4b058b0959d929", "name": "Dangling fetch: GET /api/lvfr-aemt/medications (app/lvfr-aemt/pharm/page.tsx:84)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/medications (app/lvfr-aemt/pharm/page.tsx:84)"}, "fullDescription": {"text": "`app/lvfr-aemt/pharm/page.tsx:84` calls `GET /api/lvfr-aemt/medications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/medications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-625f7af2c22ac777", "name": "Dangling fetch: GET /api/lvfr-aemt/pharm/checkpoints (app/lvfr-aemt/pharm/page.tsx:85)", "shortDescription": {"text": "Dangling fetch: GET /api/lvfr-aemt/pharm/checkpoints (app/lvfr-aemt/pharm/page.tsx:85)"}, "fullDescription": {"text": "`app/lvfr-aemt/pharm/page.tsx:85` calls `GET /api/lvfr-aemt/pharm/checkpoints` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/pharm/checkpoints`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-47138f57c664f551", "name": "Dangling fetch: POST /api/lvfr-aemt/pharm/checkpoints (app/lvfr-aemt/pharm/page.tsx:126)", "shortDescription": {"text": "Dangling fetch: POST /api/lvfr-aemt/pharm/checkpoints (app/lvfr-aemt/pharm/page.tsx:126)"}, "fullDescription": {"text": "`app/lvfr-aemt/pharm/page.tsx:126` calls `POST /api/lvfr-aemt/pharm/checkpoints` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/pharm/checkpoints`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bbffaaf9638761ac", "name": "Dangling fetch: GET /api/instructor/me (app/admin/page.tsx:690)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/page.tsx:690)"}, "fullDescription": {"text": "`app/admin/page.tsx:690` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-10ad214409ab55c0", "name": "Dangling fetch: GET /api/access-requests?status=pending (app/admin/page.tsx:699)", "shortDescription": {"text": "Dangling fetch: GET /api/access-requests?status=pending (app/admin/page.tsx:699)"}, "fullDescription": {"text": "`app/admin/page.tsx:699` calls `GET /api/access-requests?status=pending` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/access-requests`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0da21b08918ac88c", "name": "Dangling fetch: GET /api/instructor/me (app/admin/dashboard-defaults/page.tsx:108)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/dashboard-defaults/page.tsx:108)"}, "fullDescription": {"text": "`app/admin/dashboard-defaults/page.tsx:108` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c07c3abd7417997a", "name": "Dangling fetch: GET /api/admin/dashboard-defaults (app/admin/dashboard-defaults/page.tsx:126)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/dashboard-defaults (app/admin/dashboard-defaults/page.tsx:126)"}, "fullDescription": {"text": "`app/admin/dashboard-defaults/page.tsx:126` calls `GET /api/admin/dashboard-defaults` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/dashboard-defaults`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8ef32295a3abd530", "name": "Dangling fetch: PUT /api/admin/dashboard-defaults (app/admin/dashboard-defaults/page.tsx:208)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/dashboard-defaults (app/admin/dashboard-defaults/page.tsx:208)"}, "fullDescription": {"text": "`app/admin/dashboard-defaults/page.tsx:208` calls `PUT /api/admin/dashboard-defaults` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/dashboard-defaults`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b6ad94389a438d5", "name": "Dangling fetch: GET /api/instructor/me (app/admin/bulk-operations/page.tsx:262)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/bulk-operations/page.tsx:262)"}, "fullDescription": {"text": "`app/admin/bulk-operations/page.tsx:262` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d6d26732c1bf633", "name": "Dangling fetch: GET /api/admin/bulk-operations (app/admin/bulk-operations/page.tsx:284)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/bulk-operations (app/admin/bulk-operations/page.tsx:284)"}, "fullDescription": {"text": "`app/admin/bulk-operations/page.tsx:284` calls `GET /api/admin/bulk-operations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/bulk-operations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-23203f5d88f307e0", "name": "Dangling fetch: GET /api/cohorts (app/admin/bulk-operations/page.tsx:295)", "shortDescription": {"text": "Dangling fetch: GET /api/cohorts (app/admin/bulk-operations/page.tsx:295)"}, "fullDescription": {"text": "`app/admin/bulk-operations/page.tsx:295` calls `GET /api/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-105b1dd89f7d8855", "name": "Dangling fetch: POST /api/admin/bulk-operations (app/admin/bulk-operations/page.tsx:369)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/bulk-operations (app/admin/bulk-operations/page.tsx:369)"}, "fullDescription": {"text": "`app/admin/bulk-operations/page.tsx:369` calls `POST /api/admin/bulk-operations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/bulk-operations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-121d8f1e1662b994", "name": "Dangling fetch: POST /api/admin/bulk-operations (app/admin/bulk-operations/page.tsx:405)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/bulk-operations (app/admin/bulk-operations/page.tsx:405)"}, "fullDescription": {"text": "`app/admin/bulk-operations/page.tsx:405` calls `POST /api/admin/bulk-operations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/bulk-operations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d3a13b8851cddc81", "name": "Dangling fetch: POST /api/admin/bulk-operations (app/admin/bulk-operations/page.tsx:439)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/bulk-operations (app/admin/bulk-operations/page.tsx:439)"}, "fullDescription": {"text": "`app/admin/bulk-operations/page.tsx:439` calls `POST /api/admin/bulk-operations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/bulk-operations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5e9702b8760fb387", "name": "Dangling fetch: POST /api/admin/bulk-operations/${operationId}/rollback (app/admin/bulk-operations/page.tsx:472)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/bulk-operations/${operationId}/rollback (app/admin/bulk-operations/page.tsx:472)"}, "fullDescription": {"text": "`app/admin/bulk-operations/page.tsx:472` calls `POST /api/admin/bulk-operations/${operationId}/rollback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/bulk-operations/<p>/rollback`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6f7fca3430860236", "name": "Dangling fetch: GET /api/admin/equipment (app/admin/equipment/page.tsx:832)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/equipment (app/admin/equipment/page.tsx:832)"}, "fullDescription": {"text": "`app/admin/equipment/page.tsx:832` calls `GET /api/admin/equipment` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/equipment`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6cf9dd23b65cdfa4", "name": "Dangling fetch: GET /api/admin/equipment/checkout (app/admin/equipment/page.tsx:847)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/equipment/checkout (app/admin/equipment/page.tsx:847)"}, "fullDescription": {"text": "`app/admin/equipment/page.tsx:847` calls `GET /api/admin/equipment/checkout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/equipment/checkout`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-97e7ea1b4df58111", "name": "Dangling fetch: GET /api/instructor/me (app/admin/equipment/page.tsx:864)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/equipment/page.tsx:864)"}, "fullDescription": {"text": "`app/admin/equipment/page.tsx:864` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5a8becf18271500f", "name": "Dangling fetch: GET /api/admin/equipment (app/admin/equipment/page.tsx:920)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/equipment (app/admin/equipment/page.tsx:920)"}, "fullDescription": {"text": "`app/admin/equipment/page.tsx:920` calls `GET /api/admin/equipment` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/equipment`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-581982c04ed8ed99", "name": "Dangling fetch: DELETE /api/admin/equipment?id=${id} (app/admin/equipment/page.tsx:942)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/equipment?id=${id} (app/admin/equipment/page.tsx:942)"}, "fullDescription": {"text": "`app/admin/equipment/page.tsx:942` calls `DELETE /api/admin/equipment?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/equipment`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-20e4165e1e8658c2", "name": "Dangling fetch: POST /api/admin/equipment/checkout (app/admin/equipment/page.tsx:961)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/equipment/checkout (app/admin/equipment/page.tsx:961)"}, "fullDescription": {"text": "`app/admin/equipment/page.tsx:961` calls `POST /api/admin/equipment/checkout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/equipment/checkout`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-932ee561d333dc6e", "name": "Dangling fetch: PUT /api/admin/equipment/checkout (app/admin/equipment/page.tsx:994)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/equipment/checkout (app/admin/equipment/page.tsx:994)"}, "fullDescription": {"text": "`app/admin/equipment/page.tsx:994` calls `PUT /api/admin/equipment/checkout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/equipment/checkout`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-caf90bc7b7c34c6e", "name": "Dangling fetch: PATCH /api/admin/equipment (app/admin/equipment/page.tsx:1038)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/equipment (app/admin/equipment/page.tsx:1038)"}, "fullDescription": {"text": "`app/admin/equipment/page.tsx:1038` calls `PATCH /api/admin/equipment` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/equipment`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8e11a402d03bb64b", "name": "Dangling fetch: GET /api/admin/equipment/maintenance (app/admin/equipment/maintenance/page.tsx:729)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/equipment/maintenance (app/admin/equipment/maintenance/page.tsx:729)"}, "fullDescription": {"text": "`app/admin/equipment/maintenance/page.tsx:729` calls `GET /api/admin/equipment/maintenance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/equipment/maintenance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-584eedbc5d81ee50", "name": "Dangling fetch: GET /api/admin/equipment (app/admin/equipment/maintenance/page.tsx:744)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/equipment (app/admin/equipment/maintenance/page.tsx:744)"}, "fullDescription": {"text": "`app/admin/equipment/maintenance/page.tsx:744` calls `GET /api/admin/equipment` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/equipment`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-468971a0e981850f", "name": "Dangling fetch: GET /api/instructor/me (app/admin/equipment/maintenance/page.tsx:756)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/equipment/maintenance/page.tsx:756)"}, "fullDescription": {"text": "`app/admin/equipment/maintenance/page.tsx:756` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0f9160e8646efbef", "name": "Dangling fetch: PUT /api/admin/equipment/maintenance/${editRecord.id} (app/admin/equipment/maintenance/page.tsx:814)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/equipment/maintenance/${editRecord.id} (app/admin/equipment/maintenance/page.tsx:814)"}, "fullDescription": {"text": "`app/admin/equipment/maintenance/page.tsx:814` calls `PUT /api/admin/equipment/maintenance/${editRecord.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/equipment/maintenance/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-35ead676f327cb39", "name": "Dangling fetch: POST /api/admin/equipment/maintenance (app/admin/equipment/maintenance/page.tsx:820)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/equipment/maintenance (app/admin/equipment/maintenance/page.tsx:820)"}, "fullDescription": {"text": "`app/admin/equipment/maintenance/page.tsx:820` calls `POST /api/admin/equipment/maintenance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/equipment/maintenance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-24d00703c2a48236", "name": "Dangling fetch: PUT /api/admin/equipment/maintenance/${completeRecord.id} (app/admin/equipment/maintenance/page.tsx:845)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/equipment/maintenance/${completeRecord.id} (app/admin/equipment/maintenance/page.tsx:845)"}, "fullDescription": {"text": "`app/admin/equipment/maintenance/page.tsx:845` calls `PUT /api/admin/equipment/maintenance/${completeRecord.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/equipment/maintenance/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-160501f7632de682", "name": "Dangling fetch: DELETE /api/admin/equipment/maintenance/${id} (app/admin/equipment/maintenance/page.tsx:872)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/equipment/maintenance/${id} (app/admin/equipment/maintenance/page.tsx:872)"}, "fullDescription": {"text": "`app/admin/equipment/maintenance/page.tsx:872` calls `DELETE /api/admin/equipment/maintenance/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/equipment/maintenance/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-283746d2481673e8", "name": "Dangling fetch: GET /api/instructor/me (app/admin/user-activity/page.tsx:213)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/user-activity/page.tsx:213)"}, "fullDescription": {"text": "`app/admin/user-activity/page.tsx:213` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dfed159b27508f27", "name": "Dangling fetch: GET /api/admin/user-activity?period=${period} (app/admin/user-activity/page.tsx:230)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/user-activity?period=${period} (app/admin/user-activity/page.tsx:230)"}, "fullDescription": {"text": "`app/admin/user-activity/page.tsx:230` calls `GET /api/admin/user-activity?period=${period}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/user-activity`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5c4cafe793ae81d9", "name": "Dangling fetch: GET /api/osce/events (app/admin/osce-events/page.tsx:112)", "shortDescription": {"text": "Dangling fetch: GET /api/osce/events (app/admin/osce-events/page.tsx:112)"}, "fullDescription": {"text": "`app/admin/osce-events/page.tsx:112` calls `GET /api/osce/events` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bc8d89dea1e0adec", "name": "Dangling fetch: POST /api/osce/events (app/admin/osce-events/page.tsx:146)", "shortDescription": {"text": "Dangling fetch: POST /api/osce/events (app/admin/osce-events/page.tsx:146)"}, "fullDescription": {"text": "`app/admin/osce-events/page.tsx:146` calls `POST /api/osce/events` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-59db65a7457b087c", "name": "Dangling fetch: POST /api/osce/events/${eventId}/time-blocks (app/admin/osce-events/page.tsx:213)", "shortDescription": {"text": "Dangling fetch: POST /api/osce/events/${eventId}/time-blocks (app/admin/osce-events/page.tsx:213)"}, "fullDescription": {"text": "`app/admin/osce-events/page.tsx:213` calls `POST /api/osce/events/${eventId}/time-blocks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/time-blocks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-36ebb0bda20210b4", "name": "Dangling fetch: DELETE /api/osce/events/${id} (app/admin/osce-events/page.tsx:225)", "shortDescription": {"text": "Dangling fetch: DELETE /api/osce/events/${id} (app/admin/osce-events/page.tsx:225)"}, "fullDescription": {"text": "`app/admin/osce-events/page.tsx:225` calls `DELETE /api/osce/events/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c309fc76d2db9d5d", "name": "Dangling fetch: GET /api/osce/events/${eventId} (app/admin/osce-events/[id]/page.tsx:152)", "shortDescription": {"text": "Dangling fetch: GET /api/osce/events/${eventId} (app/admin/osce-events/[id]/page.tsx:152)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:152` calls `GET /api/osce/events/${eventId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eaaf8f77fe9c5cbb", "name": "Dangling fetch: DELETE /api/osce/events/${eventId}/test-data (app/admin/osce-events/[id]/page.tsx:187)", "shortDescription": {"text": "Dangling fetch: DELETE /api/osce/events/${eventId}/test-data (app/admin/osce-events/[id]/page.tsx:187)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:187` calls `DELETE /api/osce/events/${eventId}/test-data` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/test-data`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a3d7fea29c66cf1e", "name": "Dangling fetch: GET /api/osce/events/${eventId}/observers (app/admin/osce-events/[id]/page.tsx:382)", "shortDescription": {"text": "Dangling fetch: GET /api/osce/events/${eventId}/observers (app/admin/osce-events/[id]/page.tsx:382)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:382` calls `GET /api/osce/events/${eventId}/observers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/observers`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6f7de7a153c9bcf2", "name": "Dangling fetch: GET /api/osce/events/${eventId}/time-blocks (app/admin/osce-events/[id]/page.tsx:393)", "shortDescription": {"text": "Dangling fetch: GET /api/osce/events/${eventId}/time-blocks (app/admin/osce-events/[id]/page.tsx:393)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:393` calls `GET /api/osce/events/${eventId}/time-blocks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/time-blocks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e2d010a979d80dc", "name": "Dangling fetch: DELETE /api/osce/events/${eventId}/observers/${observerId} (app/admin/osce-events/[id]/page.tsx:408)", "shortDescription": {"text": "Dangling fetch: DELETE /api/osce/events/${eventId}/observers/${observerId} (app/admin/osce-events/[id]/page.tsx:408)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:408` calls `DELETE /api/osce/events/${eventId}/observers/${observerId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/observers/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-892b60053e3b6389", "name": "Dangling fetch: PUT /api/osce/events/${eventId}/observers/${showEditModal} (app/admin/osce-events/[id]/page.tsx:423)", "shortDescription": {"text": "Dangling fetch: PUT /api/osce/events/${eventId}/observers/${showEditModal} (app/admin/osce-events/[id]/page.tsx:423)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:423` calls `PUT /api/osce/events/${eventId}/observers/${showEditModal}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/observers/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5a68a6112ad3d150", "name": "Dangling fetch: POST /api/osce/events/${eventId}/observers (app/admin/osce-events/[id]/page.tsx:445)", "shortDescription": {"text": "Dangling fetch: POST /api/osce/events/${eventId}/observers (app/admin/osce-events/[id]/page.tsx:445)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:445` calls `POST /api/osce/events/${eventId}/observers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/observers`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d8d786d3cbcd751", "name": "Dangling fetch: POST /api/osce/events/${eventId}/observers (app/admin/osce-events/[id]/page.tsx:500)", "shortDescription": {"text": "Dangling fetch: POST /api/osce/events/${eventId}/observers (app/admin/osce-events/[id]/page.tsx:500)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:500` calls `POST /api/osce/events/${eventId}/observers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/observers`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-95ced29ded3f6247", "name": "Dangling fetch: DELETE /api/osce/events/${eventId}/observers/${obs.id} (app/admin/osce-events/[id]/page.tsx:528)", "shortDescription": {"text": "Dangling fetch: DELETE /api/osce/events/${eventId}/observers/${obs.id} (app/admin/osce-events/[id]/page.tsx:528)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:528` calls `DELETE /api/osce/events/${eventId}/observers/${obs.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/observers/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-67287fe34743cc63", "name": "Dangling fetch: PUT /api/osce/events/${eventId}/observers/${observerId} (app/admin/osce-events/[id]/page.tsx:571)", "shortDescription": {"text": "Dangling fetch: PUT /api/osce/events/${eventId}/observers/${observerId} (app/admin/osce-events/[id]/page.tsx:571)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:571` calls `PUT /api/osce/events/${eventId}/observers/${observerId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/observers/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ead157593a6c8f49", "name": "Dangling fetch: GET /api/osce/events/${eventId}/schedule (app/admin/osce-events/[id]/page.tsx:946)", "shortDescription": {"text": "Dangling fetch: GET /api/osce/events/${eventId}/schedule (app/admin/osce-events/[id]/page.tsx:946)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:946` calls `GET /api/osce/events/${eventId}/schedule` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/schedule`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1088a3158dc0991b", "name": "Dangling fetch: GET /api/osce/events/${eventId}/student-agencies (app/admin/osce-events/[id]/page.tsx:1078)", "shortDescription": {"text": "Dangling fetch: GET /api/osce/events/${eventId}/student-agencies (app/admin/osce-events/[id]/page.tsx:1078)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:1078` calls `GET /api/osce/events/${eventId}/student-agencies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/student-agencies`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e0ee66c07e041e6", "name": "Dangling fetch: POST /api/osce/events/${eventId}/student-agencies (app/admin/osce-events/[id]/page.tsx:1095)", "shortDescription": {"text": "Dangling fetch: POST /api/osce/events/${eventId}/student-agencies (app/admin/osce-events/[id]/page.tsx:1095)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:1095` calls `POST /api/osce/events/${eventId}/student-agencies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/student-agencies`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eb385e70a62c8c30", "name": "Dangling fetch: DELETE /api/osce/events/${eventId}/student-agencies (app/admin/osce-events/[id]/page.tsx:1109)", "shortDescription": {"text": "Dangling fetch: DELETE /api/osce/events/${eventId}/student-agencies (app/admin/osce-events/[id]/page.tsx:1109)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:1109` calls `DELETE /api/osce/events/${eventId}/student-agencies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/student-agencies`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-15c9ca58b8f52b2c", "name": "Dangling fetch: GET /api/osce/events/${eventId}/time-blocks (app/admin/osce-events/[id]/page.tsx:1245)", "shortDescription": {"text": "Dangling fetch: GET /api/osce/events/${eventId}/time-blocks (app/admin/osce-events/[id]/page.tsx:1245)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:1245` calls `GET /api/osce/events/${eventId}/time-blocks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/time-blocks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-03fa0ee6892e335d", "name": "Dangling fetch: POST /api/osce/events/${eventId}/time-blocks (app/admin/osce-events/[id]/page.tsx:1262)", "shortDescription": {"text": "Dangling fetch: POST /api/osce/events/${eventId}/time-blocks (app/admin/osce-events/[id]/page.tsx:1262)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:1262` calls `POST /api/osce/events/${eventId}/time-blocks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/time-blocks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ec2b50f970f55d25", "name": "Dangling fetch: PUT /api/osce/events/${eventId}/time-blocks (app/admin/osce-events/[id]/page.tsx:1288)", "shortDescription": {"text": "Dangling fetch: PUT /api/osce/events/${eventId}/time-blocks (app/admin/osce-events/[id]/page.tsx:1288)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:1288` calls `PUT /api/osce/events/${eventId}/time-blocks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/time-blocks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f4409e1f45b21095", "name": "Dangling fetch: DELETE /api/osce/events/${eventId}/time-blocks?id=${blockId} (app/admin/osce-events/[id]/page.tsx:1310)", "shortDescription": {"text": "Dangling fetch: DELETE /api/osce/events/${eventId}/time-blocks?id=${blockId} (app/admin/osce-events/[id]/page.tsx:1310)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:1310` calls `DELETE /api/osce/events/${eventId}/time-blocks?id=${blockId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/time-blocks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-075b5e2b8a728fd0", "name": "Dangling fetch: POST /api/osce/events/${eventId}/time-blocks (app/admin/osce-events/[id]/page.tsx:1347)", "shortDescription": {"text": "Dangling fetch: POST /api/osce/events/${eventId}/time-blocks (app/admin/osce-events/[id]/page.tsx:1347)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:1347` calls `POST /api/osce/events/${eventId}/time-blocks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/time-blocks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cb77969c610a3178", "name": "Dangling fetch: GET /api/osce/events/${eventId}/schedule (app/admin/osce-events/[id]/page.tsx:1544)", "shortDescription": {"text": "Dangling fetch: GET /api/osce/events/${eventId}/schedule (app/admin/osce-events/[id]/page.tsx:1544)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:1544` calls `GET /api/osce/events/${eventId}/schedule` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/schedule`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-96fb9f10692081f6", "name": "Dangling fetch: POST /api/osce/events/${eventId}/students/reorder (app/admin/osce-events/[id]/page.tsx:1575)", "shortDescription": {"text": "Dangling fetch: POST /api/osce/events/${eventId}/students/reorder (app/admin/osce-events/[id]/page.tsx:1575)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:1575` calls `POST /api/osce/events/${eventId}/students/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/students/reorder`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-82e342cbf338b371", "name": "Dangling fetch: PUT /api/osce/events/${event.id} (app/admin/osce-events/[id]/page.tsx:1679)", "shortDescription": {"text": "Dangling fetch: PUT /api/osce/events/${event.id} (app/admin/osce-events/[id]/page.tsx:1679)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:1679` calls `PUT /api/osce/events/${event.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-06583f99a7409758", "name": "Dangling fetch: DELETE /api/osce/events/${event.id} (app/admin/osce-events/[id]/page.tsx:1712)", "shortDescription": {"text": "Dangling fetch: DELETE /api/osce/events/${event.id} (app/admin/osce-events/[id]/page.tsx:1712)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/page.tsx:1712` calls `DELETE /api/osce/events/${event.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-006aa53f6d83d6a4", "name": "Dangling fetch: GET /api/osce/events/${eventId}/checklist (app/admin/osce-events/[id]/checklist/page.tsx:155)", "shortDescription": {"text": "Dangling fetch: GET /api/osce/events/${eventId}/checklist (app/admin/osce-events/[id]/checklist/page.tsx:155)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/checklist/page.tsx:155` calls `GET /api/osce/events/${eventId}/checklist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/checklist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-40bf2e44e41c9701", "name": "Dangling fetch: GET /api/osce/events/${eventId} (app/admin/osce-events/[id]/checklist/page.tsx:156)", "shortDescription": {"text": "Dangling fetch: GET /api/osce/events/${eventId} (app/admin/osce-events/[id]/checklist/page.tsx:156)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/checklist/page.tsx:156` calls `GET /api/osce/events/${eventId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a2278cf7e3f6f7e6", "name": "Dangling fetch: PUT /api/osce/events/${eventId}/checklist (app/admin/osce-events/[id]/checklist/page.tsx:189)", "shortDescription": {"text": "Dangling fetch: PUT /api/osce/events/${eventId}/checklist (app/admin/osce-events/[id]/checklist/page.tsx:189)"}, "fullDescription": {"text": "`app/admin/osce-events/[id]/checklist/page.tsx:189` calls `PUT /api/osce/events/${eventId}/checklist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events/<p>/checklist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b056fd5b7566d70d", "name": "Dangling fetch: GET /api/instructor/me (app/admin/access-requests/page.tsx:331)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/access-requests/page.tsx:331)"}, "fullDescription": {"text": "`app/admin/access-requests/page.tsx:331` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b89751360c904cc3", "name": "Dangling fetch: GET /api/access-requests?status=${statusFilter} (app/admin/access-requests/page.tsx:349)", "shortDescription": {"text": "Dangling fetch: GET /api/access-requests?status=${statusFilter} (app/admin/access-requests/page.tsx:349)"}, "fullDescription": {"text": "`app/admin/access-requests/page.tsx:349` calls `GET /api/access-requests?status=${statusFilter}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/access-requests`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-600274bb1e1b7238", "name": "Dangling fetch: PUT /api/access-requests/${id} (app/admin/access-requests/page.tsx:376)", "shortDescription": {"text": "Dangling fetch: PUT /api/access-requests/${id} (app/admin/access-requests/page.tsx:376)"}, "fullDescription": {"text": "`app/admin/access-requests/page.tsx:376` calls `PUT /api/access-requests/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/access-requests/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-57f552c9946097c3", "name": "Dangling fetch: PUT /api/access-requests/${denyTarget.id} (app/admin/access-requests/page.tsx:398)", "shortDescription": {"text": "Dangling fetch: PUT /api/access-requests/${denyTarget.id} (app/admin/access-requests/page.tsx:398)"}, "fullDescription": {"text": "`app/admin/access-requests/page.tsx:398` calls `PUT /api/access-requests/${denyTarget.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/access-requests/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c08f864d47236880", "name": "Dangling fetch: GET /api/instructor/me (app/admin/data-export/page.tsx:178)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/data-export/page.tsx:178)"}, "fullDescription": {"text": "`app/admin/data-export/page.tsx:178` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd895bf0e6ba9094", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=false&include_archived=true (app/admin/data-export/page.tsx:2", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=false&include_archived=true (app/admin/data-export/page.tsx:202)"}, "fullDescription": {"text": "`app/admin/data-export/page.tsx:202` calls `GET /api/lab-management/cohorts?activeOnly=false&include_archived=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-01f334da6552c636", "name": "Dangling fetch: POST /api/admin/data-export (app/admin/data-export/page.tsx:216)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/data-export (app/admin/data-export/page.tsx:216)"}, "fullDescription": {"text": "`app/admin/data-export/page.tsx:216` calls `POST /api/admin/data-export` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/data-export`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-01d2a8aecc0cf7fd", "name": "Dangling fetch: GET /api/admin/data-export?${params} (app/admin/data-export/page.tsx:244)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/data-export?${params} (app/admin/data-export/page.tsx:244)"}, "fullDescription": {"text": "`app/admin/data-export/page.tsx:244` calls `GET /api/admin/data-export?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/data-export`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-521c01ef2e73c525", "name": "Dangling fetch: PATCH /api/feedback (app/admin/feedback/page.tsx:137)", "shortDescription": {"text": "Dangling fetch: PATCH /api/feedback (app/admin/feedback/page.tsx:137)"}, "fullDescription": {"text": "`app/admin/feedback/page.tsx:137` calls `PATCH /api/feedback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/feedback`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-54454a39ae9c8234", "name": "Dangling fetch: PATCH /api/feedback (app/admin/feedback/page.tsx:156)", "shortDescription": {"text": "Dangling fetch: PATCH /api/feedback (app/admin/feedback/page.tsx:156)"}, "fullDescription": {"text": "`app/admin/feedback/page.tsx:156` calls `PATCH /api/feedback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/feedback`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4541e465a60a3e7d", "name": "Dangling fetch: PATCH /api/feedback (app/admin/feedback/page.tsx:175)", "shortDescription": {"text": "Dangling fetch: PATCH /api/feedback (app/admin/feedback/page.tsx:175)"}, "fullDescription": {"text": "`app/admin/feedback/page.tsx:175` calls `PATCH /api/feedback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/feedback`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-514375d39f108476", "name": "Dangling fetch: POST /api/admin/feedback/import (app/admin/feedback/page.tsx:344)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/feedback/import (app/admin/feedback/page.tsx:344)"}, "fullDescription": {"text": "`app/admin/feedback/page.tsx:344` calls `POST /api/admin/feedback/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/feedback/import`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5de0c74171dd3d45", "name": "Dangling fetch: GET /api/instructor/me (app/admin/users/page.tsx:67)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/users/page.tsx:67)"}, "fullDescription": {"text": "`app/admin/users/page.tsx:67` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-59ee055ad1513f62", "name": "Dangling fetch: GET /api/lab-management/users?activeOnly=false (app/admin/users/page.tsx:86)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/users?activeOnly=false (app/admin/users/page.tsx:86)"}, "fullDescription": {"text": "`app/admin/users/page.tsx:86` calls `GET /api/lab-management/users?activeOnly=false` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/users`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3f0f076d6fe37f8b", "name": "Dangling fetch: PATCH /api/admin/users (app/admin/users/page.tsx:113)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/users (app/admin/users/page.tsx:113)"}, "fullDescription": {"text": "`app/admin/users/page.tsx:113` calls `PATCH /api/admin/users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/users`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9409303ddd4ea056", "name": "Dangling fetch: PATCH /api/admin/users (app/admin/users/page.tsx:134)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/users (app/admin/users/page.tsx:134)"}, "fullDescription": {"text": "`app/admin/users/page.tsx:134` calls `PATCH /api/admin/users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/users`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-77e82d2f8989d8b4", "name": "Dangling fetch: PATCH /api/admin/users (app/admin/users/page.tsx:155)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/users (app/admin/users/page.tsx:155)"}, "fullDescription": {"text": "`app/admin/users/page.tsx:155` calls `PATCH /api/admin/users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/users`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-821ebf8b3494269e", "name": "Dangling fetch: GET /api/academics/cohorts (app/admin/users/page.tsx:176)", "shortDescription": {"text": "Dangling fetch: GET /api/academics/cohorts (app/admin/users/page.tsx:176)"}, "fullDescription": {"text": "`app/admin/users/page.tsx:176` calls `GET /api/academics/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/academics/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-562f29afe386a782", "name": "Dangling fetch: PATCH /api/admin/users (app/admin/users/page.tsx:194)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/users (app/admin/users/page.tsx:194)"}, "fullDescription": {"text": "`app/admin/users/page.tsx:194` calls `PATCH /api/admin/users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/users`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-88414b5a3699ab95", "name": "Dangling fetch: GET /api/timer-display (app/admin/timer-displays/page.tsx:69)", "shortDescription": {"text": "Dangling fetch: GET /api/timer-display (app/admin/timer-displays/page.tsx:69)"}, "fullDescription": {"text": "`app/admin/timer-displays/page.tsx:69` calls `GET /api/timer-display` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/timer-display`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-29bd3b4e2966e234", "name": "Dangling fetch: GET /api/lab-management/locations?type=room (app/admin/timer-displays/page.tsx:70)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/locations?type=room (app/admin/timer-displays/page.tsx:70)"}, "fullDescription": {"text": "`app/admin/timer-displays/page.tsx:70` calls `GET /api/lab-management/locations?type=room` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/locations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-17dd11a5eabf5fa2", "name": "Dangling fetch: POST /api/timer-display (app/admin/timer-displays/page.tsx:102)", "shortDescription": {"text": "Dangling fetch: POST /api/timer-display (app/admin/timer-displays/page.tsx:102)"}, "fullDescription": {"text": "`app/admin/timer-displays/page.tsx:102` calls `POST /api/timer-display` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/timer-display`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dad8fa3f7f19f7b5", "name": "Dangling fetch: PATCH /api/timer-display (app/admin/timer-displays/page.tsx:131)", "shortDescription": {"text": "Dangling fetch: PATCH /api/timer-display (app/admin/timer-displays/page.tsx:131)"}, "fullDescription": {"text": "`app/admin/timer-displays/page.tsx:131` calls `PATCH /api/timer-display` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/timer-display`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83895976afe413a4", "name": "Dangling fetch: DELETE /api/timer-display?id=${tokenId} (app/admin/timer-displays/page.tsx:155)", "shortDescription": {"text": "Dangling fetch: DELETE /api/timer-display?id=${tokenId} (app/admin/timer-displays/page.tsx:155)"}, "fullDescription": {"text": "`app/admin/timer-displays/page.tsx:155` calls `DELETE /api/timer-display?id=${tokenId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/timer-display`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0fc782b0c085fbfd", "name": "Dangling fetch: GET /api/admin/users?role=student&limit=500 (app/admin/alumni/page.tsx:571)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/users?role=student&limit=500 (app/admin/alumni/page.tsx:571)"}, "fullDescription": {"text": "`app/admin/alumni/page.tsx:571` calls `GET /api/admin/users?role=student&limit=500` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/users`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b6a2276aa531252b", "name": "Dangling fetch: GET /api/instructor/me (app/admin/alumni/page.tsx:937)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/alumni/page.tsx:937)"}, "fullDescription": {"text": "`app/admin/alumni/page.tsx:937` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ce5ce47a9953fa31", "name": "Dangling fetch: GET /api/admin/stats (app/admin/alumni/page.tsx:953)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/stats (app/admin/alumni/page.tsx:953)"}, "fullDescription": {"text": "`app/admin/alumni/page.tsx:953` calls `GET /api/admin/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/stats`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3b91a9a49fe94ed0", "name": "Dangling fetch: GET /api/admin/broadcast (app/admin/alumni/page.tsx:964)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/broadcast (app/admin/alumni/page.tsx:964)"}, "fullDescription": {"text": "`app/admin/alumni/page.tsx:964` calls `GET /api/admin/broadcast` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/broadcast`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f7f804d736ef972c", "name": "Dangling fetch: GET /api/admin/alumni?${params.toString()} (app/admin/alumni/page.tsx:983)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/alumni?${params.toString()} (app/admin/alumni/page.tsx:983)"}, "fullDescription": {"text": "`app/admin/alumni/page.tsx:983` calls `GET /api/admin/alumni?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/alumni`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3e5d795a2bb2858b", "name": "Dangling fetch: PUT /api/admin/alumni/${editRecord.id} (app/admin/alumni/page.tsx:1008)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/alumni/${editRecord.id} (app/admin/alumni/page.tsx:1008)"}, "fullDescription": {"text": "`app/admin/alumni/page.tsx:1008` calls `PUT /api/admin/alumni/${editRecord.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/alumni/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-52a5896534a626c0", "name": "Dangling fetch: POST /api/admin/alumni (app/admin/alumni/page.tsx:1026)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/alumni (app/admin/alumni/page.tsx:1026)"}, "fullDescription": {"text": "`app/admin/alumni/page.tsx:1026` calls `POST /api/admin/alumni` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/alumni`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3c4bc0566c6fcf29", "name": "Dangling fetch: POST /api/admin/alumni (app/admin/alumni/page.tsx:1043)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/alumni (app/admin/alumni/page.tsx:1043)"}, "fullDescription": {"text": "`app/admin/alumni/page.tsx:1043` calls `POST /api/admin/alumni` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/alumni`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fe61d4f0b1ef4ff0", "name": "Dangling fetch: DELETE /api/admin/alumni/${id} (app/admin/alumni/page.tsx:1061)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/alumni/${id} (app/admin/alumni/page.tsx:1061)"}, "fullDescription": {"text": "`app/admin/alumni/page.tsx:1061` calls `DELETE /api/admin/alumni/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/alumni/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-480e728c29ec434f", "name": "Dangling fetch: GET /api/instructor/me (app/admin/scenarios/page.tsx:35)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/scenarios/page.tsx:35)"}, "fullDescription": {"text": "`app/admin/scenarios/page.tsx:35` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f77bfd59916f9853", "name": "Dangling fetch: GET /api/admin/scenarios/audit (app/admin/scenarios/audit/page.tsx:268)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/scenarios/audit (app/admin/scenarios/audit/page.tsx:268)"}, "fullDescription": {"text": "`app/admin/scenarios/audit/page.tsx:268` calls `GET /api/admin/scenarios/audit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scenarios/audit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-722dc12fc2511721", "name": "Dangling fetch: GET /api/admin/scenarios/generate-content?pending_review=true (app/admin/scenarios/audit/page.tsx:269)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/scenarios/generate-content?pending_review=true (app/admin/scenarios/audit/page.tsx:269)"}, "fullDescription": {"text": "`app/admin/scenarios/audit/page.tsx:269` calls `GET /api/admin/scenarios/generate-content?pending_review=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scenarios/generate-content`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa49e5185a5196e8", "name": "Dangling fetch: POST /api/admin/scenarios/auto-fill (app/admin/scenarios/audit/page.tsx:291)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/scenarios/auto-fill (app/admin/scenarios/audit/page.tsx:291)"}, "fullDescription": {"text": "`app/admin/scenarios/audit/page.tsx:291` calls `POST /api/admin/scenarios/auto-fill` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scenarios/auto-fill`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4ed9459d9174c5b0", "name": "Dangling fetch: POST /api/admin/scenarios/auto-fill (app/admin/scenarios/audit/page.tsx:314)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/scenarios/auto-fill (app/admin/scenarios/audit/page.tsx:314)"}, "fullDescription": {"text": "`app/admin/scenarios/audit/page.tsx:314` calls `POST /api/admin/scenarios/auto-fill` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scenarios/auto-fill`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a1b38e02c6707b7", "name": "Dangling fetch: POST /api/admin/scenarios/generate-content (app/admin/scenarios/audit/page.tsx:362)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/scenarios/generate-content (app/admin/scenarios/audit/page.tsx:362)"}, "fullDescription": {"text": "`app/admin/scenarios/audit/page.tsx:362` calls `POST /api/admin/scenarios/generate-content` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scenarios/generate-content`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3cccc5f27c5fd38c", "name": "Dangling fetch: POST /api/admin/scenarios/generate-content (app/admin/scenarios/audit/page.tsx:393)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/scenarios/generate-content (app/admin/scenarios/audit/page.tsx:393)"}, "fullDescription": {"text": "`app/admin/scenarios/audit/page.tsx:393` calls `POST /api/admin/scenarios/generate-content` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scenarios/generate-content`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-76eee9b225c1e168", "name": "Dangling fetch: POST /api/admin/scenarios/generate-content (app/admin/scenarios/audit/page.tsx:478)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/scenarios/generate-content (app/admin/scenarios/audit/page.tsx:478)"}, "fullDescription": {"text": "`app/admin/scenarios/audit/page.tsx:478` calls `POST /api/admin/scenarios/generate-content` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scenarios/generate-content`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f0e538e47da0e4bb", "name": "Dangling fetch: GET /api/admin/scenarios/transform (app/admin/scenarios/transform/page.tsx:153)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/scenarios/transform (app/admin/scenarios/transform/page.tsx:153)"}, "fullDescription": {"text": "`app/admin/scenarios/transform/page.tsx:153` calls `GET /api/admin/scenarios/transform` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scenarios/transform`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5ef8a5f10394bffd", "name": "Dangling fetch: POST /api/admin/scenarios/transform (app/admin/scenarios/transform/page.tsx:207)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/scenarios/transform (app/admin/scenarios/transform/page.tsx:207)"}, "fullDescription": {"text": "`app/admin/scenarios/transform/page.tsx:207` calls `POST /api/admin/scenarios/transform` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scenarios/transform`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-82259bc6919a1f19", "name": "Dangling fetch: GET /api/instructor/me (app/admin/scenarios/bulk-import/page.tsx:230)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/scenarios/bulk-import/page.tsx:230)"}, "fullDescription": {"text": "`app/admin/scenarios/bulk-import/page.tsx:230` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-defc0488fc7c598c", "name": "Dangling fetch: POST /api/admin/scenarios/bulk-import (app/admin/scenarios/bulk-import/page.tsx:264)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/scenarios/bulk-import (app/admin/scenarios/bulk-import/page.tsx:264)"}, "fullDescription": {"text": "`app/admin/scenarios/bulk-import/page.tsx:264` calls `POST /api/admin/scenarios/bulk-import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scenarios/bulk-import`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-35d783f61ef239cd", "name": "Dangling fetch: POST /api/admin/scenarios/bulk-import/commit (app/admin/scenarios/bulk-import/page.tsx:316)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/scenarios/bulk-import/commit (app/admin/scenarios/bulk-import/page.tsx:316)"}, "fullDescription": {"text": "`app/admin/scenarios/bulk-import/page.tsx:316` calls `POST /api/admin/scenarios/bulk-import/commit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scenarios/bulk-import/commit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-89ce7cdc938f3117", "name": "Dangling fetch: GET /api/admin/scenarios/transform (app/admin/scenarios/bulk-import/page.tsx:398)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/scenarios/transform (app/admin/scenarios/bulk-import/page.tsx:398)"}, "fullDescription": {"text": "`app/admin/scenarios/bulk-import/page.tsx:398` calls `GET /api/admin/scenarios/transform` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scenarios/transform`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0c306616600ad02c", "name": "Dangling fetch: POST /api/admin/scenarios/transform (app/admin/scenarios/bulk-import/page.tsx:417)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/scenarios/transform (app/admin/scenarios/bulk-import/page.tsx:417)"}, "fullDescription": {"text": "`app/admin/scenarios/bulk-import/page.tsx:417` calls `POST /api/admin/scenarios/transform` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scenarios/transform`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-05e85c23abb1c5c2", "name": "Dangling fetch: GET /api/instructor/me (app/admin/scenarios/cleanup/page.tsx:89)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/scenarios/cleanup/page.tsx:89)"}, "fullDescription": {"text": "`app/admin/scenarios/cleanup/page.tsx:89` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2f393455ccdbd069", "name": "Dangling fetch: GET /api/admin/scenarios/audit (app/admin/scenarios/cleanup/page.tsx:101)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/scenarios/audit (app/admin/scenarios/cleanup/page.tsx:101)"}, "fullDescription": {"text": "`app/admin/scenarios/cleanup/page.tsx:101` calls `GET /api/admin/scenarios/audit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scenarios/audit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6cec730e1b3027a3", "name": "Dangling fetch: POST /api/admin/scenarios/extract-demographics (app/admin/scenarios/cleanup/page.tsx:130)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/scenarios/extract-demographics (app/admin/scenarios/cleanup/page.tsx:130)"}, "fullDescription": {"text": "`app/admin/scenarios/cleanup/page.tsx:130` calls `POST /api/admin/scenarios/extract-demographics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scenarios/extract-demographics`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-98a33b3ca8655a44", "name": "Dangling fetch: POST /api/admin/scenarios/extract-demographics (app/admin/scenarios/cleanup/page.tsx:158)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/scenarios/extract-demographics (app/admin/scenarios/cleanup/page.tsx:158)"}, "fullDescription": {"text": "`app/admin/scenarios/cleanup/page.tsx:158` calls `POST /api/admin/scenarios/extract-demographics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scenarios/extract-demographics`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ee8e125ad0c24411", "name": "Dangling fetch: GET /api/volunteer/events (app/admin/volunteer-events/page.tsx:183)", "shortDescription": {"text": "Dangling fetch: GET /api/volunteer/events (app/admin/volunteer-events/page.tsx:183)"}, "fullDescription": {"text": "`app/admin/volunteer-events/page.tsx:183` calls `GET /api/volunteer/events` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0721d91424b26003", "name": "Dangling fetch: GET /api/volunteer/invites (app/admin/volunteer-events/page.tsx:184)", "shortDescription": {"text": "Dangling fetch: GET /api/volunteer/invites (app/admin/volunteer-events/page.tsx:184)"}, "fullDescription": {"text": "`app/admin/volunteer-events/page.tsx:184` calls `GET /api/volunteer/invites` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/invites`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-774e6ef67972745d", "name": "Dangling fetch: POST /api/volunteer/events (app/admin/volunteer-events/page.tsx:304)", "shortDescription": {"text": "Dangling fetch: POST /api/volunteer/events (app/admin/volunteer-events/page.tsx:304)"}, "fullDescription": {"text": "`app/admin/volunteer-events/page.tsx:304` calls `POST /api/volunteer/events` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-007d84541de4902e", "name": "Dangling fetch: POST /api/volunteer/events (app/admin/volunteer-events/page.tsx:320)", "shortDescription": {"text": "Dangling fetch: POST /api/volunteer/events (app/admin/volunteer-events/page.tsx:320)"}, "fullDescription": {"text": "`app/admin/volunteer-events/page.tsx:320` calls `POST /api/volunteer/events` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b0b50a192ecb0dcf", "name": "Dangling fetch: POST /api/volunteer/events (app/admin/volunteer-events/page.tsx:355)", "shortDescription": {"text": "Dangling fetch: POST /api/volunteer/events (app/admin/volunteer-events/page.tsx:355)"}, "fullDescription": {"text": "`app/admin/volunteer-events/page.tsx:355` calls `POST /api/volunteer/events` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cfdd5d0b6f9634c5", "name": "Dangling fetch: PUT /api/volunteer/events/${editingEvent.id} (app/admin/volunteer-events/page.tsx:438)", "shortDescription": {"text": "Dangling fetch: PUT /api/volunteer/events/${editingEvent.id} (app/admin/volunteer-events/page.tsx:438)"}, "fullDescription": {"text": "`app/admin/volunteer-events/page.tsx:438` calls `PUT /api/volunteer/events/${editingEvent.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/events/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9e96c19a63844bfd", "name": "Dangling fetch: GET /api/volunteer/events/${event.id} (app/admin/volunteer-events/page.tsx:484)", "shortDescription": {"text": "Dangling fetch: GET /api/volunteer/events/${event.id} (app/admin/volunteer-events/page.tsx:484)"}, "fullDescription": {"text": "`app/admin/volunteer-events/page.tsx:484` calls `GET /api/volunteer/events/${event.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/events/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ecfcb8e3a9b6fa95", "name": "Dangling fetch: POST /api/volunteer/events/${correctionEvent.id}/send-correction (app/admin/volunteer-events/page.tsx:52", "shortDescription": {"text": "Dangling fetch: POST /api/volunteer/events/${correctionEvent.id}/send-correction (app/admin/volunteer-events/page.tsx:525)"}, "fullDescription": {"text": "`app/admin/volunteer-events/page.tsx:525` calls `POST /api/volunteer/events/${correctionEvent.id}/send-correction` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/events/<p>/send-correction`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b5063bc91fd9ddc5", "name": "Dangling fetch: POST /api/volunteer/events (app/admin/volunteer-events/page.tsx:556)", "shortDescription": {"text": "Dangling fetch: POST /api/volunteer/events (app/admin/volunteer-events/page.tsx:556)"}, "fullDescription": {"text": "`app/admin/volunteer-events/page.tsx:556` calls `POST /api/volunteer/events` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-85605b3d734675a8", "name": "Dangling fetch: POST /api/volunteer/events (app/admin/volunteer-events/page.tsx:587)", "shortDescription": {"text": "Dangling fetch: POST /api/volunteer/events (app/admin/volunteer-events/page.tsx:587)"}, "fullDescription": {"text": "`app/admin/volunteer-events/page.tsx:587` calls `POST /api/volunteer/events` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7cdbba4b4dedf3e8", "name": "Dangling fetch: POST /api/volunteer/invites (app/admin/volunteer-events/page.tsx:625)", "shortDescription": {"text": "Dangling fetch: POST /api/volunteer/invites (app/admin/volunteer-events/page.tsx:625)"}, "fullDescription": {"text": "`app/admin/volunteer-events/page.tsx:625` calls `POST /api/volunteer/invites` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/invites`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2bfad176d72c80e3", "name": "Dangling fetch: DELETE /api/volunteer/events/${id} (app/admin/volunteer-events/page.tsx:659)", "shortDescription": {"text": "Dangling fetch: DELETE /api/volunteer/events/${id} (app/admin/volunteer-events/page.tsx:659)"}, "fullDescription": {"text": "`app/admin/volunteer-events/page.tsx:659` calls `DELETE /api/volunteer/events/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/events/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d35ab86ea9b3c7c0", "name": "Dangling fetch: DELETE /api/volunteer/invites?id=${id} (app/admin/volunteer-events/page.tsx:672)", "shortDescription": {"text": "Dangling fetch: DELETE /api/volunteer/invites?id=${id} (app/admin/volunteer-events/page.tsx:672)"}, "fullDescription": {"text": "`app/admin/volunteer-events/page.tsx:672` calls `DELETE /api/volunteer/invites?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/invites`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1b83b62d025529c6", "name": "Dangling fetch: GET /api/volunteer/lab-tokens (app/admin/volunteer-events/results/page.tsx:125)", "shortDescription": {"text": "Dangling fetch: GET /api/volunteer/lab-tokens (app/admin/volunteer-events/results/page.tsx:125)"}, "fullDescription": {"text": "`app/admin/volunteer-events/results/page.tsx:125` calls `GET /api/volunteer/lab-tokens` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/lab-tokens`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6ed47d5842c106e8", "name": "Dangling fetch: POST /api/volunteer/lab-tokens (app/admin/volunteer-events/results/page.tsx:148)", "shortDescription": {"text": "Dangling fetch: POST /api/volunteer/lab-tokens (app/admin/volunteer-events/results/page.tsx:148)"}, "fullDescription": {"text": "`app/admin/volunteer-events/results/page.tsx:148` calls `POST /api/volunteer/lab-tokens` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/lab-tokens`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-001b29772502fc8e", "name": "Dangling fetch: POST /api/volunteer/lab-tokens/bulk (app/admin/volunteer-events/results/page.tsx:174)", "shortDescription": {"text": "Dangling fetch: POST /api/volunteer/lab-tokens/bulk (app/admin/volunteer-events/results/page.tsx:174)"}, "fullDescription": {"text": "`app/admin/volunteer-events/results/page.tsx:174` calls `POST /api/volunteer/lab-tokens/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/lab-tokens/bulk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1a05bdbefaaf2f5c", "name": "Dangling fetch: GET /api/volunteer/results${params} (app/admin/volunteer-events/results/page.tsx:203)", "shortDescription": {"text": "Dangling fetch: GET /api/volunteer/results${params} (app/admin/volunteer-events/results/page.tsx:203)"}, "fullDescription": {"text": "`app/admin/volunteer-events/results/page.tsx:203` calls `GET /api/volunteer/results${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/results/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-02a3411bd07f20e2", "name": "Dangling fetch: DELETE /api/volunteer/register?id=${regId} (app/admin/volunteer-events/results/page.tsx:236)", "shortDescription": {"text": "Dangling fetch: DELETE /api/volunteer/register?id=${regId} (app/admin/volunteer-events/results/page.tsx:236)"}, "fullDescription": {"text": "`app/admin/volunteer-events/results/page.tsx:236` calls `DELETE /api/volunteer/register?id=${regId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/register`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2c4db53b93da0a7e", "name": "Dangling fetch: PUT /api/volunteer/register?id=${editingReg.id} (app/admin/volunteer-events/results/page.tsx:262)", "shortDescription": {"text": "Dangling fetch: PUT /api/volunteer/register?id=${editingReg.id} (app/admin/volunteer-events/results/page.tsx:262)"}, "fullDescription": {"text": "`app/admin/volunteer-events/results/page.tsx:262` calls `PUT /api/volunteer/register?id=${editingReg.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/register`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2836f825ede5dff7", "name": "Dangling fetch: GET /api/instructor/me (app/admin/broadcast/page.tsx:329)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/broadcast/page.tsx:329)"}, "fullDescription": {"text": "`app/admin/broadcast/page.tsx:329` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-edeba180efa448af", "name": "Dangling fetch: GET /api/admin/broadcast (app/admin/broadcast/page.tsx:347)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/broadcast (app/admin/broadcast/page.tsx:347)"}, "fullDescription": {"text": "`app/admin/broadcast/page.tsx:347` calls `GET /api/admin/broadcast` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/broadcast`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f3511022c93fb9e9", "name": "Dangling fetch: GET /api/admin/broadcast/history?limit=20 (app/admin/broadcast/page.tsx:362)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/broadcast/history?limit=20 (app/admin/broadcast/page.tsx:362)"}, "fullDescription": {"text": "`app/admin/broadcast/page.tsx:362` calls `GET /api/admin/broadcast/history?limit=20` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/broadcast/history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b24a445273d4fba7", "name": "Dangling fetch: POST /api/admin/broadcast (app/admin/broadcast/page.tsx:466)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/broadcast (app/admin/broadcast/page.tsx:466)"}, "fullDescription": {"text": "`app/admin/broadcast/page.tsx:466` calls `POST /api/admin/broadcast` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/broadcast`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c5f537e6c500d0ef", "name": "Dangling fetch: GET /api/instructor/me (app/admin/open-labs/page.tsx:176)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/open-labs/page.tsx:176)"}, "fullDescription": {"text": "`app/admin/open-labs/page.tsx:176` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e0057621fa4399f3", "name": "Dangling fetch: GET /api/admin/open-labs (app/admin/open-labs/page.tsx:192)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/open-labs (app/admin/open-labs/page.tsx:192)"}, "fullDescription": {"text": "`app/admin/open-labs/page.tsx:192` calls `GET /api/admin/open-labs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/open-labs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b2f3c3637a192f03", "name": "Dangling fetch: PATCH /api/admin/open-labs (app/admin/open-labs/page.tsx:217)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/open-labs (app/admin/open-labs/page.tsx:217)"}, "fullDescription": {"text": "`app/admin/open-labs/page.tsx:217` calls `PATCH /api/admin/open-labs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/open-labs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4e2721862eb7aba", "name": "Dangling fetch: PATCH /api/admin/open-labs (app/admin/open-labs/page.tsx:239)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/open-labs (app/admin/open-labs/page.tsx:239)"}, "fullDescription": {"text": "`app/admin/open-labs/page.tsx:239` calls `PATCH /api/admin/open-labs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/open-labs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9851e04e2abe0630", "name": "Dangling fetch: GET /api/instructor/me (app/admin/open-labs/qr-code/page.tsx:34)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/open-labs/qr-code/page.tsx:34)"}, "fullDescription": {"text": "`app/admin/open-labs/qr-code/page.tsx:34` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f9f6b7de37568aa7", "name": "Dangling fetch: GET /api/admin/ferpa?${params} (app/admin/ferpa-compliance/page.tsx:108)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/ferpa?${params} (app/admin/ferpa-compliance/page.tsx:108)"}, "fullDescription": {"text": "`app/admin/ferpa-compliance/page.tsx:108` calls `GET /api/admin/ferpa?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ferpa`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-18f5f862d9301a35", "name": "Dangling fetch: PUT /api/ferpa/release (app/admin/ferpa-compliance/page.tsx:320)", "shortDescription": {"text": "Dangling fetch: PUT /api/ferpa/release (app/admin/ferpa-compliance/page.tsx:320)"}, "fullDescription": {"text": "`app/admin/ferpa-compliance/page.tsx:320` calls `PUT /api/ferpa/release` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ferpa/release`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6791f7fa5d7a5042", "name": "Dangling fetch: POST /api/admin/ferpa (app/admin/ferpa-compliance/page.tsx:632)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/ferpa (app/admin/ferpa-compliance/page.tsx:632)"}, "fullDescription": {"text": "`app/admin/ferpa-compliance/page.tsx:632` calls `POST /api/admin/ferpa` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/ferpa`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cbb1df811a98229f", "name": "Dangling fetch: GET /api/admin/webhooks/${webhook.id}/logs?page=${page}&limit=25 (app/admin/webhooks/page.tsx:419)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/webhooks/${webhook.id}/logs?page=${page}&limit=25 (app/admin/webhooks/page.tsx:419)"}, "fullDescription": {"text": "`app/admin/webhooks/page.tsx:419` calls `GET /api/admin/webhooks/${webhook.id}/logs?page=${page}&limit=25` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/webhooks/<p>/logs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5aa4cdd2a295aa27", "name": "Dangling fetch: POST /api/admin/webhooks/${webhook.id}/test (app/admin/webhooks/page.tsx:441)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/webhooks/${webhook.id}/test (app/admin/webhooks/page.tsx:441)"}, "fullDescription": {"text": "`app/admin/webhooks/page.tsx:441` calls `POST /api/admin/webhooks/${webhook.id}/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/webhooks/<p>/test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c26b708bfdf9db4f", "name": "Dangling fetch: GET /api/instructor/me (app/admin/webhooks/page.tsx:786)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/webhooks/page.tsx:786)"}, "fullDescription": {"text": "`app/admin/webhooks/page.tsx:786` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f59d1ce619b07b7c", "name": "Dangling fetch: GET /api/admin/webhooks (app/admin/webhooks/page.tsx:804)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/webhooks (app/admin/webhooks/page.tsx:804)"}, "fullDescription": {"text": "`app/admin/webhooks/page.tsx:804` calls `GET /api/admin/webhooks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/webhooks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1f8c6909333e794f", "name": "Dangling fetch: POST /api/admin/webhooks (app/admin/webhooks/page.tsx:813)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/webhooks (app/admin/webhooks/page.tsx:813)"}, "fullDescription": {"text": "`app/admin/webhooks/page.tsx:813` calls `POST /api/admin/webhooks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/webhooks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-57c86f3af183c8c8", "name": "Dangling fetch: PUT /api/admin/webhooks/${id} (app/admin/webhooks/page.tsx:826)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/webhooks/${id} (app/admin/webhooks/page.tsx:826)"}, "fullDescription": {"text": "`app/admin/webhooks/page.tsx:826` calls `PUT /api/admin/webhooks/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/webhooks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-28a6de5d0ad38581", "name": "Dangling fetch: DELETE /api/admin/webhooks/${wh.id} (app/admin/webhooks/page.tsx:842)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/webhooks/${wh.id} (app/admin/webhooks/page.tsx:842)"}, "fullDescription": {"text": "`app/admin/webhooks/page.tsx:842` calls `DELETE /api/admin/webhooks/${wh.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/webhooks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8de5c0aa9f22fb86", "name": "Dangling fetch: PUT /api/admin/webhooks/${wh.id} (app/admin/webhooks/page.tsx:857)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/webhooks/${wh.id} (app/admin/webhooks/page.tsx:857)"}, "fullDescription": {"text": "`app/admin/webhooks/page.tsx:857` calls `PUT /api/admin/webhooks/${wh.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/webhooks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e42621c10cbbbdee", "name": "Dangling fetch: GET /api/osce/events (app/admin/osce-observers/page.tsx:13)", "shortDescription": {"text": "Dangling fetch: GET /api/osce/events (app/admin/osce-observers/page.tsx:13)"}, "fullDescription": {"text": "`app/admin/osce-observers/page.tsx:13` calls `GET /api/osce/events` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b145851147b5d04", "name": "Dangling fetch: POST /api/admin/skill-drills/import (app/admin/skill-drills/import/page.tsx:110)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/skill-drills/import (app/admin/skill-drills/import/page.tsx:110)"}, "fullDescription": {"text": "`app/admin/skill-drills/import/page.tsx:110` calls `POST /api/admin/skill-drills/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/skill-drills/import`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fc1ad7108e735599", "name": "Dangling fetch: GET /api/instructor/me (app/admin/rubrics/page.tsx:658)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/rubrics/page.tsx:658)"}, "fullDescription": {"text": "`app/admin/rubrics/page.tsx:658` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-78fc729f11c1f4f8", "name": "Dangling fetch: GET /api/admin/rubrics (app/admin/rubrics/page.tsx:681)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/rubrics (app/admin/rubrics/page.tsx:681)"}, "fullDescription": {"text": "`app/admin/rubrics/page.tsx:681` calls `GET /api/admin/rubrics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/rubrics`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-12ffd94f8515767c", "name": "Dangling fetch: GET /api/scenarios (app/admin/rubrics/page.tsx:695)", "shortDescription": {"text": "Dangling fetch: GET /api/scenarios (app/admin/rubrics/page.tsx:695)"}, "fullDescription": {"text": "`app/admin/rubrics/page.tsx:695` calls `GET /api/scenarios` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scenarios`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd399adf173c8a45", "name": "Dangling fetch: GET /api/instructor/me (app/admin/skill-sheets/import/page.tsx:77)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/skill-sheets/import/page.tsx:77)"}, "fullDescription": {"text": "`app/admin/skill-sheets/import/page.tsx:77` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b16234868a080ac", "name": "Dangling fetch: GET /api/admin/skill-sheets/counts (app/admin/skill-sheets/import/page.tsx:95)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/skill-sheets/counts (app/admin/skill-sheets/import/page.tsx:95)"}, "fullDescription": {"text": "`app/admin/skill-sheets/import/page.tsx:95` calls `GET /api/admin/skill-sheets/counts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/skill-sheets/counts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2a2d9bb68f4f8ac3", "name": "Dangling fetch: POST /api/admin/skill-sheets/seed-canonical (app/admin/skill-sheets/import/page.tsx:117)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/skill-sheets/seed-canonical (app/admin/skill-sheets/import/page.tsx:117)"}, "fullDescription": {"text": "`app/admin/skill-sheets/import/page.tsx:117` calls `POST /api/admin/skill-sheets/seed-canonical` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/skill-sheets/seed-canonical`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ba517c9ad2b0899e", "name": "Dangling fetch: POST /api/admin/skill-sheets/seed-aliases (app/admin/skill-sheets/import/page.tsx:136)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/skill-sheets/seed-aliases (app/admin/skill-sheets/import/page.tsx:136)"}, "fullDescription": {"text": "`app/admin/skill-sheets/import/page.tsx:136` calls `POST /api/admin/skill-sheets/seed-aliases` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/skill-sheets/seed-aliases`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1860475264f14f39", "name": "Dangling fetch: POST /api/admin/skill-sheets/import (app/admin/skill-sheets/import/page.tsx:155)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/skill-sheets/import (app/admin/skill-sheets/import/page.tsx:155)"}, "fullDescription": {"text": "`app/admin/skill-sheets/import/page.tsx:155` calls `POST /api/admin/skill-sheets/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/skill-sheets/import`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-43e544a722b4d325", "name": "Dangling fetch: GET /api/instructor/me (app/admin/settings/page.tsx:59)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/settings/page.tsx:59)"}, "fullDescription": {"text": "`app/admin/settings/page.tsx:59` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4804e637f04e42b3", "name": "Dangling fetch: GET /api/admin/stats (app/admin/settings/page.tsx:78)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/stats (app/admin/settings/page.tsx:78)"}, "fullDescription": {"text": "`app/admin/settings/page.tsx:78` calls `GET /api/admin/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/stats`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5e0679845dd3cd11", "name": "Dangling fetch: GET /api/system-settings/${f.key} (app/admin/settings/page.tsx:329)", "shortDescription": {"text": "Dangling fetch: GET /api/system-settings/${f.key} (app/admin/settings/page.tsx:329)"}, "fullDescription": {"text": "`app/admin/settings/page.tsx:329` calls `GET /api/system-settings/${f.key}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/system-settings/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e4433100b50265fa", "name": "Dangling fetch: PUT /api/system-settings/${key} (app/admin/settings/page.tsx:354)", "shortDescription": {"text": "Dangling fetch: PUT /api/system-settings/${key} (app/admin/settings/page.tsx:354)"}, "fullDescription": {"text": "`app/admin/settings/page.tsx:354` calls `PUT /api/system-settings/${key}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/system-settings/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-08a4cba577538ce1", "name": "Dangling fetch: GET /api/instructor/me (app/admin/deep-links/page.tsx:123)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/deep-links/page.tsx:123)"}, "fullDescription": {"text": "`app/admin/deep-links/page.tsx:123` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-41c97c0edd9d62a1", "name": "Dangling fetch: GET /api/deep-links (app/admin/deep-links/page.tsx:145)", "shortDescription": {"text": "Dangling fetch: GET /api/deep-links (app/admin/deep-links/page.tsx:145)"}, "fullDescription": {"text": "`app/admin/deep-links/page.tsx:145` calls `GET /api/deep-links` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/deep-links`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1b1170a45cd51504", "name": "Dangling fetch: PATCH /api/deep-links (app/admin/deep-links/page.tsx:174)", "shortDescription": {"text": "Dangling fetch: PATCH /api/deep-links (app/admin/deep-links/page.tsx:174)"}, "fullDescription": {"text": "`app/admin/deep-links/page.tsx:174` calls `PATCH /api/deep-links` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/deep-links`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bae27a3f92a398df", "name": "Dangling fetch: DELETE /api/deep-links (app/admin/deep-links/page.tsx:199)", "shortDescription": {"text": "Dangling fetch: DELETE /api/deep-links (app/admin/deep-links/page.tsx:199)"}, "fullDescription": {"text": "`app/admin/deep-links/page.tsx:199` calls `DELETE /api/deep-links` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/deep-links`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3d0ba571a6b2830f", "name": "Dangling fetch: POST /api/deep-links (app/admin/deep-links/page.tsx:230)", "shortDescription": {"text": "Dangling fetch: POST /api/deep-links (app/admin/deep-links/page.tsx:230)"}, "fullDescription": {"text": "`app/admin/deep-links/page.tsx:230` calls `POST /api/deep-links` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/deep-links`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7a5ba9f2d8f86af8", "name": "Dangling fetch: GET /api/instructor/me (app/admin/certifications/page.tsx:334)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/certifications/page.tsx:334)"}, "fullDescription": {"text": "`app/admin/certifications/page.tsx:334` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e875c123d09ea7aa", "name": "Dangling fetch: POST /api/admin/certifications/import (app/admin/certifications/page.tsx:462)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/certifications/import (app/admin/certifications/page.tsx:462)"}, "fullDescription": {"text": "`app/admin/certifications/page.tsx:462` calls `POST /api/admin/certifications/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/certifications/import`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0814e6f83fe70b80", "name": "Dangling fetch: GET /api/instructor/me (app/admin/certifications/compliance/page.tsx:59)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/certifications/compliance/page.tsx:59)"}, "fullDescription": {"text": "`app/admin/certifications/compliance/page.tsx:59` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a20902893bae3e7d", "name": "Dangling fetch: GET /api/admin/certification-compliance (app/admin/certifications/compliance/page.tsx:78)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/certification-compliance (app/admin/certifications/compliance/page.tsx:78)"}, "fullDescription": {"text": "`app/admin/certifications/compliance/page.tsx:78` calls `GET /api/admin/certification-compliance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/certification-compliance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-602ce2877fc4e92d", "name": "Dangling fetch: GET /api/instructor/me (app/admin/certifications/verification/page.tsx:161)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/certifications/verification/page.tsx:161)"}, "fullDescription": {"text": "`app/admin/certifications/verification/page.tsx:161` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-24de0837e44a8f2f", "name": "Dangling fetch: GET /api/admin/certifications${params} (app/admin/certifications/verification/page.tsx:185)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/certifications${params} (app/admin/certifications/verification/page.tsx:185)"}, "fullDescription": {"text": "`app/admin/certifications/verification/page.tsx:185` calls `GET /api/admin/certifications${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/certifications/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-21d7120dd39ef0f1", "name": "Dangling fetch: PUT /api/admin/certifications/verify (app/admin/certifications/verification/page.tsx:233)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/certifications/verify (app/admin/certifications/verification/page.tsx:233)"}, "fullDescription": {"text": "`app/admin/certifications/verification/page.tsx:233` calls `PUT /api/admin/certifications/verify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/certifications/verify`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4eebe2fef33138c2", "name": "Dangling fetch: GET /api/instructor/me (app/admin/seed-availability/page.tsx:74)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/seed-availability/page.tsx:74)"}, "fullDescription": {"text": "`app/admin/seed-availability/page.tsx:74` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4ec2ab4f5bfc527d", "name": "Dangling fetch: POST /api/admin/seed-instructor-availability (app/admin/seed-availability/page.tsx:88)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/seed-instructor-availability (app/admin/seed-availability/page.tsx:88)"}, "fullDescription": {"text": "`app/admin/seed-availability/page.tsx:88` calls `POST /api/admin/seed-instructor-availability` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/seed-instructor-availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b30e6d2b976d379a", "name": "Dangling fetch: GET /api/instructor/me (app/admin/semesters/page.tsx:100)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/semesters/page.tsx:100)"}, "fullDescription": {"text": "`app/admin/semesters/page.tsx:100` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ec8663ddd60f17ca", "name": "Dangling fetch: GET /api/admin/academic-years (app/admin/semesters/page.tsx:115)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/academic-years (app/admin/semesters/page.tsx:115)"}, "fullDescription": {"text": "`app/admin/semesters/page.tsx:115` calls `GET /api/admin/academic-years` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/academic-years`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e9fd6b95f99e3861", "name": "Dangling fetch: POST /api/admin/academic-years (app/admin/semesters/page.tsx:152)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/academic-years (app/admin/semesters/page.tsx:152)"}, "fullDescription": {"text": "`app/admin/semesters/page.tsx:152` calls `POST /api/admin/academic-years` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/academic-years`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cc72d3a41dd5b2f3", "name": "Dangling fetch: PUT /api/admin/academic-years/${year.id} (app/admin/semesters/page.tsx:182)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/academic-years/${year.id} (app/admin/semesters/page.tsx:182)"}, "fullDescription": {"text": "`app/admin/semesters/page.tsx:182` calls `PUT /api/admin/academic-years/${year.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/academic-years/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-09483d1ec9e4af75", "name": "Dangling fetch: DELETE /api/admin/academic-years/${year.id} (app/admin/semesters/page.tsx:203)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/academic-years/${year.id} (app/admin/semesters/page.tsx:203)"}, "fullDescription": {"text": "`app/admin/semesters/page.tsx:203` calls `DELETE /api/admin/academic-years/${year.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/academic-years/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5035815b79870f59", "name": "Dangling fetch: GET /api/scheduling/planner/semesters/${semester.id} (app/admin/semesters/page.tsx:488)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters/${semester.id} (app/admin/semesters/page.tsx:488)"}, "fullDescription": {"text": "`app/admin/semesters/page.tsx:488` calls `GET /api/scheduling/planner/semesters/${semester.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/semesters/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9640dc0eb647b151", "name": "Dangling fetch: PUT /api/scheduling/planner/semesters/${semester.id} (app/admin/semesters/page.tsx:529)", "shortDescription": {"text": "Dangling fetch: PUT /api/scheduling/planner/semesters/${semester.id} (app/admin/semesters/page.tsx:529)"}, "fullDescription": {"text": "`app/admin/semesters/page.tsx:529` calls `PUT /api/scheduling/planner/semesters/${semester.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/semesters/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1862fa8b7bdb6951", "name": "Dangling fetch: POST /api/admin/lab-templates/apply (app/admin/lab-templates/page.tsx:572)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/lab-templates/apply (app/admin/lab-templates/page.tsx:572)"}, "fullDescription": {"text": "`app/admin/lab-templates/page.tsx:572` calls `POST /api/admin/lab-templates/apply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/lab-templates/apply`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e1d497fb3baf59ac", "name": "Dangling fetch: GET /api/admin/lab-templates/${templateId}/versions (app/admin/lab-templates/page.tsx:785)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/lab-templates/${templateId}/versions (app/admin/lab-templates/page.tsx:785)"}, "fullDescription": {"text": "`app/admin/lab-templates/page.tsx:785` calls `GET /api/admin/lab-templates/${templateId}/versions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/lab-templates/<p>/versions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-525935d4871dcf30", "name": "Dangling fetch: POST /api/admin/lab-templates/${templateId}/versions (app/admin/lab-templates/page.tsx:803)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/lab-templates/${templateId}/versions (app/admin/lab-templates/page.tsx:803)"}, "fullDescription": {"text": "`app/admin/lab-templates/page.tsx:803` calls `POST /api/admin/lab-templates/${templateId}/versions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/lab-templates/<p>/versions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-508f2063a876dd65", "name": "Dangling fetch: GET /api/instructor/me (app/admin/lab-templates/page.tsx:1022)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/lab-templates/page.tsx:1022)"}, "fullDescription": {"text": "`app/admin/lab-templates/page.tsx:1022` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f9bcf72768b62bf7", "name": "Dangling fetch: GET /api/lab-management/scenarios?limit=100 (app/admin/lab-templates/page.tsx:1040)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/scenarios?limit=100 (app/admin/lab-templates/page.tsx:1040)"}, "fullDescription": {"text": "`app/admin/lab-templates/page.tsx:1040` calls `GET /api/lab-management/scenarios?limit=100` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2e9660fe25ec9f5d", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/admin/lab-templates/page.tsx:1050)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/admin/lab-templates/page.tsx:1050)"}, "fullDescription": {"text": "`app/admin/lab-templates/page.tsx:1050` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0509a1d8c3ef8253", "name": "Dangling fetch: GET /api/lab-management/programs (app/admin/lab-templates/page.tsx:1060)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/programs (app/admin/lab-templates/page.tsx:1060)"}, "fullDescription": {"text": "`app/admin/lab-templates/page.tsx:1060` calls `GET /api/lab-management/programs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/programs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-adfc21f2227ede47", "name": "Dangling fetch: GET /api/admin/lab-templates?${params} (app/admin/lab-templates/page.tsx:1074)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/lab-templates?${params} (app/admin/lab-templates/page.tsx:1074)"}, "fullDescription": {"text": "`app/admin/lab-templates/page.tsx:1074` calls `GET /api/admin/lab-templates?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/lab-templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c49682a70fa8ebf1", "name": "Dangling fetch: DELETE /api/admin/lab-templates/${deletingTemplate.id} (app/admin/lab-templates/page.tsx:1111)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/lab-templates/${deletingTemplate.id} (app/admin/lab-templates/page.tsx:1111)"}, "fullDescription": {"text": "`app/admin/lab-templates/page.tsx:1111` calls `DELETE /api/admin/lab-templates/${deletingTemplate.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/lab-templates/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-19113954aa7d43a1", "name": "Dangling fetch: POST /api/admin/lab-templates/import (app/admin/lab-templates/import/page.tsx:292)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/lab-templates/import (app/admin/lab-templates/import/page.tsx:292)"}, "fullDescription": {"text": "`app/admin/lab-templates/import/page.tsx:292` calls `POST /api/admin/lab-templates/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/lab-templates/import`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-77a8c6dd240d1253", "name": "Dangling fetch: POST /api/admin/lab-templates/seed (app/admin/lab-templates/import/page.tsx:324)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/lab-templates/seed (app/admin/lab-templates/import/page.tsx:324)"}, "fullDescription": {"text": "`app/admin/lab-templates/import/page.tsx:324` calls `POST /api/admin/lab-templates/seed` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/lab-templates/seed`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d0195dac0d5a5385", "name": "Dangling fetch: POST /api/admin/lab-templates/seed (app/admin/lab-templates/import/page.tsx:360)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/lab-templates/seed (app/admin/lab-templates/import/page.tsx:360)"}, "fullDescription": {"text": "`app/admin/lab-templates/import/page.tsx:360` calls `POST /api/admin/lab-templates/seed` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/lab-templates/seed`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dab425fc9096f755", "name": "Dangling fetch: GET /api/osce/guest-tokens (app/admin/osce-tokens/page.tsx:31)", "shortDescription": {"text": "Dangling fetch: GET /api/osce/guest-tokens (app/admin/osce-tokens/page.tsx:31)"}, "fullDescription": {"text": "`app/admin/osce-tokens/page.tsx:31` calls `GET /api/osce/guest-tokens` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/guest-tokens`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d0ad66e06c869457", "name": "Dangling fetch: POST /api/osce/guest-tokens (app/admin/osce-tokens/page.tsx:42)", "shortDescription": {"text": "Dangling fetch: POST /api/osce/guest-tokens (app/admin/osce-tokens/page.tsx:42)"}, "fullDescription": {"text": "`app/admin/osce-tokens/page.tsx:42` calls `POST /api/osce/guest-tokens` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/guest-tokens`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5b47935a1a4680fc", "name": "Dangling fetch: DELETE /api/osce/guest-tokens?id=${id} (app/admin/osce-tokens/page.tsx:69)", "shortDescription": {"text": "Dangling fetch: DELETE /api/osce/guest-tokens?id=${id} (app/admin/osce-tokens/page.tsx:69)"}, "fullDescription": {"text": "`app/admin/osce-tokens/page.tsx:69` calls `DELETE /api/osce/guest-tokens?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/guest-tokens`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-591dbcbeae45c361", "name": "Dangling fetch: POST /api/osce/guest-tokens (app/admin/osce-tokens/page.tsx:83)", "shortDescription": {"text": "Dangling fetch: POST /api/osce/guest-tokens (app/admin/osce-tokens/page.tsx:83)"}, "fullDescription": {"text": "`app/admin/osce-tokens/page.tsx:83` calls `POST /api/osce/guest-tokens` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/guest-tokens`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-607d6ba7b9972f79", "name": "Dangling fetch: GET /api/exam-scheduling/sessions?admin=1 (app/admin/exam-sessions/page.tsx:91)", "shortDescription": {"text": "Dangling fetch: GET /api/exam-scheduling/sessions?admin=1 (app/admin/exam-sessions/page.tsx:91)"}, "fullDescription": {"text": "`app/admin/exam-sessions/page.tsx:91` calls `GET /api/exam-scheduling/sessions?admin=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/exam-scheduling/sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bf6e5f882979afcd", "name": "Dangling fetch: POST /api/exam-scheduling/sessions (app/admin/exam-sessions/page.tsx:112)", "shortDescription": {"text": "Dangling fetch: POST /api/exam-scheduling/sessions (app/admin/exam-sessions/page.tsx:112)"}, "fullDescription": {"text": "`app/admin/exam-sessions/page.tsx:112` calls `POST /api/exam-scheduling/sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/exam-scheduling/sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c1ee54ccf30a3a1b", "name": "Dangling fetch: PATCH /api/exam-scheduling/sessions/${id} (app/admin/exam-sessions/page.tsx:140)", "shortDescription": {"text": "Dangling fetch: PATCH /api/exam-scheduling/sessions/${id} (app/admin/exam-sessions/page.tsx:140)"}, "fullDescription": {"text": "`app/admin/exam-sessions/page.tsx:140` calls `PATCH /api/exam-scheduling/sessions/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/exam-scheduling/sessions/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa56e425506c7f3d", "name": "Dangling fetch: DELETE /api/exam-scheduling/sessions/${id} (app/admin/exam-sessions/page.tsx:160)", "shortDescription": {"text": "Dangling fetch: DELETE /api/exam-scheduling/sessions/${id} (app/admin/exam-sessions/page.tsx:160)"}, "fullDescription": {"text": "`app/admin/exam-sessions/page.tsx:160` calls `DELETE /api/exam-scheduling/sessions/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/exam-scheduling/sessions/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a2a7a97e91e58299", "name": "Dangling fetch: POST /api/exam-scheduling/signups/${signupId}/decision (app/admin/exam-sessions/page.tsx:175)", "shortDescription": {"text": "Dangling fetch: POST /api/exam-scheduling/signups/${signupId}/decision (app/admin/exam-sessions/page.tsx:175)"}, "fullDescription": {"text": "`app/admin/exam-sessions/page.tsx:175` calls `POST /api/exam-scheduling/signups/${signupId}/decision` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/exam-scheduling/signups/<p>/decision`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9784a3df33b0b646", "name": "Dangling fetch: POST /api/exam-scheduling/signups/${signupId}/result (app/admin/exam-sessions/page.tsx:194)", "shortDescription": {"text": "Dangling fetch: POST /api/exam-scheduling/signups/${signupId}/result (app/admin/exam-sessions/page.tsx:194)"}, "fullDescription": {"text": "`app/admin/exam-sessions/page.tsx:194` calls `POST /api/exam-scheduling/signups/${signupId}/result` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/exam-scheduling/signups/<p>/result`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83e4a37ee8d7a532", "name": "Dangling fetch: POST /api/exam-scheduling/signups/admin (app/admin/exam-sessions/page.tsx:214)", "shortDescription": {"text": "Dangling fetch: POST /api/exam-scheduling/signups/admin (app/admin/exam-sessions/page.tsx:214)"}, "fullDescription": {"text": "`app/admin/exam-sessions/page.tsx:214` calls `POST /api/exam-scheduling/signups/admin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/exam-scheduling/signups/admin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ab154844b38f42b7", "name": "Dangling fetch: GET /api/scheduling/planner/semesters (app/admin/instructor-workload/page.tsx:123)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters (app/admin/instructor-workload/page.tsx:123)"}, "fullDescription": {"text": "`app/admin/instructor-workload/page.tsx:123` calls `GET /api/scheduling/planner/semesters` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/semesters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-32c8975fd047b618", "name": "Dangling fetch: GET /api/scheduling/planner/workload?semester_id=${activeSem.id} (app/admin/instructor-workload/page.tsx", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/workload?semester_id=${activeSem.id} (app/admin/instructor-workload/page.tsx:137)"}, "fullDescription": {"text": "`app/admin/instructor-workload/page.tsx:137` calls `GET /api/scheduling/planner/workload?semester_id=${activeSem.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/workload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d51156c3302b5886", "name": "Dangling fetch: GET /api/scheduling/planner/workload?semester_id=${semId} (app/admin/instructor-workload/page.tsx:155)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/workload?semester_id=${semId} (app/admin/instructor-workload/page.tsx:155)"}, "fullDescription": {"text": "`app/admin/instructor-workload/page.tsx:155` calls `GET /api/scheduling/planner/workload?semester_id=${semId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/workload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1dd2210d0b2d177f", "name": "Dangling fetch: GET /api/instructor/me (app/admin/attendance-appeals/page.tsx:109)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/attendance-appeals/page.tsx:109)"}, "fullDescription": {"text": "`app/admin/attendance-appeals/page.tsx:109` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4675c0735f2f79be", "name": "Dangling fetch: PUT /api/admin/attendance-appeals/${appealId} (app/admin/attendance-appeals/page.tsx:167)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/attendance-appeals/${appealId} (app/admin/attendance-appeals/page.tsx:167)"}, "fullDescription": {"text": "`app/admin/attendance-appeals/page.tsx:167` calls `PUT /api/admin/attendance-appeals/${appealId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/attendance-appeals/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d85471da2e8d718a", "name": "Dangling fetch: GET /api/admin/compliance?log=true&limit=100 (app/admin/compliance/page.tsx:154)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/compliance?log=true&limit=100 (app/admin/compliance/page.tsx:154)"}, "fullDescription": {"text": "`app/admin/compliance/page.tsx:154` calls `GET /api/admin/compliance?log=true&limit=100` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/compliance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-08a404142098dd54", "name": "Dangling fetch: POST /api/admin/compliance (app/admin/compliance/page.tsx:179)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/compliance (app/admin/compliance/page.tsx:179)"}, "fullDescription": {"text": "`app/admin/compliance/page.tsx:179` calls `POST /api/admin/compliance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/compliance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-931b06eb148d26f8", "name": "Dangling fetch: POST /api/admin/compliance (app/admin/compliance/page.tsx:208)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/compliance (app/admin/compliance/page.tsx:208)"}, "fullDescription": {"text": "`app/admin/compliance/page.tsx:208` calls `POST /api/admin/compliance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/compliance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd0560ad887c194c", "name": "Dangling fetch: GET /api/instructor/me (app/admin/database-tools/page.tsx:252)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/database-tools/page.tsx:252)"}, "fullDescription": {"text": "`app/admin/database-tools/page.tsx:252` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fd4eac3fb4137094", "name": "Dangling fetch: DELETE /api/admin/database-tools/audit-logs?retention_days=${auditRetention}&dry_run=false (app/admin/da", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/database-tools/audit-logs?retention_days=${auditRetention}&dry_run=false (app/admin/database-tools/page.tsx:289)"}, "fullDescription": {"text": "`app/admin/database-tools/page.tsx:289` calls `DELETE /api/admin/database-tools/audit-logs?retention_days=${auditRetention}&dry_run=false` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/database-tools/audit-logs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-28ea25231819f0fd", "name": "Dangling fetch: DELETE /api/admin/database-tools/notifications?days=${notifDays}&include_unread=${notifIncludeUnread}&dr", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/database-tools/notifications?days=${notifDays}&include_unread=${notifIncludeUnread}&dry_run=false (app/admin/database-tools/page.tsx:328)"}, "fullDescription": {"text": "`app/admin/database-tools/page.tsx:328` calls `DELETE /api/admin/database-tools/notifications?days=${notifDays}&include_unread=${notifIncludeUnread}&dry_run=false` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/database-tools/notifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fb19e00f2656ac7d", "name": "Dangling fetch: GET /api/admin/database-tools/cohorts (app/admin/database-tools/page.tsx:349)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/database-tools/cohorts (app/admin/database-tools/page.tsx:349)"}, "fullDescription": {"text": "`app/admin/database-tools/page.tsx:349` calls `GET /api/admin/database-tools/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/database-tools/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3bed1cc4294c2e30", "name": "Dangling fetch: PATCH /api/admin/database-tools/cohorts (app/admin/database-tools/page.tsx:387)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/database-tools/cohorts (app/admin/database-tools/page.tsx:387)"}, "fullDescription": {"text": "`app/admin/database-tools/page.tsx:387` calls `PATCH /api/admin/database-tools/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/database-tools/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b99834b678f20a65", "name": "Dangling fetch: GET /api/admin/database-tools/orphans (app/admin/database-tools/page.tsx:410)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/database-tools/orphans (app/admin/database-tools/page.tsx:410)"}, "fullDescription": {"text": "`app/admin/database-tools/page.tsx:410` calls `GET /api/admin/database-tools/orphans` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/database-tools/orphans`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-38b1a03baaee66de", "name": "Dangling fetch: DELETE /api/admin/database-tools/orphans?dry_run=false (app/admin/database-tools/page.tsx:427)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/database-tools/orphans?dry_run=false (app/admin/database-tools/page.tsx:427)"}, "fullDescription": {"text": "`app/admin/database-tools/page.tsx:427` calls `DELETE /api/admin/database-tools/orphans?dry_run=false` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/database-tools/orphans`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5ca7ba4689e18f00", "name": "Dangling fetch: GET /api/admin/database-tools/stats (app/admin/database-tools/page.tsx:448)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/database-tools/stats (app/admin/database-tools/page.tsx:448)"}, "fullDescription": {"text": "`app/admin/database-tools/page.tsx:448` calls `GET /api/admin/database-tools/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/database-tools/stats`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2be086f5e199be21", "name": "Dangling fetch: GET /api/instructor/me (app/admin/system-alerts/page.tsx:255)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/system-alerts/page.tsx:255)"}, "fullDescription": {"text": "`app/admin/system-alerts/page.tsx:255` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-06dd099c097f457f", "name": "Dangling fetch: GET /api/admin/system-alerts?${params.toString()} (app/admin/system-alerts/page.tsx:277)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/system-alerts?${params.toString()} (app/admin/system-alerts/page.tsx:277)"}, "fullDescription": {"text": "`app/admin/system-alerts/page.tsx:277` calls `GET /api/admin/system-alerts?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/system-alerts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2a0b6b7807e353fb", "name": "Dangling fetch: PATCH /api/admin/system-alerts (app/admin/system-alerts/page.tsx:301)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/system-alerts (app/admin/system-alerts/page.tsx:301)"}, "fullDescription": {"text": "`app/admin/system-alerts/page.tsx:301` calls `PATCH /api/admin/system-alerts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/system-alerts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-558defbdc78cb60f", "name": "Dangling fetch: GET /api/instructor/me (app/admin/guests/page.tsx:90)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/guests/page.tsx:90)"}, "fullDescription": {"text": "`app/admin/guests/page.tsx:90` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a5c9952cb1415cef", "name": "Dangling fetch: GET /api/admin/guests (app/admin/guests/page.tsx:109)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/guests (app/admin/guests/page.tsx:109)"}, "fullDescription": {"text": "`app/admin/guests/page.tsx:109` calls `GET /api/admin/guests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/guests`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a58e38c3324a8115", "name": "Dangling fetch: GET /api/lab-management/lab-days?startDate=${today} (app/admin/guests/page.tsx:123)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days?startDate=${today} (app/admin/guests/page.tsx:123)"}, "fullDescription": {"text": "`app/admin/guests/page.tsx:123` calls `GET /api/lab-management/lab-days?startDate=${today}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e0d6fe7aca71a6bf", "name": "Dangling fetch: POST /api/admin/guests (app/admin/guests/page.tsx:147)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/guests (app/admin/guests/page.tsx:147)"}, "fullDescription": {"text": "`app/admin/guests/page.tsx:147` calls `POST /api/admin/guests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/guests`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e25947231465062", "name": "Dangling fetch: DELETE /api/admin/guests?id=${guestId} (app/admin/guests/page.tsx:177)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/guests?id=${guestId} (app/admin/guests/page.tsx:177)"}, "fullDescription": {"text": "`app/admin/guests/page.tsx:177` calls `DELETE /api/admin/guests?id=${guestId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/guests`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d8aa8b678b472c94", "name": "Dangling fetch: GET /api/instructor/me (app/admin/announcements/page.tsx:345)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/announcements/page.tsx:345)"}, "fullDescription": {"text": "`app/admin/announcements/page.tsx:345` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c5cb0b821e5cbb2d", "name": "Dangling fetch: GET /api/announcements (app/admin/announcements/page.tsx:363)", "shortDescription": {"text": "Dangling fetch: GET /api/announcements (app/admin/announcements/page.tsx:363)"}, "fullDescription": {"text": "`app/admin/announcements/page.tsx:363` calls `GET /api/announcements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/announcements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4751306a24294b62", "name": "Dangling fetch: GET /api/announcements (app/admin/announcements/page.tsx:403)", "shortDescription": {"text": "Dangling fetch: GET /api/announcements (app/admin/announcements/page.tsx:403)"}, "fullDescription": {"text": "`app/admin/announcements/page.tsx:403` calls `GET /api/announcements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/announcements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7e51b70b6031c682", "name": "Dangling fetch: PUT /api/announcements (app/admin/announcements/page.tsx:427)", "shortDescription": {"text": "Dangling fetch: PUT /api/announcements (app/admin/announcements/page.tsx:427)"}, "fullDescription": {"text": "`app/admin/announcements/page.tsx:427` calls `PUT /api/announcements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/announcements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9c4eb374240ea38c", "name": "Dangling fetch: DELETE /api/announcements (app/admin/announcements/page.tsx:444)", "shortDescription": {"text": "Dangling fetch: DELETE /api/announcements (app/admin/announcements/page.tsx:444)"}, "fullDescription": {"text": "`app/admin/announcements/page.tsx:444` calls `DELETE /api/announcements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/announcements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4fd7c6679fb0897e", "name": "Dangling fetch: GET /api/instructor/me (app/admin/incidents/page.tsx:209)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/incidents/page.tsx:209)"}, "fullDescription": {"text": "`app/admin/incidents/page.tsx:209` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a0b8d800ed210872", "name": "Dangling fetch: POST /api/admin/incidents (app/admin/incidents/page.tsx:280)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/incidents (app/admin/incidents/page.tsx:280)"}, "fullDescription": {"text": "`app/admin/incidents/page.tsx:280` calls `POST /api/admin/incidents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/incidents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c5cd774944845203", "name": "Dangling fetch: PUT /api/admin/incidents/${id} (app/admin/incidents/page.tsx:341)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/incidents/${id} (app/admin/incidents/page.tsx:341)"}, "fullDescription": {"text": "`app/admin/incidents/page.tsx:341` calls `PUT /api/admin/incidents/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/incidents/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-81f7d259a59ed472", "name": "Dangling fetch: GET /api/instructor/me (app/admin/qa-checklist/page.tsx:450)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/qa-checklist/page.tsx:450)"}, "fullDescription": {"text": "`app/admin/qa-checklist/page.tsx:450` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e05b313b57573934", "name": "Dangling fetch: GET /api/instructor/me (app/admin/deletion-requests/page.tsx:54)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/deletion-requests/page.tsx:54)"}, "fullDescription": {"text": "`app/admin/deletion-requests/page.tsx:54` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0bea6345d33373ea", "name": "Dangling fetch: GET /api/admin/deletion-requests (app/admin/deletion-requests/page.tsx:72)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/deletion-requests (app/admin/deletion-requests/page.tsx:72)"}, "fullDescription": {"text": "`app/admin/deletion-requests/page.tsx:72` calls `GET /api/admin/deletion-requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/deletion-requests`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c1bec2af9e80fde", "name": "Dangling fetch: PATCH /api/admin/deletion-requests (app/admin/deletion-requests/page.tsx:85)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/deletion-requests (app/admin/deletion-requests/page.tsx:85)"}, "fullDescription": {"text": "`app/admin/deletion-requests/page.tsx:85` calls `PATCH /api/admin/deletion-requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/deletion-requests`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e2e1fe4a9f7e61cb", "name": "Dangling fetch: GET /api/instructor/me (app/admin/config/page.tsx:302)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/config/page.tsx:302)"}, "fullDescription": {"text": "`app/admin/config/page.tsx:302` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-79463d508e219254", "name": "Dangling fetch: GET /api/admin/config (app/admin/config/page.tsx:320)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/config (app/admin/config/page.tsx:320)"}, "fullDescription": {"text": "`app/admin/config/page.tsx:320` calls `GET /api/admin/config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/config`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6211c9dbadbad525", "name": "Dangling fetch: PUT /api/admin/config (app/admin/config/page.tsx:372)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/config (app/admin/config/page.tsx:372)"}, "fullDescription": {"text": "`app/admin/config/page.tsx:372` calls `PUT /api/admin/config` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/config`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3c8fe005e139026c", "name": "Dangling fetch: GET /api/instructor/me (app/admin/email-templates/page.tsx:1002)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/email-templates/page.tsx:1002)"}, "fullDescription": {"text": "`app/admin/email-templates/page.tsx:1002` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0bdd2feb1be86788", "name": "Dangling fetch: GET /api/admin/email-templates (app/admin/email-templates/page.tsx:1021)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/email-templates (app/admin/email-templates/page.tsx:1021)"}, "fullDescription": {"text": "`app/admin/email-templates/page.tsx:1021` calls `GET /api/admin/email-templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/email-templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e9799cc45bf6f56f", "name": "Dangling fetch: GET /api/admin/email-stats (app/admin/email-templates/page.tsx:1032)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/email-stats (app/admin/email-templates/page.tsx:1032)"}, "fullDescription": {"text": "`app/admin/email-templates/page.tsx:1032` calls `GET /api/admin/email-stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/email-stats`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9dfa8ad9eb007e2e", "name": "Dangling fetch: PUT /api/admin/email-templates (app/admin/email-templates/page.tsx:1043)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/email-templates (app/admin/email-templates/page.tsx:1043)"}, "fullDescription": {"text": "`app/admin/email-templates/page.tsx:1043` calls `PUT /api/admin/email-templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/email-templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26db743b75ded832", "name": "Dangling fetch: DELETE /api/admin/email-templates (app/admin/email-templates/page.tsx:1060)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/email-templates (app/admin/email-templates/page.tsx:1060)"}, "fullDescription": {"text": "`app/admin/email-templates/page.tsx:1060` calls `DELETE /api/admin/email-templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/email-templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-76d8360a2014d680", "name": "Dangling fetch: POST /api/admin/email-templates/test (app/admin/email-templates/page.tsx:1079)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/email-templates/test (app/admin/email-templates/page.tsx:1079)"}, "fullDescription": {"text": "`app/admin/email-templates/page.tsx:1079` calls `POST /api/admin/email-templates/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/email-templates/test`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e3e574cde309ec16", "name": "Dangling fetch: GET /api/instructor/me (app/admin/roles/page.tsx:161)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/roles/page.tsx:161)"}, "fullDescription": {"text": "`app/admin/roles/page.tsx:161` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ffefbc7ede3a7620", "name": "Dangling fetch: GET /api/instructor/me (app/admin/system-health/page.tsx:233)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/system-health/page.tsx:233)"}, "fullDescription": {"text": "`app/admin/system-health/page.tsx:233` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-46a61f2f83cf28a8", "name": "Dangling fetch: GET /api/admin/system-health (app/admin/system-health/page.tsx:253)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/system-health (app/admin/system-health/page.tsx:253)"}, "fullDescription": {"text": "`app/admin/system-health/page.tsx:253` calls `GET /api/admin/system-health` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/system-health`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d4c48d7755f55c87", "name": "Dangling fetch: GET /api/instructor/me (app/admin/time-clock/page.tsx:167)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/time-clock/page.tsx:167)"}, "fullDescription": {"text": "`app/admin/time-clock/page.tsx:167` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d671d8780744f3f5", "name": "Dangling fetch: GET /api/instructor/time-clock?${params.toString()} (app/admin/time-clock/page.tsx:203)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/time-clock?${params.toString()} (app/admin/time-clock/page.tsx:203)"}, "fullDescription": {"text": "`app/admin/time-clock/page.tsx:203` calls `GET /api/instructor/time-clock?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/time-clock`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c157594d5f4fe161", "name": "Dangling fetch: PUT /api/instructor/time-clock/${id} (app/admin/time-clock/page.tsx:228)", "shortDescription": {"text": "Dangling fetch: PUT /api/instructor/time-clock/${id} (app/admin/time-clock/page.tsx:228)"}, "fullDescription": {"text": "`app/admin/time-clock/page.tsx:228` calls `PUT /api/instructor/time-clock/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/time-clock/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-548f9ec247285f25", "name": "Dangling fetch: DELETE /api/instructor/time-clock/${id} (app/admin/time-clock/page.tsx:256)", "shortDescription": {"text": "Dangling fetch: DELETE /api/instructor/time-clock/${id} (app/admin/time-clock/page.tsx:256)"}, "fullDescription": {"text": "`app/admin/time-clock/page.tsx:256` calls `DELETE /api/instructor/time-clock/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/time-clock/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-38779d2b1b0c19af", "name": "Dangling fetch: GET /api/instructor/me (app/admin/scheduled-exports/page.tsx:395)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/scheduled-exports/page.tsx:395)"}, "fullDescription": {"text": "`app/admin/scheduled-exports/page.tsx:395` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aded786b5baefb46", "name": "Dangling fetch: GET /api/admin/scheduled-exports (app/admin/scheduled-exports/page.tsx:413)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/scheduled-exports (app/admin/scheduled-exports/page.tsx:413)"}, "fullDescription": {"text": "`app/admin/scheduled-exports/page.tsx:413` calls `GET /api/admin/scheduled-exports` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scheduled-exports`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-31df627097b28ed3", "name": "Dangling fetch: POST /api/admin/scheduled-exports (app/admin/scheduled-exports/page.tsx:423)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/scheduled-exports (app/admin/scheduled-exports/page.tsx:423)"}, "fullDescription": {"text": "`app/admin/scheduled-exports/page.tsx:423` calls `POST /api/admin/scheduled-exports` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scheduled-exports`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-de269a07c231363b", "name": "Dangling fetch: PUT /api/admin/scheduled-exports/${id} (app/admin/scheduled-exports/page.tsx:440)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/scheduled-exports/${id} (app/admin/scheduled-exports/page.tsx:440)"}, "fullDescription": {"text": "`app/admin/scheduled-exports/page.tsx:440` calls `PUT /api/admin/scheduled-exports/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scheduled-exports/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-37afaab7329af0d1", "name": "Dangling fetch: DELETE /api/admin/scheduled-exports/${id} (app/admin/scheduled-exports/page.tsx:459)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/scheduled-exports/${id} (app/admin/scheduled-exports/page.tsx:459)"}, "fullDescription": {"text": "`app/admin/scheduled-exports/page.tsx:459` calls `DELETE /api/admin/scheduled-exports/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scheduled-exports/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f9e273450ad35daa", "name": "Dangling fetch: PUT /api/admin/scheduled-exports/${exp.id} (app/admin/scheduled-exports/page.tsx:473)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/scheduled-exports/${exp.id} (app/admin/scheduled-exports/page.tsx:473)"}, "fullDescription": {"text": "`app/admin/scheduled-exports/page.tsx:473` calls `PUT /api/admin/scheduled-exports/${exp.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/scheduled-exports/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-59042a123b80a78a", "name": "Dangling fetch: GET /api/instructor/me (app/admin/cases/generate/page.tsx:195)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/cases/generate/page.tsx:195)"}, "fullDescription": {"text": "`app/admin/cases/generate/page.tsx:195` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-84433ddd3cc863c2", "name": "Dangling fetch: GET /api/admin/cases/briefs?${params.toString()} (app/admin/cases/generate/page.tsx:221)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/cases/briefs?${params.toString()} (app/admin/cases/generate/page.tsx:221)"}, "fullDescription": {"text": "`app/admin/cases/generate/page.tsx:221` calls `GET /api/admin/cases/briefs?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cases/briefs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-af4957722611e7ae", "name": "Dangling fetch: GET /api/admin/cases/coverage (app/admin/cases/generate/page.tsx:234)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/cases/coverage (app/admin/cases/generate/page.tsx:234)"}, "fullDescription": {"text": "`app/admin/cases/generate/page.tsx:234` calls `GET /api/admin/cases/coverage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cases/coverage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-474373bb61d0072e", "name": "Dangling fetch: GET /api/admin/cases/prompt-template (app/admin/cases/generate/page.tsx:247)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/cases/prompt-template (app/admin/cases/generate/page.tsx:247)"}, "fullDescription": {"text": "`app/admin/cases/generate/page.tsx:247` calls `GET /api/admin/cases/prompt-template` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cases/prompt-template`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-20defcba90afc3a7", "name": "Dangling fetch: POST /api/admin/cases/seed-briefs (app/admin/cases/generate/page.tsx:277)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/cases/seed-briefs (app/admin/cases/generate/page.tsx:277)"}, "fullDescription": {"text": "`app/admin/cases/generate/page.tsx:277` calls `POST /api/admin/cases/seed-briefs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cases/seed-briefs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-87b89e2d45c883ff", "name": "Dangling fetch: POST /api/admin/cases/seed-prompt (app/admin/cases/generate/page.tsx:295)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/cases/seed-prompt (app/admin/cases/generate/page.tsx:295)"}, "fullDescription": {"text": "`app/admin/cases/generate/page.tsx:295` calls `POST /api/admin/cases/seed-prompt` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cases/seed-prompt`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1478e703440d136b", "name": "Dangling fetch: POST /api/cases/generate/bulk (app/admin/cases/generate/page.tsx:332)", "shortDescription": {"text": "Dangling fetch: POST /api/cases/generate/bulk (app/admin/cases/generate/page.tsx:332)"}, "fullDescription": {"text": "`app/admin/cases/generate/page.tsx:332` calls `POST /api/cases/generate/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cases/generate/bulk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-181ed8f48f1c63b4", "name": "Dangling fetch: POST /api/admin/cases/briefs (app/admin/cases/generate/page.tsx:406)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/cases/briefs (app/admin/cases/generate/page.tsx:406)"}, "fullDescription": {"text": "`app/admin/cases/generate/page.tsx:406` calls `POST /api/admin/cases/briefs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cases/briefs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5535d8a730d5d179", "name": "Dangling fetch: PUT /api/admin/cases/prompt-template (app/admin/cases/generate/page.tsx:442)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/cases/prompt-template (app/admin/cases/generate/page.tsx:442)"}, "fullDescription": {"text": "`app/admin/cases/generate/page.tsx:442` calls `PUT /api/admin/cases/prompt-template` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/cases/prompt-template`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4d6b7c453936d316", "name": "Dangling fetch: GET /api/instructor/me (app/admin/calendar-sync/page.tsx:196)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/calendar-sync/page.tsx:196)"}, "fullDescription": {"text": "`app/admin/calendar-sync/page.tsx:196` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5ed05a53f97e5f52", "name": "Dangling fetch: GET /api/admin/calendar-sync/status (app/admin/calendar-sync/page.tsx:214)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/calendar-sync/status (app/admin/calendar-sync/page.tsx:214)"}, "fullDescription": {"text": "`app/admin/calendar-sync/page.tsx:214` calls `GET /api/admin/calendar-sync/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/calendar-sync/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-20e688625909921e", "name": "Dangling fetch: POST /api/admin/calendar-sync (app/admin/calendar-sync/page.tsx:243)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/calendar-sync (app/admin/calendar-sync/page.tsx:243)"}, "fullDescription": {"text": "`app/admin/calendar-sync/page.tsx:243` calls `POST /api/admin/calendar-sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/calendar-sync`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-04eb1bc7a19a3f52", "name": "Dangling fetch: POST /api/admin/calendar-sync/remind (app/admin/calendar-sync/page.tsx:286)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/calendar-sync/remind (app/admin/calendar-sync/page.tsx:286)"}, "fullDescription": {"text": "`app/admin/calendar-sync/page.tsx:286` calls `POST /api/admin/calendar-sync/remind` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/calendar-sync/remind`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ceed21948e9b9ee0", "name": "Dangling fetch: POST /api/admin/calendar-sync/cleanup-duplicates (app/admin/calendar-sync/page.tsx:309)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/calendar-sync/cleanup-duplicates (app/admin/calendar-sync/page.tsx:309)"}, "fullDescription": {"text": "`app/admin/calendar-sync/page.tsx:309` calls `POST /api/admin/calendar-sync/cleanup-duplicates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/calendar-sync/cleanup-duplicates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7486ff9a2663f1b1", "name": "Dangling fetch: POST /api/admin/calendar-sync/cleanup-duplicates (app/admin/calendar-sync/page.tsx:329)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/calendar-sync/cleanup-duplicates (app/admin/calendar-sync/page.tsx:329)"}, "fullDescription": {"text": "`app/admin/calendar-sync/page.tsx:329` calls `POST /api/admin/calendar-sync/cleanup-duplicates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/calendar-sync/cleanup-duplicates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd43016cd3a4d065", "name": "Dangling fetch: POST /api/admin/calendar-sync/remind (app/admin/calendar-sync/page.tsx:359)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/calendar-sync/remind (app/admin/calendar-sync/page.tsx:359)"}, "fullDescription": {"text": "`app/admin/calendar-sync/page.tsx:359` calls `POST /api/admin/calendar-sync/remind` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/calendar-sync/remind`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3453c1b3fce79c4e", "name": "Dangling fetch: POST /api/admin/calendar-sync (app/admin/calendar-sync/page.tsx:383)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/calendar-sync (app/admin/calendar-sync/page.tsx:383)"}, "fullDescription": {"text": "`app/admin/calendar-sync/page.tsx:383` calls `POST /api/admin/calendar-sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/calendar-sync`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0122a0f1ec9539eb", "name": "Dangling fetch: POST /api/admin/calendar-sync/force-resync (app/admin/calendar-sync/page.tsx:440)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/calendar-sync/force-resync (app/admin/calendar-sync/page.tsx:440)"}, "fullDescription": {"text": "`app/admin/calendar-sync/page.tsx:440` calls `POST /api/admin/calendar-sync/force-resync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/calendar-sync/force-resync`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-42dc823c17953466", "name": "Dangling fetch: GET /api/instructor/me (app/admin/audit-log/page.tsx:190)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/audit-log/page.tsx:190)"}, "fullDescription": {"text": "`app/admin/audit-log/page.tsx:190` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fb8612d8eb961347", "name": "Dangling fetch: GET /api/admin/audit-log?${buildParams()} (app/admin/audit-log/page.tsx:225)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/audit-log?${buildParams()} (app/admin/audit-log/page.tsx:225)"}, "fullDescription": {"text": "`app/admin/audit-log/page.tsx:225` calls `GET /api/admin/audit-log?${buildParams()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/audit-log`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6873bf69a4c913d8", "name": "Dangling fetch: GET /api/admin/audit-log?mode=stats (app/admin/audit-log/page.tsx:240)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/audit-log?mode=stats (app/admin/audit-log/page.tsx:240)"}, "fullDescription": {"text": "`app/admin/audit-log/page.tsx:240` calls `GET /api/admin/audit-log?mode=stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/audit-log`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2b3b1f3a716ef035", "name": "Dangling fetch: DELETE /api/admin/audit-log?days=${days} (app/admin/audit-log/page.tsx:296)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/audit-log?days=${days} (app/admin/audit-log/page.tsx:296)"}, "fullDescription": {"text": "`app/admin/audit-log/page.tsx:296` calls `DELETE /api/admin/audit-log?days=${days}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/audit-log`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6073cd29d0a726be", "name": "Dangling fetch: GET /api/osce/results (app/admin/osce-results/page.tsx:93)", "shortDescription": {"text": "Dangling fetch: GET /api/osce/results (app/admin/osce-results/page.tsx:93)"}, "fullDescription": {"text": "`app/admin/osce-results/page.tsx:93` calls `GET /api/osce/results` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/results`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ca3eccd6f7cc7ec6", "name": "Dangling fetch: GET /api/instructor/me (app/admin/external-access/page.tsx:72)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/external-access/page.tsx:72)"}, "fullDescription": {"text": "`app/admin/external-access/page.tsx:72` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6d01dbb9d15b635f", "name": "Dangling fetch: GET /api/admin/external-access (app/admin/external-access/page.tsx:86)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/external-access (app/admin/external-access/page.tsx:86)"}, "fullDescription": {"text": "`app/admin/external-access/page.tsx:86` calls `GET /api/admin/external-access` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/external-access`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c025c125df56bac5", "name": "Dangling fetch: GET /api/lab-management/cohorts (app/admin/external-access/page.tsx:97)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/admin/external-access/page.tsx:97)"}, "fullDescription": {"text": "`app/admin/external-access/page.tsx:97` calls `GET /api/lab-management/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3353e204f34ccb94", "name": "Dangling fetch: POST /api/admin/external-access (app/admin/external-access/page.tsx:122)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/external-access (app/admin/external-access/page.tsx:122)"}, "fullDescription": {"text": "`app/admin/external-access/page.tsx:122` calls `POST /api/admin/external-access` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/external-access`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c775a825a869a227", "name": "Dangling fetch: PUT /api/admin/external-access (app/admin/external-access/page.tsx:146)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/external-access (app/admin/external-access/page.tsx:146)"}, "fullDescription": {"text": "`app/admin/external-access/page.tsx:146` calls `PUT /api/admin/external-access` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/external-access`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-63254040e69af3c0", "name": "Dangling fetch: POST /api/admin/external-access/import (app/admin/external-access/page.tsx:192)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/external-access/import (app/admin/external-access/page.tsx:192)"}, "fullDescription": {"text": "`app/admin/external-access/page.tsx:192` calls `POST /api/admin/external-access/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/external-access/import`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ce10f0c49fb0517", "name": "Dangling fetch: GET /api/instructor/me (app/admin/data-import/page.tsx:364)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/data-import/page.tsx:364)"}, "fullDescription": {"text": "`app/admin/data-import/page.tsx:364` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e96d1580ffe59a6", "name": "Dangling fetch: GET /api/admin/data-import/history?importType=${activeTab}&limit=10 (app/admin/data-import/page.tsx:383)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/data-import/history?importType=${activeTab}&limit=10 (app/admin/data-import/page.tsx:383)"}, "fullDescription": {"text": "`app/admin/data-import/page.tsx:383` calls `GET /api/admin/data-import/history?importType=${activeTab}&limit=10` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/data-import/history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e2d73531a7b75b41", "name": "Dangling fetch: POST /api/admin/data-import/preview (app/admin/data-import/page.tsx:472)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/data-import/preview (app/admin/data-import/page.tsx:472)"}, "fullDescription": {"text": "`app/admin/data-import/page.tsx:472` calls `POST /api/admin/data-import/preview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/data-import/preview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2e574e0781c84542", "name": "Dangling fetch: POST /api/admin/data-import/execute (app/admin/data-import/page.tsx:511)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/data-import/execute (app/admin/data-import/page.tsx:511)"}, "fullDescription": {"text": "`app/admin/data-import/page.tsx:511` calls `POST /api/admin/data-import/execute` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/data-import/execute`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f07e57a5404af6f3", "name": "Dangling fetch: GET /api/instructor/me (app/admin/program-requirements/page.tsx:351)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/program-requirements/page.tsx:351)"}, "fullDescription": {"text": "`app/admin/program-requirements/page.tsx:351` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-32a93f9db0ba5a6e", "name": "Dangling fetch: GET /api/admin/program-requirements (app/admin/program-requirements/page.tsx:369)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/program-requirements (app/admin/program-requirements/page.tsx:369)"}, "fullDescription": {"text": "`app/admin/program-requirements/page.tsx:369` calls `GET /api/admin/program-requirements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/program-requirements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-22aecdc5e1eac1f9", "name": "Dangling fetch: GET /api/admin/program-requirements?includeHistory=true (app/admin/program-requirements/page.tsx:383)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/program-requirements?includeHistory=true (app/admin/program-requirements/page.tsx:383)"}, "fullDescription": {"text": "`app/admin/program-requirements/page.tsx:383` calls `GET /api/admin/program-requirements?includeHistory=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/program-requirements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-57e98b7a73dfc97c", "name": "Dangling fetch: POST /api/admin/program-requirements (app/admin/program-requirements/page.tsx:409)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/program-requirements (app/admin/program-requirements/page.tsx:409)"}, "fullDescription": {"text": "`app/admin/program-requirements/page.tsx:409` calls `POST /api/admin/program-requirements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/program-requirements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-02c3e84e0dd9ce44", "name": "Dangling fetch: GET /api/checkin/${token} (app/checkin/[token]/page.tsx:51)", "shortDescription": {"text": "Dangling fetch: GET /api/checkin/${token} (app/checkin/[token]/page.tsx:51)"}, "fullDescription": {"text": "`app/checkin/[token]/page.tsx:51` calls `GET /api/checkin/${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/checkin/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5588572d5fb8244f", "name": "Dangling fetch: POST /api/checkin/${token} (app/checkin/[token]/page.tsx:95)", "shortDescription": {"text": "Dangling fetch: POST /api/checkin/${token} (app/checkin/[token]/page.tsx:95)"}, "fullDescription": {"text": "`app/checkin/[token]/page.tsx:95` calls `POST /api/checkin/${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/checkin/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a0d8579c769dce0e", "name": "Dangling fetch: GET /api/feedback/my-submissions?${params.toString()} (app/feedback/my-submissions/page.tsx:174)", "shortDescription": {"text": "Dangling fetch: GET /api/feedback/my-submissions?${params.toString()} (app/feedback/my-submissions/page.tsx:174)"}, "fullDescription": {"text": "`app/feedback/my-submissions/page.tsx:174` calls `GET /api/feedback/my-submissions?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/feedback/my-submissions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f23b27b064cc291c", "name": "Dangling fetch: PATCH /api/lab-management/timer (app/timer-display/live/[labDayId]/page.tsx:239)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/timer (app/timer-display/live/[labDayId]/page.tsx:239)"}, "fullDescription": {"text": "`app/timer-display/live/[labDayId]/page.tsx:239` calls `PATCH /api/lab-management/timer` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/timer`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ae9e992ede8dd712", "name": "Dangling fetch: PATCH /api/lab-management/timer/adjust (app/timer-display/live/[labDayId]/page.tsx:259)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/timer/adjust (app/timer-display/live/[labDayId]/page.tsx:259)"}, "fullDescription": {"text": "`app/timer-display/live/[labDayId]/page.tsx:259` calls `PATCH /api/lab-management/timer/adjust` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/timer/adjust`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c1e5c29f62e12ee6", "name": "Dangling fetch: GET /api/lab-management/timer/ready?labDayId=${labDayId} (app/timer-display/live/[labDayId]/page.tsx:345", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/timer/ready?labDayId=${labDayId} (app/timer-display/live/[labDayId]/page.tsx:345)"}, "fullDescription": {"text": "`app/timer-display/live/[labDayId]/page.tsx:345` calls `GET /api/lab-management/timer/ready?labDayId=${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/timer/ready`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-daa085ab0720a6eb", "name": "Dangling fetch: GET /api/timer-display/${token} (app/timer-display/[token]/page.tsx:266)", "shortDescription": {"text": "Dangling fetch: GET /api/timer-display/${token} (app/timer-display/[token]/page.tsx:266)"}, "fullDescription": {"text": "`app/timer-display/[token]/page.tsx:266` calls `GET /api/timer-display/${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/timer-display/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1f60e26ebb03fc3b", "name": "Dangling fetch: GET /api/reports/clinical-placements (app/reports/clinical-placements/page.tsx:63)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/clinical-placements (app/reports/clinical-placements/page.tsx:63)"}, "fullDescription": {"text": "`app/reports/clinical-placements/page.tsx:63` calls `GET /api/reports/clinical-placements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/clinical-placements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b4aad5b63922ee2e", "name": "Dangling fetch: GET /api/reports/program-overview?${params} (app/reports/program-overview/page.tsx:63)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/program-overview?${params} (app/reports/program-overview/page.tsx:63)"}, "fullDescription": {"text": "`app/reports/program-overview/page.tsx:63` calls `GET /api/reports/program-overview?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/program-overview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0d936d4159ac34c5", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/reports/internship-status/page.tsx:91)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/reports/internship-status/page.tsx:91)"}, "fullDescription": {"text": "`app/reports/internship-status/page.tsx:91` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-015ad761fdaa2bb7", "name": "Dangling fetch: GET /api/reports/internship-status?${params} (app/reports/internship-status/page.tsx:118)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/internship-status?${params} (app/reports/internship-status/page.tsx:118)"}, "fullDescription": {"text": "`app/reports/internship-status/page.tsx:118` calls `GET /api/reports/internship-status?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/internship-status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e49e28d2873cd2e6", "name": "Dangling fetch: GET /api/reports/instructor-analytics?${params} (app/reports/instructor-analytics/page.tsx:73)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/instructor-analytics?${params} (app/reports/instructor-analytics/page.tsx:73)"}, "fullDescription": {"text": "`app/reports/instructor-analytics/page.tsx:73` calls `GET /api/reports/instructor-analytics?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/instructor-analytics`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-077cc63eeff30a86", "name": "Dangling fetch: GET /api/reports/availability-patterns?${params} (app/reports/availability-patterns/page.tsx:360)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/availability-patterns?${params} (app/reports/availability-patterns/page.tsx:360)"}, "fullDescription": {"text": "`app/reports/availability-patterns/page.tsx:360` calls `GET /api/reports/availability-patterns?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/availability-patterns`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f265fac9f5645911", "name": "Dangling fetch: GET /api/reports/onboarding-status (app/reports/onboarding-status/page.tsx:73)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/onboarding-status (app/reports/onboarding-status/page.tsx:73)"}, "fullDescription": {"text": "`app/reports/onboarding-status/page.tsx:73` calls `GET /api/reports/onboarding-status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/onboarding-status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fcbd07bc68d3c084", "name": "Dangling fetch: GET /api/reports/scenario-usage?${params} (app/reports/scenario-usage/page.tsx:107)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/scenario-usage?${params} (app/reports/scenario-usage/page.tsx:107)"}, "fullDescription": {"text": "`app/reports/scenario-usage/page.tsx:107` calls `GET /api/reports/scenario-usage?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/scenario-usage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-518a910bd45de008", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/reports/lab-progress/page.tsx:118)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/reports/lab-progress/page.tsx:118)"}, "fullDescription": {"text": "`app/reports/lab-progress/page.tsx:118` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-de2a7e34811947b6", "name": "Dangling fetch: GET /api/reports/lab-progress?${params} (app/reports/lab-progress/page.tsx:150)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/lab-progress?${params} (app/reports/lab-progress/page.tsx:150)"}, "fullDescription": {"text": "`app/reports/lab-progress/page.tsx:150` calls `GET /api/reports/lab-progress?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/lab-progress`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-75c9017d7834cf54", "name": "Dangling fetch: GET /api/instructor/me (app/reports/builder/page.tsx:157)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/reports/builder/page.tsx:157)"}, "fullDescription": {"text": "`app/reports/builder/page.tsx:157` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7d16c6928148426c", "name": "Dangling fetch: GET /api/reports/builder?action=schema (app/reports/builder/page.tsx:167)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/builder?action=schema (app/reports/builder/page.tsx:167)"}, "fullDescription": {"text": "`app/reports/builder/page.tsx:167` calls `GET /api/reports/builder?action=schema` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/builder`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-62f416645668f1df", "name": "Dangling fetch: GET /api/reports/builder?action=templates (app/reports/builder/page.tsx:180)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/builder?action=templates (app/reports/builder/page.tsx:180)"}, "fullDescription": {"text": "`app/reports/builder/page.tsx:180` calls `GET /api/reports/builder?action=templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/builder`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-14a43bf1d39f9268", "name": "Dangling fetch: GET /api/reports/builder?${params.toString()} (app/reports/builder/page.tsx:295)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/builder?${params.toString()} (app/reports/builder/page.tsx:295)"}, "fullDescription": {"text": "`app/reports/builder/page.tsx:295` calls `GET /api/reports/builder?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/builder`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e8f77f61655f358", "name": "Dangling fetch: GET /api/reports/builder (app/reports/builder/page.tsx:331)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/builder (app/reports/builder/page.tsx:331)"}, "fullDescription": {"text": "`app/reports/builder/page.tsx:331` calls `GET /api/reports/builder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/builder`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c14347797aa61cea", "name": "Dangling fetch: DELETE /api/reports/builder?id=${id} (app/reports/builder/page.tsx:381)", "shortDescription": {"text": "Dangling fetch: DELETE /api/reports/builder?id=${id} (app/reports/builder/page.tsx:381)"}, "fullDescription": {"text": "`app/reports/builder/page.tsx:381` calls `DELETE /api/reports/builder?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/builder`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a99d31dc298f6c2c", "name": "Dangling fetch: GET /api/lab-management/cohorts (app/reports/lab-costs/page.tsx:125)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/reports/lab-costs/page.tsx:125)"}, "fullDescription": {"text": "`app/reports/lab-costs/page.tsx:125` calls `GET /api/lab-management/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7362b695135a5cf1", "name": "Dangling fetch: GET /api/lab-management/costs?${params} (app/reports/lab-costs/page.tsx:149)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/costs?${params} (app/reports/lab-costs/page.tsx:149)"}, "fullDescription": {"text": "`app/reports/lab-costs/page.tsx:149` calls `GET /api/lab-management/costs?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/costs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-52f0d87e300552f2", "name": "Dangling fetch: GET /api/reports/student-dashboard?${params} (app/reports/student-dashboard/page.tsx:89)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/student-dashboard?${params} (app/reports/student-dashboard/page.tsx:89)"}, "fullDescription": {"text": "`app/reports/student-dashboard/page.tsx:89` calls `GET /api/reports/student-dashboard?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/student-dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f87df001dbbdc670", "name": "Dangling fetch: GET /api/reports/closeout-surveys?${params} (app/reports/closeout-surveys/page.tsx:151)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/closeout-surveys?${params} (app/reports/closeout-surveys/page.tsx:151)"}, "fullDescription": {"text": "`app/reports/closeout-surveys/page.tsx:151` calls `GET /api/reports/closeout-surveys?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/closeout-surveys`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7b7565e668d44590", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/reports/team-leads/page.tsx:97)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/reports/team-leads/page.tsx:97)"}, "fullDescription": {"text": "`app/reports/team-leads/page.tsx:97` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0c877e0ba26f19f0", "name": "Dangling fetch: GET /api/reports/team-leads?${params} (app/reports/team-leads/page.tsx:126)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/team-leads?${params} (app/reports/team-leads/page.tsx:126)"}, "fullDescription": {"text": "`app/reports/team-leads/page.tsx:126` calls `GET /api/reports/team-leads?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/team-leads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e13720bd2592aed", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/reports/student-progress/page.tsx:150)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/reports/student-progress/page.tsx:150)"}, "fullDescription": {"text": "`app/reports/student-progress/page.tsx:150` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a4ba50778835b5f0", "name": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/reports/student-progress/page.t", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/reports/student-progress/page.tsx:165)"}, "fullDescription": {"text": "`app/reports/student-progress/page.tsx:165` calls `GET /api/lab-management/students?cohortId=${cohortId}&status=active` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c339450aba7f44e", "name": "Dangling fetch: GET /api/reports/student-progress?${params} (app/reports/student-progress/page.tsx:191)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/student-progress?${params} (app/reports/student-progress/page.tsx:191)"}, "fullDescription": {"text": "`app/reports/student-progress/page.tsx:191` calls `GET /api/reports/student-progress?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/student-progress`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-af06728c6f02565c", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/reports/instructor-workload/page.tsx:106)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/reports/instructor-workload/page.tsx:106)"}, "fullDescription": {"text": "`app/reports/instructor-workload/page.tsx:106` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-05e6f9e9f4d35a1d", "name": "Dangling fetch: GET /api/reports/instructor-workload?${params} (app/reports/instructor-workload/page.tsx:129)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/instructor-workload?${params} (app/reports/instructor-workload/page.tsx:129)"}, "fullDescription": {"text": "`app/reports/instructor-workload/page.tsx:129` calls `GET /api/reports/instructor-workload?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/instructor-workload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1cb8f93fe32a6ead", "name": "Dangling fetch: GET /api/reports/skill-trends?${params} (app/reports/skill-trends/page.tsx:211)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/skill-trends?${params} (app/reports/skill-trends/page.tsx:211)"}, "fullDescription": {"text": "`app/reports/skill-trends/page.tsx:211` calls `GET /api/reports/skill-trends?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/skill-trends`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2a26116b2465e76d", "name": "Dangling fetch: GET /api/reports/scenario-usage-overview (app/reports/scenario-usage-overview/page.tsx:58)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/scenario-usage-overview (app/reports/scenario-usage-overview/page.tsx:58)"}, "fullDescription": {"text": "`app/reports/scenario-usage-overview/page.tsx:58` calls `GET /api/reports/scenario-usage-overview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/scenario-usage-overview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-93e9d02cab90c3c3", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=false (app/reports/cohort-comparison/page.tsx:173)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=false (app/reports/cohort-comparison/page.tsx:173)"}, "fullDescription": {"text": "`app/reports/cohort-comparison/page.tsx:173` calls `GET /api/lab-management/cohorts?activeOnly=false` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4fd71b117132dccc", "name": "Dangling fetch: POST /api/reports/cohort-comparison (app/reports/cohort-comparison/page.tsx:203)", "shortDescription": {"text": "Dangling fetch: POST /api/reports/cohort-comparison (app/reports/cohort-comparison/page.tsx:203)"}, "fullDescription": {"text": "`app/reports/cohort-comparison/page.tsx:203` calls `POST /api/reports/cohort-comparison` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/cohort-comparison`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-34983015b57cfbff", "name": "Dangling fetch: GET /api/instructor/me (app/reports/program-outcomes/page.tsx:441)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/reports/program-outcomes/page.tsx:441)"}, "fullDescription": {"text": "`app/reports/program-outcomes/page.tsx:441` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8475206587c3021d", "name": "Dangling fetch: GET /api/reports/program-outcomes (app/reports/program-outcomes/page.tsx:455)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/program-outcomes (app/reports/program-outcomes/page.tsx:455)"}, "fullDescription": {"text": "`app/reports/program-outcomes/page.tsx:455` calls `GET /api/reports/program-outcomes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/program-outcomes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c3318ec761a92e13", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=false (app/reports/program-outcomes/page.tsx:456)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=false (app/reports/program-outcomes/page.tsx:456)"}, "fullDescription": {"text": "`app/reports/program-outcomes/page.tsx:456` calls `GET /api/lab-management/cohorts?activeOnly=false` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-295f11c080ae918f", "name": "Dangling fetch: POST /api/reports/program-outcomes (app/reports/program-outcomes/page.tsx:572)", "shortDescription": {"text": "Dangling fetch: POST /api/reports/program-outcomes (app/reports/program-outcomes/page.tsx:572)"}, "fullDescription": {"text": "`app/reports/program-outcomes/page.tsx:572` calls `POST /api/reports/program-outcomes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/program-outcomes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ad6e2c9815172c2", "name": "Dangling fetch: DELETE /api/reports/program-outcomes?id=${id} (app/reports/program-outcomes/page.tsx:597)", "shortDescription": {"text": "Dangling fetch: DELETE /api/reports/program-outcomes?id=${id} (app/reports/program-outcomes/page.tsx:597)"}, "fullDescription": {"text": "`app/reports/program-outcomes/page.tsx:597` calls `DELETE /api/reports/program-outcomes?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/program-outcomes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9357e43cabed4e36", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=false&include_archived=false (app/reports/gradebook/page.tsx:", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=false&include_archived=false (app/reports/gradebook/page.tsx:201)"}, "fullDescription": {"text": "`app/reports/gradebook/page.tsx:201` calls `GET /api/lab-management/cohorts?activeOnly=false&include_archived=false` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-50c219c190bee2d1", "name": "Dangling fetch: GET /api/reports/gradebook?cohortId=${encodeURIComponent(cohortId)} (app/reports/gradebook/page.tsx:216)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/gradebook?cohortId=${encodeURIComponent(cohortId)} (app/reports/gradebook/page.tsx:216)"}, "fullDescription": {"text": "`app/reports/gradebook/page.tsx:216` calls `GET /api/reports/gradebook?cohortId=${encodeURIComponent(cohortId)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/gradebook`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-711efc2317795f41", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/reports/attendance/page.tsx:93)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/reports/attendance/page.tsx:93)"}, "fullDescription": {"text": "`app/reports/attendance/page.tsx:93` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0cd8ae60b090cb0b", "name": "Dangling fetch: GET /api/reports/attendance?${params} (app/reports/attendance/page.tsx:121)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/attendance?${params} (app/reports/attendance/page.tsx:121)"}, "fullDescription": {"text": "`app/reports/attendance/page.tsx:121` calls `GET /api/reports/attendance?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/attendance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-18d8382534473126", "name": "Dangling fetch: GET /api/reports/scenario-analytics?${params} (app/reports/scenario-analytics/page.tsx:152)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/scenario-analytics?${params} (app/reports/scenario-analytics/page.tsx:152)"}, "fullDescription": {"text": "`app/reports/scenario-analytics/page.tsx:152` calls `GET /api/reports/scenario-analytics?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/scenario-analytics`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7d01680806037e21", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=false (app/reports/clinical-hours/page.tsx:106)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=false (app/reports/clinical-hours/page.tsx:106)"}, "fullDescription": {"text": "`app/reports/clinical-hours/page.tsx:106` calls `GET /api/lab-management/cohorts?activeOnly=false` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7163998392e2e221", "name": "Dangling fetch: GET /api/reports/clinical-hours?${params} (app/reports/clinical-hours/page.tsx:135)", "shortDescription": {"text": "Dangling fetch: GET /api/reports/clinical-hours?${params} (app/reports/clinical-hours/page.tsx:135)"}, "fullDescription": {"text": "`app/reports/clinical-hours/page.tsx:135` calls `GET /api/reports/clinical-hours?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/reports/clinical-hours`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4bf586e837827ff6", "name": "Dangling fetch: POST /api/analytics/link-click (app/auth/signin/page.tsx:105)", "shortDescription": {"text": "Dangling fetch: POST /api/analytics/link-click (app/auth/signin/page.tsx:105)"}, "fullDescription": {"text": "`app/auth/signin/page.tsx:105` calls `POST /api/analytics/link-click` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/analytics/link-click`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b1dfd3e6affba116", "name": "Dangling fetch: GET /api/access-requests/status (app/request-access/page.tsx:65)", "shortDescription": {"text": "Dangling fetch: GET /api/access-requests/status (app/request-access/page.tsx:65)"}, "fullDescription": {"text": "`app/request-access/page.tsx:65` calls `GET /api/access-requests/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/access-requests/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa893d9ede7699c1", "name": "Dangling fetch: POST /api/access-requests (app/request-access/page.tsx:112)", "shortDescription": {"text": "Dangling fetch: POST /api/access-requests (app/request-access/page.tsx:112)"}, "fullDescription": {"text": "`app/request-access/page.tsx:112` calls `POST /api/access-requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/access-requests`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e270b77bf37512a1", "name": "Dangling fetch: GET /api/resources/versions?resourceId=${resourceId} (app/resources/page.tsx:433)", "shortDescription": {"text": "Dangling fetch: GET /api/resources/versions?resourceId=${resourceId} (app/resources/page.tsx:433)"}, "fullDescription": {"text": "`app/resources/page.tsx:433` calls `GET /api/resources/versions?resourceId=${resourceId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/resources/versions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5eb6dfedcde528e4", "name": "Dangling fetch: GET /api/instructor/me (app/resources/page.tsx:706)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/resources/page.tsx:706)"}, "fullDescription": {"text": "`app/resources/page.tsx:706` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-34b83eaf7bd44eef", "name": "Dangling fetch: GET /api/resources?${params.toString()} (app/resources/page.tsx:726)", "shortDescription": {"text": "Dangling fetch: GET /api/resources?${params.toString()} (app/resources/page.tsx:726)"}, "fullDescription": {"text": "`app/resources/page.tsx:726` calls `GET /api/resources?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/resources`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b0bc032f02e2bab", "name": "Dangling fetch: POST /api/resources (app/resources/page.tsx:760)", "shortDescription": {"text": "Dangling fetch: POST /api/resources (app/resources/page.tsx:760)"}, "fullDescription": {"text": "`app/resources/page.tsx:760` calls `POST /api/resources` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/resources`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e826687b4da51c9d", "name": "Dangling fetch: PUT /api/resources (app/resources/page.tsx:782)", "shortDescription": {"text": "Dangling fetch: PUT /api/resources (app/resources/page.tsx:782)"}, "fullDescription": {"text": "`app/resources/page.tsx:782` calls `PUT /api/resources` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/resources`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ffa5455238bc8e65", "name": "Dangling fetch: DELETE /api/resources?id=${deletingResource.id} (app/resources/page.tsx:805)", "shortDescription": {"text": "Dangling fetch: DELETE /api/resources?id=${deletingResource.id} (app/resources/page.tsx:805)"}, "fullDescription": {"text": "`app/resources/page.tsx:805` calls `DELETE /api/resources?id=${deletingResource.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/resources`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2a8732553eeb86fe", "name": "Dangling fetch: GET /api/instructor/me (app/resources/medications/page.tsx:842)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/resources/medications/page.tsx:842)"}, "fullDescription": {"text": "`app/resources/medications/page.tsx:842` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-378096b60bf73a07", "name": "Dangling fetch: GET /api/resources/medications?${params.toString()} (app/resources/medications/page.tsx:858)", "shortDescription": {"text": "Dangling fetch: GET /api/resources/medications?${params.toString()} (app/resources/medications/page.tsx:858)"}, "fullDescription": {"text": "`app/resources/medications/page.tsx:858` calls `GET /api/resources/medications?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/resources/medications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-167340b968a2ebc6", "name": "Dangling fetch: POST /api/resources/medications (app/resources/medications/page.tsx:892)", "shortDescription": {"text": "Dangling fetch: POST /api/resources/medications (app/resources/medications/page.tsx:892)"}, "fullDescription": {"text": "`app/resources/medications/page.tsx:892` calls `POST /api/resources/medications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/resources/medications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b20f23b5fb595787", "name": "Dangling fetch: PUT /api/resources/medications/${editingMed.id} (app/resources/medications/page.tsx:905)", "shortDescription": {"text": "Dangling fetch: PUT /api/resources/medications/${editingMed.id} (app/resources/medications/page.tsx:905)"}, "fullDescription": {"text": "`app/resources/medications/page.tsx:905` calls `PUT /api/resources/medications/${editingMed.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/resources/medications/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-27c6be374b33d0d3", "name": "Dangling fetch: DELETE /api/resources/medications/${deletingMed.id} (app/resources/medications/page.tsx:918)", "shortDescription": {"text": "Dangling fetch: DELETE /api/resources/medications/${deletingMed.id} (app/resources/medications/page.tsx:918)"}, "fullDescription": {"text": "`app/resources/medications/page.tsx:918` calls `DELETE /api/resources/medications/${deletingMed.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/resources/medications/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e6038bb4a6f07d2", "name": "Dangling fetch: GET /api/osce/assessments?${params.toString()} (app/osce-scoring/dashboard/page.tsx:78)", "shortDescription": {"text": "Dangling fetch: GET /api/osce/assessments?${params.toString()} (app/osce-scoring/dashboard/page.tsx:78)"}, "fullDescription": {"text": "`app/osce-scoring/dashboard/page.tsx:78` calls `GET /api/osce/assessments?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/assessments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0063052b8f69eed5", "name": "Dangling fetch: POST /api/osce/validate-pin (app/osce-scoring/enter/page.tsx:94)", "shortDescription": {"text": "Dangling fetch: POST /api/osce/validate-pin (app/osce-scoring/enter/page.tsx:94)"}, "fullDescription": {"text": "`app/osce-scoring/enter/page.tsx:94` calls `POST /api/osce/validate-pin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/validate-pin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8e1023bc053145c8", "name": "Dangling fetch: GET /api/osce/validate-token?token=${encodeURIComponent(t)} (app/osce-scoring/enter/page.tsx:144)", "shortDescription": {"text": "Dangling fetch: GET /api/osce/validate-token?token=${encodeURIComponent(t)} (app/osce-scoring/enter/page.tsx:144)"}, "fullDescription": {"text": "`app/osce-scoring/enter/page.tsx:144` calls `GET /api/osce/validate-token?token=${encodeURIComponent(t)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/validate-token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-11b71ebb90bf31df", "name": "Dangling fetch: GET /api/osce/scenario/${letter} (app/osce-scoring/[assessmentId]/page.tsx:416)", "shortDescription": {"text": "Dangling fetch: GET /api/osce/scenario/${letter} (app/osce-scoring/[assessmentId]/page.tsx:416)"}, "fullDescription": {"text": "`app/osce-scoring/[assessmentId]/page.tsx:416` calls `GET /api/osce/scenario/${letter}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/scenario/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ce4cc0504e3b7412", "name": "Dangling fetch: GET /api/osce/scores/${assessmentId}?evaluator=${encodeURIComponent(evaluatorName)} (app/osce-scoring/[a", "shortDescription": {"text": "Dangling fetch: GET /api/osce/scores/${assessmentId}?evaluator=${encodeURIComponent(evaluatorName)} (app/osce-scoring/[assessmentId]/page.tsx:442)"}, "fullDescription": {"text": "`app/osce-scoring/[assessmentId]/page.tsx:442` calls `GET /api/osce/scores/${assessmentId}?evaluator=${encodeURIComponent(evaluatorName)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/scores/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b2676b7cd285e3cd", "name": "Dangling fetch: PUT /api/osce/scores/${assessmentId} (app/osce-scoring/[assessmentId]/page.tsx:467)", "shortDescription": {"text": "Dangling fetch: PUT /api/osce/scores/${assessmentId} (app/osce-scoring/[assessmentId]/page.tsx:467)"}, "fullDescription": {"text": "`app/osce-scoring/[assessmentId]/page.tsx:467` calls `PUT /api/osce/scores/${assessmentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/scores/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-724e1d89297be3ba", "name": "Dangling fetch: PUT /api/osce/scores/${assessmentId} (app/osce-scoring/[assessmentId]/page.tsx:491)", "shortDescription": {"text": "Dangling fetch: PUT /api/osce/scores/${assessmentId} (app/osce-scoring/[assessmentId]/page.tsx:491)"}, "fullDescription": {"text": "`app/osce-scoring/[assessmentId]/page.tsx:491` calls `PUT /api/osce/scores/${assessmentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/scores/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-72aa83950d9ff1dd", "name": "Dangling fetch: POST /api/osce/scores/${assessmentId}/submit (app/osce-scoring/[assessmentId]/page.tsx:610)", "shortDescription": {"text": "Dangling fetch: POST /api/osce/scores/${assessmentId}/submit (app/osce-scoring/[assessmentId]/page.tsx:610)"}, "fullDescription": {"text": "`app/osce-scoring/[assessmentId]/page.tsx:610` calls `POST /api/osce/scores/${assessmentId}/submit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/scores/<p>/submit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aa7d769972fe6c0c", "name": "Dangling fetch: GET /api/osce-scenarios (app/osce-scenario/page.tsx:22)", "shortDescription": {"text": "Dangling fetch: GET /api/osce-scenarios (app/osce-scenario/page.tsx:22)"}, "fullDescription": {"text": "`app/osce-scenario/page.tsx:22` calls `GET /api/osce-scenarios` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce-scenarios`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0ffd5ae53563eacf", "name": "Dangling fetch: GET /api/osce-scenarios/${letter} (app/osce-scenario/[letter]/page.tsx:67)", "shortDescription": {"text": "Dangling fetch: GET /api/osce-scenarios/${letter} (app/osce-scenario/[letter]/page.tsx:67)"}, "fullDescription": {"text": "`app/osce-scenario/[letter]/page.tsx:67` calls `GET /api/osce-scenarios/${letter}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce-scenarios/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ab976c4c3021cce7", "name": "Dangling fetch: GET /api/ride-along-poll/${token} (app/ride-along-poll/[token]/page.tsx:63)", "shortDescription": {"text": "Dangling fetch: GET /api/ride-along-poll/${token} (app/ride-along-poll/[token]/page.tsx:63)"}, "fullDescription": {"text": "`app/ride-along-poll/[token]/page.tsx:63` calls `GET /api/ride-along-poll/${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ride-along-poll/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e1a3519b8ee45215", "name": "Dangling fetch: POST /api/ride-along-poll/${token} (app/ride-along-poll/[token]/page.tsx:138)", "shortDescription": {"text": "Dangling fetch: POST /api/ride-along-poll/${token} (app/ride-along-poll/[token]/page.tsx:138)"}, "fullDescription": {"text": "`app/ride-along-poll/[token]/page.tsx:138` calls `POST /api/ride-along-poll/${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ride-along-poll/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eb1eb1df9fa66cdb", "name": "Dangling fetch: POST /api/polls (app/poll/create/page.tsx:63)", "shortDescription": {"text": "Dangling fetch: POST /api/polls (app/poll/create/page.tsx:63)"}, "fullDescription": {"text": "`app/poll/create/page.tsx:63` calls `POST /api/polls` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/polls`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b14420725e85e5e9", "name": "Dangling fetch: GET /api/students/${studentId}/progress (app/students/[id]/progress/page.tsx:639)", "shortDescription": {"text": "Dangling fetch: GET /api/students/${studentId}/progress (app/students/[id]/progress/page.tsx:639)"}, "fullDescription": {"text": "`app/students/[id]/progress/page.tsx:639` calls `GET /api/students/${studentId}/progress` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/students/<p>/progress`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9830559279ba4cf5", "name": "Dangling fetch: GET /api/students/${studentId}/skill-evaluations (app/students/[id]/progress/page.tsx:657)", "shortDescription": {"text": "Dangling fetch: GET /api/students/${studentId}/skill-evaluations (app/students/[id]/progress/page.tsx:657)"}, "fullDescription": {"text": "`app/students/[id]/progress/page.tsx:657` calls `GET /api/students/${studentId}/skill-evaluations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/students/<p>/skill-evaluations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cb6d287b78b7d900", "name": "Dangling fetch: GET /api/skill-sheets/${sheetId} (app/skill-sheets/[id]/page.tsx:193)", "shortDescription": {"text": "Dangling fetch: GET /api/skill-sheets/${sheetId} (app/skill-sheets/[id]/page.tsx:193)"}, "fullDescription": {"text": "`app/skill-sheets/[id]/page.tsx:193` calls `GET /api/skill-sheets/${sheetId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9ad8110d7ab931f9", "name": "Dangling fetch: GET /api/students?role=student (app/skill-sheets/[id]/page.tsx:209)", "shortDescription": {"text": "Dangling fetch: GET /api/students?role=student (app/skill-sheets/[id]/page.tsx:209)"}, "fullDescription": {"text": "`app/skill-sheets/[id]/page.tsx:209` calls `GET /api/students?role=student` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ee180e3ca399b04d", "name": "Dangling fetch: GET /api/lab-management/lab-days?limit=20 (app/skill-sheets/[id]/page.tsx:221)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days?limit=20 (app/skill-sheets/[id]/page.tsx:221)"}, "fullDescription": {"text": "`app/skill-sheets/[id]/page.tsx:221` calls `GET /api/lab-management/lab-days?limit=20` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-765263f53accd9d3", "name": "Dangling fetch: POST /api/skill-sheets/${sheetId}/evaluate (app/skill-sheets/[id]/page.tsx:381)", "shortDescription": {"text": "Dangling fetch: POST /api/skill-sheets/${sheetId}/evaluate (app/skill-sheets/[id]/page.tsx:381)"}, "fullDescription": {"text": "`app/skill-sheets/[id]/page.tsx:381` calls `POST /api/skill-sheets/${sheetId}/evaluate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets/<p>/evaluate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f656563ecfdfef81", "name": "Dangling fetch: GET /api/osce/public/${slug} (app/osce/[slug]/page.tsx:53)", "shortDescription": {"text": "Dangling fetch: GET /api/osce/public/${slug} (app/osce/[slug]/page.tsx:53)"}, "fullDescription": {"text": "`app/osce/[slug]/page.tsx:53` calls `GET /api/osce/public/${slug}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/public/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-50a001256326ea3e", "name": "Dangling fetch: POST /api/osce/public/${slug}/register (app/osce/[slug]/page.tsx:125)", "shortDescription": {"text": "Dangling fetch: POST /api/osce/public/${slug}/register (app/osce/[slug]/page.tsx:125)"}, "fullDescription": {"text": "`app/osce/[slug]/page.tsx:125` calls `POST /api/osce/public/${slug}/register` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/public/<p>/register`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5e202394814be5e8", "name": "Dangling fetch: GET /api/notifications/digest-preview (app/settings/page.tsx:183)", "shortDescription": {"text": "Dangling fetch: GET /api/notifications/digest-preview (app/settings/page.tsx:183)"}, "fullDescription": {"text": "`app/settings/page.tsx:183` calls `GET /api/notifications/digest-preview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/digest-preview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e493d4711a1f18b2", "name": "Dangling fetch: GET /api/notifications/preferences (app/settings/page.tsx:205)", "shortDescription": {"text": "Dangling fetch: GET /api/notifications/preferences (app/settings/page.tsx:205)"}, "fullDescription": {"text": "`app/settings/page.tsx:205` calls `GET /api/notifications/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-149a187cfaf9a5be", "name": "Dangling fetch: GET /api/notifications/email-preferences (app/settings/page.tsx:206)", "shortDescription": {"text": "Dangling fetch: GET /api/notifications/email-preferences (app/settings/page.tsx:206)"}, "fullDescription": {"text": "`app/settings/page.tsx:206` calls `GET /api/notifications/email-preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/email-preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-004dfdfa810f6019", "name": "Dangling fetch: GET /api/user/preferences (app/settings/page.tsx:207)", "shortDescription": {"text": "Dangling fetch: GET /api/user/preferences (app/settings/page.tsx:207)"}, "fullDescription": {"text": "`app/settings/page.tsx:207` calls `GET /api/user/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a24068afb099f96f", "name": "Dangling fetch: GET /api/user/preferences (app/settings/page.tsx:248)", "shortDescription": {"text": "Dangling fetch: GET /api/user/preferences (app/settings/page.tsx:248)"}, "fullDescription": {"text": "`app/settings/page.tsx:248` calls `GET /api/user/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-55773c5f085ff1f0", "name": "Dangling fetch: PUT /api/user/preferences (app/settings/page.tsx:252)", "shortDescription": {"text": "Dangling fetch: PUT /api/user/preferences (app/settings/page.tsx:252)"}, "fullDescription": {"text": "`app/settings/page.tsx:252` calls `PUT /api/user/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e7e1ba99a7f3e85a", "name": "Dangling fetch: PUT /api/notifications/preferences (app/settings/page.tsx:276)", "shortDescription": {"text": "Dangling fetch: PUT /api/notifications/preferences (app/settings/page.tsx:276)"}, "fullDescription": {"text": "`app/settings/page.tsx:276` calls `PUT /api/notifications/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2caaf16f6b208fdf", "name": "Dangling fetch: PUT /api/notifications/email-preferences (app/settings/page.tsx:301)", "shortDescription": {"text": "Dangling fetch: PUT /api/notifications/email-preferences (app/settings/page.tsx:301)"}, "fullDescription": {"text": "`app/settings/page.tsx:301` calls `PUT /api/notifications/email-preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/email-preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-317b344c26a09c8d", "name": "Dangling fetch: PUT /api/notifications/email-preferences (app/settings/page.tsx:323)", "shortDescription": {"text": "Dangling fetch: PUT /api/notifications/email-preferences (app/settings/page.tsx:323)"}, "fullDescription": {"text": "`app/settings/page.tsx:323` calls `PUT /api/notifications/email-preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/email-preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-550b039cb72b0ec3", "name": "Dangling fetch: GET /api/settings/notifications (app/settings/page.tsx:764)", "shortDescription": {"text": "Dangling fetch: GET /api/settings/notifications (app/settings/page.tsx:764)"}, "fullDescription": {"text": "`app/settings/page.tsx:764` calls `GET /api/settings/notifications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/notifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8798f486d71ec677", "name": "Dangling fetch: PUT /api/settings/notifications (app/settings/page.tsx:781)", "shortDescription": {"text": "Dangling fetch: PUT /api/settings/notifications (app/settings/page.tsx:781)"}, "fullDescription": {"text": "`app/settings/page.tsx:781` calls `PUT /api/settings/notifications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/notifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-afa469858ec68464", "name": "Dangling fetch: GET /api/instructor/me (app/settings/page.tsx:1259)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/settings/page.tsx:1259)"}, "fullDescription": {"text": "`app/settings/page.tsx:1259` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-995a6237d6e85e01", "name": "Dangling fetch: PATCH /api/instructor/me (app/settings/page.tsx:1308)", "shortDescription": {"text": "Dangling fetch: PATCH /api/instructor/me (app/settings/page.tsx:1308)"}, "fullDescription": {"text": "`app/settings/page.tsx:1308` calls `PATCH /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8c5aa480d5f61134", "name": "Dangling fetch: GET /api/calendar/sync-my-blocks (app/settings/page.tsx:1454)", "shortDescription": {"text": "Dangling fetch: GET /api/calendar/sync-my-blocks (app/settings/page.tsx:1454)"}, "fullDescription": {"text": "`app/settings/page.tsx:1454` calls `GET /api/calendar/sync-my-blocks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/sync-my-blocks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0c8ca4039db53969", "name": "Dangling fetch: POST /api/calendar/sync-my-blocks (app/settings/page.tsx:1467)", "shortDescription": {"text": "Dangling fetch: POST /api/calendar/sync-my-blocks (app/settings/page.tsx:1467)"}, "fullDescription": {"text": "`app/settings/page.tsx:1467` calls `POST /api/calendar/sync-my-blocks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/sync-my-blocks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-58e5a79ae2acb4b5", "name": "Dangling fetch: GET /api/calendar/status (app/settings/page.tsx:1493)", "shortDescription": {"text": "Dangling fetch: GET /api/calendar/status (app/settings/page.tsx:1493)"}, "fullDescription": {"text": "`app/settings/page.tsx:1493` calls `GET /api/calendar/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0d3c27b960a57b26", "name": "Dangling fetch: GET /api/settings/calendar-sync (app/settings/page.tsx:1506)", "shortDescription": {"text": "Dangling fetch: GET /api/settings/calendar-sync (app/settings/page.tsx:1506)"}, "fullDescription": {"text": "`app/settings/page.tsx:1506` calls `GET /api/settings/calendar-sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/calendar-sync`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-37fb7c68a973f01d", "name": "Dangling fetch: GET /api/calendar/calendars (app/settings/page.tsx:1519)", "shortDescription": {"text": "Dangling fetch: GET /api/calendar/calendars (app/settings/page.tsx:1519)"}, "fullDescription": {"text": "`app/settings/page.tsx:1519` calls `GET /api/calendar/calendars` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/calendars`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-85410ec154efd2f4", "name": "Dangling fetch: PUT /api/calendar/calendars (app/settings/page.tsx:1538)", "shortDescription": {"text": "Dangling fetch: PUT /api/calendar/calendars (app/settings/page.tsx:1538)"}, "fullDescription": {"text": "`app/settings/page.tsx:1538` calls `PUT /api/calendar/calendars` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/calendars`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b4272d3717165725", "name": "Dangling fetch: PUT /api/settings/calendar-sync (app/settings/page.tsx:1554)", "shortDescription": {"text": "Dangling fetch: PUT /api/settings/calendar-sync (app/settings/page.tsx:1554)"}, "fullDescription": {"text": "`app/settings/page.tsx:1554` calls `PUT /api/settings/calendar-sync` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/calendar-sync`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-92ce056b637cd388", "name": "Dangling fetch: POST /api/calendar/disconnect (app/settings/page.tsx:1571)", "shortDescription": {"text": "Dangling fetch: POST /api/calendar/disconnect (app/settings/page.tsx:1571)"}, "fullDescription": {"text": "`app/settings/page.tsx:1571` calls `POST /api/calendar/disconnect` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/disconnect`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d3d3415653bd83f6", "name": "Dangling fetch: GET /api/user-preferences/tour (app/settings/page.tsx:1832)", "shortDescription": {"text": "Dangling fetch: GET /api/user-preferences/tour (app/settings/page.tsx:1832)"}, "fullDescription": {"text": "`app/settings/page.tsx:1832` calls `GET /api/user-preferences/tour` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user-preferences/tour`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-84460a33b0987308", "name": "Dangling fetch: GET /api/instructor/me (app/settings/page.tsx:1833)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/settings/page.tsx:1833)"}, "fullDescription": {"text": "`app/settings/page.tsx:1833` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ad30657be70e1bfd", "name": "Dangling fetch: POST /api/user-preferences/tour (app/settings/page.tsx:1852)", "shortDescription": {"text": "Dangling fetch: POST /api/user-preferences/tour (app/settings/page.tsx:1852)"}, "fullDescription": {"text": "`app/settings/page.tsx:1852` calls `POST /api/user-preferences/tour` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user-preferences/tour`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4405fbd331f70641", "name": "Dangling fetch: POST /api/settings/sessions (app/settings/sessions/page.tsx:196)", "shortDescription": {"text": "Dangling fetch: POST /api/settings/sessions (app/settings/sessions/page.tsx:196)"}, "fullDescription": {"text": "`app/settings/sessions/page.tsx:196` calls `POST /api/settings/sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ab8886b7c0b25514", "name": "Dangling fetch: GET /api/settings/sessions (app/settings/sessions/page.tsx:216)", "shortDescription": {"text": "Dangling fetch: GET /api/settings/sessions (app/settings/sessions/page.tsx:216)"}, "fullDescription": {"text": "`app/settings/sessions/page.tsx:216` calls `GET /api/settings/sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0a01731fc862e192", "name": "Dangling fetch: GET /api/user/preferences (app/settings/sessions/page.tsx:236)", "shortDescription": {"text": "Dangling fetch: GET /api/user/preferences (app/settings/sessions/page.tsx:236)"}, "fullDescription": {"text": "`app/settings/sessions/page.tsx:236` calls `GET /api/user/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0816cab02fdba9b5", "name": "Dangling fetch: DELETE /api/settings/sessions/${id} (app/settings/sessions/page.tsx:265)", "shortDescription": {"text": "Dangling fetch: DELETE /api/settings/sessions/${id} (app/settings/sessions/page.tsx:265)"}, "fullDescription": {"text": "`app/settings/sessions/page.tsx:265` calls `DELETE /api/settings/sessions/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/sessions/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-76b8cb3f95fda661", "name": "Dangling fetch: POST /api/settings/sessions/revoke-all (app/settings/sessions/page.tsx:282)", "shortDescription": {"text": "Dangling fetch: POST /api/settings/sessions/revoke-all (app/settings/sessions/page.tsx:282)"}, "fullDescription": {"text": "`app/settings/sessions/page.tsx:282` calls `POST /api/settings/sessions/revoke-all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/sessions/revoke-all`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e6625adb362b9751", "name": "Dangling fetch: GET /api/user/preferences (app/settings/sessions/page.tsx:312)", "shortDescription": {"text": "Dangling fetch: GET /api/user/preferences (app/settings/sessions/page.tsx:312)"}, "fullDescription": {"text": "`app/settings/sessions/page.tsx:312` calls `GET /api/user/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fe8192eadd1a858f", "name": "Dangling fetch: PUT /api/user/preferences (app/settings/sessions/page.tsx:319)", "shortDescription": {"text": "Dangling fetch: PUT /api/user/preferences (app/settings/sessions/page.tsx:319)"}, "fullDescription": {"text": "`app/settings/sessions/page.tsx:319` calls `PUT /api/user/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c30e236846c04566", "name": "Dangling fetch: GET /api/calendar/status (app/settings/calendar-setup/page.tsx:91)", "shortDescription": {"text": "Dangling fetch: GET /api/calendar/status (app/settings/calendar-setup/page.tsx:91)"}, "fullDescription": {"text": "`app/settings/calendar-setup/page.tsx:91` calls `GET /api/calendar/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-38dccb902dc6dd20", "name": "Dangling fetch: GET /api/calendar/my-assignments (app/settings/calendar-setup/page.tsx:124)", "shortDescription": {"text": "Dangling fetch: GET /api/calendar/my-assignments (app/settings/calendar-setup/page.tsx:124)"}, "fullDescription": {"text": "`app/settings/calendar-setup/page.tsx:124` calls `GET /api/calendar/my-assignments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/my-assignments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-55241b2023cada0d", "name": "Dangling fetch: POST /api/calendar/sync-my-blocks (app/settings/calendar-setup/page.tsx:155)", "shortDescription": {"text": "Dangling fetch: POST /api/calendar/sync-my-blocks (app/settings/calendar-setup/page.tsx:155)"}, "fullDescription": {"text": "`app/settings/calendar-setup/page.tsx:155` calls `POST /api/calendar/sync-my-blocks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/sync-my-blocks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c93d1e4298426712", "name": "Dangling fetch: GET /api/instructor/me (app/instructor/page.tsx:124)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/instructor/page.tsx:124)"}, "fullDescription": {"text": "`app/instructor/page.tsx:124` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9fff61201d0a1b02", "name": "Dangling fetch: GET /api/lab-management/certifications?instructorId=${userData.user.id} (app/instructor/page.tsx:130)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/certifications?instructorId=${userData.user.id} (app/instructor/page.tsx:130)"}, "fullDescription": {"text": "`app/instructor/page.tsx:130` calls `GET /api/lab-management/certifications?instructorId=${userData.user.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/certifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-11f43d855eaea117", "name": "Dangling fetch: GET /api/instructor/upcoming-labs (app/instructor/page.tsx:165)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/upcoming-labs (app/instructor/page.tsx:165)"}, "fullDescription": {"text": "`app/instructor/page.tsx:165` calls `GET /api/instructor/upcoming-labs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/upcoming-labs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aea75d52fb31b0b5", "name": "Dangling fetch: GET /api/instructor/me (app/instructor/ce/page.tsx:87)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/instructor/ce/page.tsx:87)"}, "fullDescription": {"text": "`app/instructor/ce/page.tsx:87` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9ce581f392c2bbf9", "name": "Dangling fetch: GET /api/lab-management/certifications?instructorId=${userData.user.id}&includeExpired=true (app/instruc", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/certifications?instructorId=${userData.user.id}&includeExpired=true (app/instructor/ce/page.tsx:93)"}, "fullDescription": {"text": "`app/instructor/ce/page.tsx:93` calls `GET /api/lab-management/certifications?instructorId=${userData.user.id}&includeExpired=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/certifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6cbfe60ab05e6894", "name": "Dangling fetch: GET /api/instructor/ce-records (app/instructor/ce/page.tsx:100)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/ce-records (app/instructor/ce/page.tsx:100)"}, "fullDescription": {"text": "`app/instructor/ce/page.tsx:100` calls `GET /api/instructor/ce-records` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/ce-records`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8a8e8cb678b5c0c8", "name": "Dangling fetch: POST /api/instructor/ce-records (app/instructor/ce/page.tsx:127)", "shortDescription": {"text": "Dangling fetch: POST /api/instructor/ce-records (app/instructor/ce/page.tsx:127)"}, "fullDescription": {"text": "`app/instructor/ce/page.tsx:127` calls `POST /api/instructor/ce-records` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/ce-records`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-77313b19c5fc3f91", "name": "Dangling fetch: DELETE /api/instructor/ce-records/${id} (app/instructor/ce/page.tsx:159)", "shortDescription": {"text": "Dangling fetch: DELETE /api/instructor/ce-records/${id} (app/instructor/ce/page.tsx:159)"}, "fullDescription": {"text": "`app/instructor/ce/page.tsx:159` calls `DELETE /api/instructor/ce-records/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/ce-records/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b1c0954d1ee9a1d8", "name": "Dangling fetch: GET /api/instructor/me (app/instructor/my-stats/page.tsx:319)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/instructor/my-stats/page.tsx:319)"}, "fullDescription": {"text": "`app/instructor/my-stats/page.tsx:319` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6328599c06708747", "name": "Dangling fetch: GET /api/instructor/my-stats?period=${p} (app/instructor/my-stats/page.tsx:332)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/my-stats?period=${p} (app/instructor/my-stats/page.tsx:332)"}, "fullDescription": {"text": "`app/instructor/my-stats/page.tsx:332` calls `GET /api/instructor/my-stats?period=${p}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/my-stats`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a56490699e91d950", "name": "Dangling fetch: GET /api/instructor/me (app/instructor/email-history/page.tsx:117)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/instructor/email-history/page.tsx:117)"}, "fullDescription": {"text": "`app/instructor/email-history/page.tsx:117` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-abae948b0057afc0", "name": "Dangling fetch: GET /api/instructor/email-history?limit=${PAGE_SIZE}&offset=${offset} (app/instructor/email-history/page", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/email-history?limit=${PAGE_SIZE}&offset=${offset} (app/instructor/email-history/page.tsx:124)"}, "fullDescription": {"text": "`app/instructor/email-history/page.tsx:124` calls `GET /api/instructor/email-history?limit=${PAGE_SIZE}&offset=${offset}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/email-history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1cc42643a69383c9", "name": "Dangling fetch: POST /api/instructor/email-history (app/instructor/email-history/page.tsx:147)", "shortDescription": {"text": "Dangling fetch: POST /api/instructor/email-history (app/instructor/email-history/page.tsx:147)"}, "fullDescription": {"text": "`app/instructor/email-history/page.tsx:147` calls `POST /api/instructor/email-history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/email-history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2e2ecea9b2792b4a", "name": "Dangling fetch: POST /api/instructor/email-history (app/instructor/email-history/page.tsx:173)", "shortDescription": {"text": "Dangling fetch: POST /api/instructor/email-history (app/instructor/email-history/page.tsx:173)"}, "fullDescription": {"text": "`app/instructor/email-history/page.tsx:173` calls `POST /api/instructor/email-history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/email-history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a60ad363279d97f9", "name": "Dangling fetch: GET /api/instructor/me (app/instructor/certifications/page.tsx:128)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/instructor/certifications/page.tsx:128)"}, "fullDescription": {"text": "`app/instructor/certifications/page.tsx:128` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-298b7356b5d1c264", "name": "Dangling fetch: GET /api/lab-management/certifications?instructorId=${userData.user.id}&includeExpired=true (app/instruc", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/certifications?instructorId=${userData.user.id}&includeExpired=true (app/instructor/certifications/page.tsx:134)"}, "fullDescription": {"text": "`app/instructor/certifications/page.tsx:134` calls `GET /api/lab-management/certifications?instructorId=${userData.user.id}&includeExpired=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/certifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8c0856d52832ca4a", "name": "Dangling fetch: PATCH /api/lab-management/certifications/${editingCert.id} (app/instructor/certifications/page.tsx:208)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/certifications/${editingCert.id} (app/instructor/certifications/page.tsx:208)"}, "fullDescription": {"text": "`app/instructor/certifications/page.tsx:208` calls `PATCH /api/lab-management/certifications/${editingCert.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/certifications/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-918884c4ca778de8", "name": "Dangling fetch: POST /api/lab-management/certifications (app/instructor/certifications/page.tsx:214)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/certifications (app/instructor/certifications/page.tsx:214)"}, "fullDescription": {"text": "`app/instructor/certifications/page.tsx:214` calls `POST /api/lab-management/certifications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/certifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d7ec1520e48e73fb", "name": "Dangling fetch: DELETE /api/lab-management/certifications/${id} (app/instructor/certifications/page.tsx:239)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/certifications/${id} (app/instructor/certifications/page.tsx:239)"}, "fullDescription": {"text": "`app/instructor/certifications/page.tsx:239` calls `DELETE /api/lab-management/certifications/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/certifications/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f8158745b4998275", "name": "Dangling fetch: GET /api/instructor/me (app/instructor/teaching/page.tsx:94)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/instructor/teaching/page.tsx:94)"}, "fullDescription": {"text": "`app/instructor/teaching/page.tsx:94` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-90cf42eb3755eae3", "name": "Dangling fetch: GET /api/instructor/teaching-log?year=${selectedYear} (app/instructor/teaching/page.tsx:100)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/teaching-log?year=${selectedYear} (app/instructor/teaching/page.tsx:100)"}, "fullDescription": {"text": "`app/instructor/teaching/page.tsx:100` calls `GET /api/instructor/teaching-log?year=${selectedYear}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/teaching-log`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ac49248a77ed5481", "name": "Dangling fetch: POST /api/instructor/teaching-log (app/instructor/teaching/page.tsx:129)", "shortDescription": {"text": "Dangling fetch: POST /api/instructor/teaching-log (app/instructor/teaching/page.tsx:129)"}, "fullDescription": {"text": "`app/instructor/teaching/page.tsx:129` calls `POST /api/instructor/teaching-log` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/teaching-log`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b602ca8608a3a7ac", "name": "Dangling fetch: DELETE /api/instructor/teaching-log/${id} (app/instructor/teaching/page.tsx:169)", "shortDescription": {"text": "Dangling fetch: DELETE /api/instructor/teaching-log/${id} (app/instructor/teaching/page.tsx:169)"}, "fullDescription": {"text": "`app/instructor/teaching/page.tsx:169` calls `DELETE /api/instructor/teaching-log/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/teaching-log/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8c46b9281762f7b3", "name": "Dangling fetch: GET /api/instructor/me (app/instructor/time-clock/page.tsx:132)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/instructor/time-clock/page.tsx:132)"}, "fullDescription": {"text": "`app/instructor/time-clock/page.tsx:132` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f4e853d5d49d455e", "name": "Dangling fetch: GET /api/instructor/time-clock (app/instructor/time-clock/page.tsx:150)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/time-clock (app/instructor/time-clock/page.tsx:150)"}, "fullDescription": {"text": "`app/instructor/time-clock/page.tsx:150` calls `GET /api/instructor/time-clock` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/time-clock`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0adb09f484d9b9a6", "name": "Dangling fetch: POST /api/instructor/time-clock (app/instructor/time-clock/page.tsx:193)", "shortDescription": {"text": "Dangling fetch: POST /api/instructor/time-clock (app/instructor/time-clock/page.tsx:193)"}, "fullDescription": {"text": "`app/instructor/time-clock/page.tsx:193` calls `POST /api/instructor/time-clock` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/time-clock`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-882955dbf6dd280e", "name": "Dangling fetch: PUT /api/instructor/time-clock (app/instructor/time-clock/page.tsx:216)", "shortDescription": {"text": "Dangling fetch: PUT /api/instructor/time-clock (app/instructor/time-clock/page.tsx:216)"}, "fullDescription": {"text": "`app/instructor/time-clock/page.tsx:216` calls `PUT /api/instructor/time-clock` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/time-clock`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6512e0ec443f3e4b", "name": "Dangling fetch: GET /api/instructor/history?${params.toString()} (app/instructor/history/page.tsx:190)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/history?${params.toString()} (app/instructor/history/page.tsx:190)"}, "fullDescription": {"text": "`app/instructor/history/page.tsx:190` calls `GET /api/instructor/history?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4797efa9479c218", "name": "Dangling fetch: GET /api/instructor/me (app/student/layout.tsx:70)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/student/layout.tsx:70)"}, "fullDescription": {"text": "`app/student/layout.tsx:70` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-94c1b26a985df813", "name": "Dangling fetch: GET /api/instructor/me (app/student/page.tsx:143)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/student/page.tsx:143)"}, "fullDescription": {"text": "`app/student/page.tsx:143` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9fd5bbab99a736f1", "name": "Dangling fetch: GET /api/student/completions (app/student/page.tsx:150)", "shortDescription": {"text": "Dangling fetch: GET /api/student/completions (app/student/page.tsx:150)"}, "fullDescription": {"text": "`app/student/page.tsx:150` calls `GET /api/student/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f895b78f679dfe0d", "name": "Dangling fetch: GET /api/student/ekg-scenarios (app/student/page.tsx:172)", "shortDescription": {"text": "Dangling fetch: GET /api/student/ekg-scenarios (app/student/page.tsx:172)"}, "fullDescription": {"text": "`app/student/page.tsx:172` calls `GET /api/student/ekg-scenarios` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/ekg-scenarios`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c591c75d161fe969", "name": "Dangling fetch: GET /api/student/labs (app/student/labs/page.tsx:164)", "shortDescription": {"text": "Dangling fetch: GET /api/student/labs (app/student/labs/page.tsx:164)"}, "fullDescription": {"text": "`app/student/labs/page.tsx:164` calls `GET /api/student/labs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/labs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9241115738d61b90", "name": "Dangling fetch: GET /api/student/profile (app/student/profile/page.tsx:270)", "shortDescription": {"text": "Dangling fetch: GET /api/student/profile (app/student/profile/page.tsx:270)"}, "fullDescription": {"text": "`app/student/profile/page.tsx:270` calls `GET /api/student/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/profile`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-33c8234f2a729d20", "name": "Dangling fetch: GET /api/student/my-progress (app/student/my-progress/page.tsx:269)", "shortDescription": {"text": "Dangling fetch: GET /api/student/my-progress (app/student/my-progress/page.tsx:269)"}, "fullDescription": {"text": "`app/student/my-progress/page.tsx:269` calls `GET /api/student/my-progress` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/my-progress`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5f57caf50659b138", "name": "Dangling fetch: GET /api/student/skill-sheets (app/student/skill-sheets/page.tsx:135)", "shortDescription": {"text": "Dangling fetch: GET /api/student/skill-sheets (app/student/skill-sheets/page.tsx:135)"}, "fullDescription": {"text": "`app/student/skill-sheets/page.tsx:135` calls `GET /api/student/skill-sheets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/skill-sheets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-469f294937f45315", "name": "Dangling fetch: GET /api/student/completions (app/student/completions/page.tsx:97)", "shortDescription": {"text": "Dangling fetch: GET /api/student/completions (app/student/completions/page.tsx:97)"}, "fullDescription": {"text": "`app/student/completions/page.tsx:97` calls `GET /api/student/completions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/completions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-126eaeeb34fb7f4b", "name": "Dangling fetch: GET /api/student/attendance-appeals (app/student/attendance-appeals/page.tsx:91)", "shortDescription": {"text": "Dangling fetch: GET /api/student/attendance-appeals (app/student/attendance-appeals/page.tsx:91)"}, "fullDescription": {"text": "`app/student/attendance-appeals/page.tsx:91` calls `GET /api/student/attendance-appeals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/attendance-appeals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0abf0b1842bd36c3", "name": "Dangling fetch: POST /api/student/attendance-appeals (app/student/attendance-appeals/page.tsx:130)", "shortDescription": {"text": "Dangling fetch: POST /api/student/attendance-appeals (app/student/attendance-appeals/page.tsx:130)"}, "fullDescription": {"text": "`app/student/attendance-appeals/page.tsx:130` calls `POST /api/student/attendance-appeals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/attendance-appeals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f9ecba69020757a0", "name": "Dangling fetch: GET /api/peer-evaluations (app/student/peer-eval/page.tsx:205)", "shortDescription": {"text": "Dangling fetch: GET /api/peer-evaluations (app/student/peer-eval/page.tsx:205)"}, "fullDescription": {"text": "`app/student/peer-eval/page.tsx:205` calls `GET /api/peer-evaluations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/peer-evaluations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-688b109baa381248", "name": "Dangling fetch: POST /api/peer-evaluations (app/student/peer-eval/page.tsx:283)", "shortDescription": {"text": "Dangling fetch: POST /api/peer-evaluations (app/student/peer-eval/page.tsx:283)"}, "fullDescription": {"text": "`app/student/peer-eval/page.tsx:283` calls `POST /api/peer-evaluations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/peer-evaluations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dd7aea27ee759b3e", "name": "Dangling fetch: GET /api/student/skill-evaluations?evaluation_id=${evaluationId} (app/student/skill-evaluations/[id]/pag", "shortDescription": {"text": "Dangling fetch: GET /api/student/skill-evaluations?evaluation_id=${evaluationId} (app/student/skill-evaluations/[id]/page.tsx:78)"}, "fullDescription": {"text": "`app/student/skill-evaluations/[id]/page.tsx:78` calls `GET /api/student/skill-evaluations?evaluation_id=${evaluationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/skill-evaluations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b92ee8a80c8d0cd", "name": "Dangling fetch: GET /api/skill-sheets/${eval_.skill_sheet.id} (app/student/skill-evaluations/[id]/page.tsx:86)", "shortDescription": {"text": "Dangling fetch: GET /api/skill-sheets/${eval_.skill_sheet.id} (app/student/skill-evaluations/[id]/page.tsx:86)"}, "fullDescription": {"text": "`app/student/skill-evaluations/[id]/page.tsx:86` calls `GET /api/skill-sheets/${eval_.skill_sheet.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3774d05d5723639b", "name": "Dangling fetch: GET /api/student/available-labs?${params.toString()} (app/student/available-labs/page.tsx:168)", "shortDescription": {"text": "Dangling fetch: GET /api/student/available-labs?${params.toString()} (app/student/available-labs/page.tsx:168)"}, "fullDescription": {"text": "`app/student/available-labs/page.tsx:168` calls `GET /api/student/available-labs?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/available-labs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-deb2219a76bd3482", "name": "Dangling fetch: GET /api/student/available-labs/my-signups (app/student/available-labs/page.tsx:180)", "shortDescription": {"text": "Dangling fetch: GET /api/student/available-labs/my-signups (app/student/available-labs/page.tsx:180)"}, "fullDescription": {"text": "`app/student/available-labs/page.tsx:180` calls `GET /api/student/available-labs/my-signups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/available-labs/my-signups`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e6730b794c11210", "name": "Dangling fetch: POST /api/student/available-labs/signup (app/student/available-labs/page.tsx:214)", "shortDescription": {"text": "Dangling fetch: POST /api/student/available-labs/signup (app/student/available-labs/page.tsx:214)"}, "fullDescription": {"text": "`app/student/available-labs/page.tsx:214` calls `POST /api/student/available-labs/signup` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/available-labs/signup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2db7718795e78bf8", "name": "Dangling fetch: POST /api/student/available-labs/cancel (app/student/available-labs/page.tsx:251)", "shortDescription": {"text": "Dangling fetch: POST /api/student/available-labs/cancel (app/student/available-labs/page.tsx:251)"}, "fullDescription": {"text": "`app/student/available-labs/page.tsx:251` calls `POST /api/student/available-labs/cancel` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/available-labs/cancel`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2bf49234dde4d8e1", "name": "Dangling fetch: GET /api/student/documents (app/student/documents/page.tsx:180)", "shortDescription": {"text": "Dangling fetch: GET /api/student/documents (app/student/documents/page.tsx:180)"}, "fullDescription": {"text": "`app/student/documents/page.tsx:180` calls `GET /api/student/documents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/documents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1fb0420c75c56b7f", "name": "Dangling fetch: GET /api/student/documents/requests (app/student/documents/page.tsx:181)", "shortDescription": {"text": "Dangling fetch: GET /api/student/documents/requests (app/student/documents/page.tsx:181)"}, "fullDescription": {"text": "`app/student/documents/page.tsx:181` calls `GET /api/student/documents/requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/documents/requests`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-06ff287f5f29ad76", "name": "Dangling fetch: POST /api/student/documents (app/student/documents/page.tsx:216)", "shortDescription": {"text": "Dangling fetch: POST /api/student/documents (app/student/documents/page.tsx:216)"}, "fullDescription": {"text": "`app/student/documents/page.tsx:216` calls `POST /api/student/documents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/documents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-636ea9a39e342755", "name": "Dangling fetch: DELETE /api/student/documents/${docId} (app/student/documents/page.tsx:244)", "shortDescription": {"text": "Dangling fetch: DELETE /api/student/documents/${docId} (app/student/documents/page.tsx:244)"}, "fullDescription": {"text": "`app/student/documents/page.tsx:244` calls `DELETE /api/student/documents/${docId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/documents/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-23fd847acd79d6e2", "name": "Dangling fetch: POST /api/student/documents/requests (app/student/documents/page.tsx:262)", "shortDescription": {"text": "Dangling fetch: POST /api/student/documents/requests (app/student/documents/page.tsx:262)"}, "fullDescription": {"text": "`app/student/documents/page.tsx:262` calls `POST /api/student/documents/requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/documents/requests`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7d7dd88802f5893f", "name": "Dangling fetch: GET /api/instructor/me (app/onboarding/page.tsx:197)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/onboarding/page.tsx:197)"}, "fullDescription": {"text": "`app/onboarding/page.tsx:197` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8f52748a9c784d9d", "name": "Dangling fetch: GET /api/onboarding/assignments (app/onboarding/page.tsx:216)", "shortDescription": {"text": "Dangling fetch: GET /api/onboarding/assignments (app/onboarding/page.tsx:216)"}, "fullDescription": {"text": "`app/onboarding/page.tsx:216` calls `GET /api/onboarding/assignments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/onboarding/assignments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e4b3eeceab1455a", "name": "Dangling fetch: GET /api/onboarding/templates (app/onboarding/page.tsx:217)", "shortDescription": {"text": "Dangling fetch: GET /api/onboarding/templates (app/onboarding/page.tsx:217)"}, "fullDescription": {"text": "`app/onboarding/page.tsx:217` calls `GET /api/onboarding/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/onboarding/templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bb82150908d06110", "name": "Dangling fetch: GET /api/lab-management/instructors (app/onboarding/page.tsx:218)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/instructors (app/onboarding/page.tsx:218)"}, "fullDescription": {"text": "`app/onboarding/page.tsx:218` calls `GET /api/lab-management/instructors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/instructors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cbb3ace1a01bbe35", "name": "Dangling fetch: GET /api/onboarding/dashboard (app/onboarding/page.tsx:243)", "shortDescription": {"text": "Dangling fetch: GET /api/onboarding/dashboard (app/onboarding/page.tsx:243)"}, "fullDescription": {"text": "`app/onboarding/page.tsx:243` calls `GET /api/onboarding/dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/onboarding/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-de921ed59a2612df", "name": "Dangling fetch: PATCH /api/onboarding/tasks/${task.progressId}/progress (app/onboarding/page.tsx:290)", "shortDescription": {"text": "Dangling fetch: PATCH /api/onboarding/tasks/${task.progressId}/progress (app/onboarding/page.tsx:290)"}, "fullDescription": {"text": "`app/onboarding/page.tsx:290` calls `PATCH /api/onboarding/tasks/${task.progressId}/progress` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/onboarding/tasks/<p>/progress`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cfda8db94b36057c", "name": "Dangling fetch: POST /api/onboarding/assignments (app/onboarding/page.tsx:360)", "shortDescription": {"text": "Dangling fetch: POST /api/onboarding/assignments (app/onboarding/page.tsx:360)"}, "fullDescription": {"text": "`app/onboarding/page.tsx:360` calls `POST /api/onboarding/assignments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/onboarding/assignments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-716c13e1b382e952", "name": "Dangling fetch: DELETE /api/onboarding/assignments?id=${assignmentId} (app/onboarding/page.tsx:390)", "shortDescription": {"text": "Dangling fetch: DELETE /api/onboarding/assignments?id=${assignmentId} (app/onboarding/page.tsx:390)"}, "fullDescription": {"text": "`app/onboarding/page.tsx:390` calls `DELETE /api/onboarding/assignments?id=${assignmentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/onboarding/assignments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e7aab57885729f52", "name": "Dangling fetch: GET /api/open-lab/sessions (app/open-lab/page.tsx:86)", "shortDescription": {"text": "Dangling fetch: GET /api/open-lab/sessions (app/open-lab/page.tsx:86)"}, "fullDescription": {"text": "`app/open-lab/page.tsx:86` calls `GET /api/open-lab/sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/open-lab/sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4a82a970c5b00abc", "name": "Dangling fetch: GET /api/open-lab/instructors (app/open-lab/page.tsx:87)", "shortDescription": {"text": "Dangling fetch: GET /api/open-lab/instructors (app/open-lab/page.tsx:87)"}, "fullDescription": {"text": "`app/open-lab/page.tsx:87` calls `GET /api/open-lab/instructors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/open-lab/instructors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e81178aa311f7ab", "name": "Dangling fetch: POST /api/open-lab/signup (app/open-lab/page.tsx:116)", "shortDescription": {"text": "Dangling fetch: POST /api/open-lab/signup (app/open-lab/page.tsx:116)"}, "fullDescription": {"text": "`app/open-lab/page.tsx:116` calls `POST /api/open-lab/signup` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/open-lab/signup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-380563d2611b2b9d", "name": "Dangling fetch: GET /api/open-lab/signup/${token} (app/open-lab/edit/[token]/page.tsx:89)", "shortDescription": {"text": "Dangling fetch: GET /api/open-lab/signup/${token} (app/open-lab/edit/[token]/page.tsx:89)"}, "fullDescription": {"text": "`app/open-lab/edit/[token]/page.tsx:89` calls `GET /api/open-lab/signup/${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/open-lab/signup/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-47c6f4e458db4898", "name": "Dangling fetch: GET /api/open-lab/sessions (app/open-lab/edit/[token]/page.tsx:90)", "shortDescription": {"text": "Dangling fetch: GET /api/open-lab/sessions (app/open-lab/edit/[token]/page.tsx:90)"}, "fullDescription": {"text": "`app/open-lab/edit/[token]/page.tsx:90` calls `GET /api/open-lab/sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/open-lab/sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4bed989afd8c5808", "name": "Dangling fetch: GET /api/open-lab/instructors (app/open-lab/edit/[token]/page.tsx:91)", "shortDescription": {"text": "Dangling fetch: GET /api/open-lab/instructors (app/open-lab/edit/[token]/page.tsx:91)"}, "fullDescription": {"text": "`app/open-lab/edit/[token]/page.tsx:91` calls `GET /api/open-lab/instructors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/open-lab/instructors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f6d904cd79c8149f", "name": "Dangling fetch: PATCH /api/open-lab/signup/${token} (app/open-lab/edit/[token]/page.tsx:139)", "shortDescription": {"text": "Dangling fetch: PATCH /api/open-lab/signup/${token} (app/open-lab/edit/[token]/page.tsx:139)"}, "fullDescription": {"text": "`app/open-lab/edit/[token]/page.tsx:139` calls `PATCH /api/open-lab/signup/${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/open-lab/signup/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-94a7f06e75a40173", "name": "Dangling fetch: DELETE /api/open-lab/signup/${token} (app/open-lab/edit/[token]/page.tsx:169)", "shortDescription": {"text": "Dangling fetch: DELETE /api/open-lab/signup/${token} (app/open-lab/edit/[token]/page.tsx:169)"}, "fullDescription": {"text": "`app/open-lab/edit/[token]/page.tsx:169` calls `DELETE /api/open-lab/signup/${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/open-lab/signup/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c58fd32f100b8f87", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/calendar/page.tsx:253)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/calendar/page.tsx:253)"}, "fullDescription": {"text": "`app/calendar/page.tsx:253` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d9a595fcadf9d0d4", "name": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=false (app/calendar/page.tsx:254)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=false (app/calendar/page.tsx:254)"}, "fullDescription": {"text": "`app/calendar/page.tsx:254` calls `GET /api/scheduling/planner/semesters?active_only=false` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/semesters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-855f1e46299150a1", "name": "Dangling fetch: GET /api/calendar/unified?${params} (app/calendar/page.tsx:670)", "shortDescription": {"text": "Dangling fetch: GET /api/calendar/unified?${params} (app/calendar/page.tsx:670)"}, "fullDescription": {"text": "`app/calendar/page.tsx:670` calls `GET /api/calendar/unified?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/unified`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d5242c56e51b736b", "name": "Dangling fetch: GET /api/scheduling/lvfr-platoons?start_date=${dateRange.start}&end_date=${dateRange.end} (app/calendar/", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/lvfr-platoons?start_date=${dateRange.start}&end_date=${dateRange.end} (app/calendar/page.tsx:702)"}, "fullDescription": {"text": "`app/calendar/page.tsx:702` calls `GET /api/scheduling/lvfr-platoons?start_date=${dateRange.start}&end_date=${dateRange.end}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/lvfr-platoons`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-625189acec8784fb", "name": "Dangling fetch: GET /api/calendar/instructor-filter-options (app/calendar/page.tsx:735)", "shortDescription": {"text": "Dangling fetch: GET /api/calendar/instructor-filter-options (app/calendar/page.tsx:735)"}, "fullDescription": {"text": "`app/calendar/page.tsx:735` calls `GET /api/calendar/instructor-filter-options` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/instructor-filter-options`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c6dadfab58682e6d", "name": "Dangling fetch: GET /api/lab-management/instructors (app/calendar/page.tsx:754)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/instructors (app/calendar/page.tsx:754)"}, "fullDescription": {"text": "`app/calendar/page.tsx:754` calls `GET /api/lab-management/instructors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/instructors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2a484632acba2b8a", "name": "Dangling fetch: GET /api/instructor/me (app/tasks/page.tsx:158)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/tasks/page.tsx:158)"}, "fullDescription": {"text": "`app/tasks/page.tsx:158` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fab88f0a942696c0", "name": "Dangling fetch: GET /api/users/list?activeOnly=true (app/tasks/page.tsx:170)", "shortDescription": {"text": "Dangling fetch: GET /api/users/list?activeOnly=true (app/tasks/page.tsx:170)"}, "fullDescription": {"text": "`app/tasks/page.tsx:170` calls `GET /api/users/list?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/list`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ba0e9f6555281ce3", "name": "Dangling fetch: GET /api/tasks?${params} (app/tasks/page.tsx:191)", "shortDescription": {"text": "Dangling fetch: GET /api/tasks?${params} (app/tasks/page.tsx:191)"}, "fullDescription": {"text": "`app/tasks/page.tsx:191` calls `GET /api/tasks?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tasks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-911eb821c41babce", "name": "Dangling fetch: POST /api/tasks (app/tasks/page.tsx:224)", "shortDescription": {"text": "Dangling fetch: POST /api/tasks (app/tasks/page.tsx:224)"}, "fullDescription": {"text": "`app/tasks/page.tsx:224` calls `POST /api/tasks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tasks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6ab406676bd5f75c", "name": "Dangling fetch: PATCH /api/tasks/${taskId} (app/tasks/page.tsx:272)", "shortDescription": {"text": "Dangling fetch: PATCH /api/tasks/${taskId} (app/tasks/page.tsx:272)"}, "fullDescription": {"text": "`app/tasks/page.tsx:272` calls `PATCH /api/tasks/${taskId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tasks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-14f7e71d3c860b6d", "name": "Dangling fetch: PATCH /api/tasks/${taskId} (app/tasks/page.tsx:292)", "shortDescription": {"text": "Dangling fetch: PATCH /api/tasks/${taskId} (app/tasks/page.tsx:292)"}, "fullDescription": {"text": "`app/tasks/page.tsx:292` calls `PATCH /api/tasks/${taskId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tasks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-064d05458637548b", "name": "Dangling fetch: PATCH /api/tasks/bulk (app/tasks/page.tsx:347)", "shortDescription": {"text": "Dangling fetch: PATCH /api/tasks/bulk (app/tasks/page.tsx:347)"}, "fullDescription": {"text": "`app/tasks/page.tsx:347` calls `PATCH /api/tasks/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tasks/bulk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-42a3bcc26262c1dd", "name": "Dangling fetch: DELETE /api/tasks/bulk (app/tasks/page.tsx:370)", "shortDescription": {"text": "Dangling fetch: DELETE /api/tasks/bulk (app/tasks/page.tsx:370)"}, "fullDescription": {"text": "`app/tasks/page.tsx:370` calls `DELETE /api/tasks/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tasks/bulk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-07df93482db5cfbf", "name": "Dangling fetch: GET /api/instructor/me (app/tasks/[id]/page.tsx:95)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/tasks/[id]/page.tsx:95)"}, "fullDescription": {"text": "`app/tasks/[id]/page.tsx:95` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d5c741df4b8a6cf5", "name": "Dangling fetch: GET /api/tasks/${taskId} (app/tasks/[id]/page.tsx:108)", "shortDescription": {"text": "Dangling fetch: GET /api/tasks/${taskId} (app/tasks/[id]/page.tsx:108)"}, "fullDescription": {"text": "`app/tasks/[id]/page.tsx:108` calls `GET /api/tasks/${taskId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tasks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6052c026258dac3e", "name": "Dangling fetch: POST /api/tasks/${taskId}/comments (app/tasks/[id]/page.tsx:137)", "shortDescription": {"text": "Dangling fetch: POST /api/tasks/${taskId}/comments (app/tasks/[id]/page.tsx:137)"}, "fullDescription": {"text": "`app/tasks/[id]/page.tsx:137` calls `POST /api/tasks/${taskId}/comments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tasks/<p>/comments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0d3d52843a75bb00", "name": "Dangling fetch: PATCH /api/tasks/${taskId} (app/tasks/[id]/page.tsx:156)", "shortDescription": {"text": "Dangling fetch: PATCH /api/tasks/${taskId} (app/tasks/[id]/page.tsx:156)"}, "fullDescription": {"text": "`app/tasks/[id]/page.tsx:156` calls `PATCH /api/tasks/${taskId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tasks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-58fcb72a7bd96fd1", "name": "Dangling fetch: PATCH /api/tasks/${taskId} (app/tasks/[id]/page.tsx:177)", "shortDescription": {"text": "Dangling fetch: PATCH /api/tasks/${taskId} (app/tasks/[id]/page.tsx:177)"}, "fullDescription": {"text": "`app/tasks/[id]/page.tsx:177` calls `PATCH /api/tasks/${taskId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tasks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9dbf8e7df8c187ee", "name": "Dangling fetch: PATCH /api/tasks/${taskId} (app/tasks/[id]/page.tsx:197)", "shortDescription": {"text": "Dangling fetch: PATCH /api/tasks/${taskId} (app/tasks/[id]/page.tsx:197)"}, "fullDescription": {"text": "`app/tasks/[id]/page.tsx:197` calls `PATCH /api/tasks/${taskId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tasks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a377936c1dbefbad", "name": "Dangling fetch: DELETE /api/tasks/${taskId} (app/tasks/[id]/page.tsx:225)", "shortDescription": {"text": "Dangling fetch: DELETE /api/tasks/${taskId} (app/tasks/[id]/page.tsx:225)"}, "fullDescription": {"text": "`app/tasks/[id]/page.tsx:225` calls `DELETE /api/tasks/${taskId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tasks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-178410cf24459142", "name": "Dangling fetch: GET /api/instructor/me (app/scheduling/page.tsx:178)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduling/page.tsx:178)"}, "fullDescription": {"text": "`app/scheduling/page.tsx:178` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ffdb1d7a10112fcd", "name": "Dangling fetch: GET /api/scheduling/substitute-requests?status=pending (app/scheduling/page.tsx:202)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/substitute-requests?status=pending (app/scheduling/page.tsx:202)"}, "fullDescription": {"text": "`app/scheduling/page.tsx:202` calls `GET /api/scheduling/substitute-requests?status=pending` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/substitute-requests`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5bb96fa987f40dc9", "name": "Dangling fetch: GET /api/scheduling/part-timer-status (app/scheduling/page.tsx:224)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/part-timer-status (app/scheduling/page.tsx:224)"}, "fullDescription": {"text": "`app/scheduling/page.tsx:224` calls `GET /api/scheduling/part-timer-status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/part-timer-status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7f1942f605545733", "name": "Dangling fetch: POST /api/scheduling/hours-target (app/scheduling/page.tsx:252)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/hours-target (app/scheduling/page.tsx:252)"}, "fullDescription": {"text": "`app/scheduling/page.tsx:252` calls `POST /api/scheduling/hours-target` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/hours-target`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8715a900ed41a970", "name": "Dangling fetch: POST /api/scheduling/unavailable-days (app/scheduling/page.tsx:269)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/unavailable-days (app/scheduling/page.tsx:269)"}, "fullDescription": {"text": "`app/scheduling/page.tsx:269` calls `POST /api/scheduling/unavailable-days` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/unavailable-days`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ced7db48fad9d8be", "name": "Dangling fetch: POST /api/scheduling/notify-lab-availability (app/scheduling/page.tsx:315)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/notify-lab-availability (app/scheduling/page.tsx:315)"}, "fullDescription": {"text": "`app/scheduling/page.tsx:315` calls `POST /api/scheduling/notify-lab-availability` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/notify-lab-availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a90608412e07a0d9", "name": "Dangling fetch: PATCH /api/scheduling/coverage-requests/${id} (app/scheduling/page.tsx:332)", "shortDescription": {"text": "Dangling fetch: PATCH /api/scheduling/coverage-requests/${id} (app/scheduling/page.tsx:332)"}, "fullDescription": {"text": "`app/scheduling/page.tsx:332` calls `PATCH /api/scheduling/coverage-requests/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/coverage-requests/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-485c379e9b182b3a", "name": "Dangling fetch: GET /api/scheduling/shifts?start_date=${monthStart}&end_date=${monthEnd}&include_filled=true (app/schedu", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/shifts?start_date=${monthStart}&end_date=${monthEnd}&include_filled=true (app/scheduling/shifts/page.tsx:179)"}, "fullDescription": {"text": "`app/scheduling/shifts/page.tsx:179` calls `GET /api/scheduling/shifts?start_date=${monthStart}&end_date=${monthEnd}&include_filled=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/shifts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9ee817855951da26", "name": "Dangling fetch: GET /api/scheduling/shifts/${shiftId} (app/scheduling/shifts/page.tsx:279)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/shifts/${shiftId} (app/scheduling/shifts/page.tsx:279)"}, "fullDescription": {"text": "`app/scheduling/shifts/page.tsx:279` calls `GET /api/scheduling/shifts/${shiftId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/shifts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6ba2d370f6e6a412", "name": "Dangling fetch: GET /api/instructor/me (app/scheduling/shifts/page.tsx:309)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduling/shifts/page.tsx:309)"}, "fullDescription": {"text": "`app/scheduling/shifts/page.tsx:309` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6a90fc54f2a0135f", "name": "Dangling fetch: GET /api/scheduling/shifts?${params} (app/scheduling/shifts/page.tsx:334)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/shifts?${params} (app/scheduling/shifts/page.tsx:334)"}, "fullDescription": {"text": "`app/scheduling/shifts/page.tsx:334` calls `GET /api/scheduling/shifts?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/shifts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ea169eaef9cc15b1", "name": "Dangling fetch: GET /api/scheduling/trades?mine=true (app/scheduling/shifts/page.tsx:356)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/trades?mine=true (app/scheduling/shifts/page.tsx:356)"}, "fullDescription": {"text": "`app/scheduling/shifts/page.tsx:356` calls `GET /api/scheduling/trades?mine=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/trades`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2a7753c7bc4e2269", "name": "Dangling fetch: POST /api/scheduling/trades (app/scheduling/shifts/page.tsx:377)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/trades (app/scheduling/shifts/page.tsx:377)"}, "fullDescription": {"text": "`app/scheduling/shifts/page.tsx:377` calls `POST /api/scheduling/trades` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/trades`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6b538b119244ad0f", "name": "Dangling fetch: PUT /api/scheduling/trades (app/scheduling/shifts/page.tsx:410)", "shortDescription": {"text": "Dangling fetch: PUT /api/scheduling/trades (app/scheduling/shifts/page.tsx:410)"}, "fullDescription": {"text": "`app/scheduling/shifts/page.tsx:410` calls `PUT /api/scheduling/trades` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/trades`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9dade5ac4c3bf027", "name": "Dangling fetch: POST /api/scheduling/shifts/${selectedShift.id}/signup (app/scheduling/shifts/page.tsx:447)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/shifts/${selectedShift.id}/signup (app/scheduling/shifts/page.tsx:447)"}, "fullDescription": {"text": "`app/scheduling/shifts/page.tsx:447` calls `POST /api/scheduling/shifts/${selectedShift.id}/signup` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/shifts/<p>/signup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9fc2719ef7298ec9", "name": "Dangling fetch: DELETE /api/scheduling/shifts/${shiftId}/signup (app/scheduling/shifts/page.tsx:474)", "shortDescription": {"text": "Dangling fetch: DELETE /api/scheduling/shifts/${shiftId}/signup (app/scheduling/shifts/page.tsx:474)"}, "fullDescription": {"text": "`app/scheduling/shifts/page.tsx:474` calls `DELETE /api/scheduling/shifts/${shiftId}/signup` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/shifts/<p>/signup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-547e29777b94306d", "name": "Dangling fetch: PUT /api/scheduling/shifts/${editingShift.id} (app/scheduling/shifts/page.tsx:515)", "shortDescription": {"text": "Dangling fetch: PUT /api/scheduling/shifts/${editingShift.id} (app/scheduling/shifts/page.tsx:515)"}, "fullDescription": {"text": "`app/scheduling/shifts/page.tsx:515` calls `PUT /api/scheduling/shifts/${editingShift.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/shifts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3c1f3ef28e9f33d0", "name": "Dangling fetch: DELETE /api/scheduling/shifts/${shiftId} (app/scheduling/shifts/page.tsx:552)", "shortDescription": {"text": "Dangling fetch: DELETE /api/scheduling/shifts/${shiftId} (app/scheduling/shifts/page.tsx:552)"}, "fullDescription": {"text": "`app/scheduling/shifts/page.tsx:552` calls `DELETE /api/scheduling/shifts/${shiftId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/shifts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b42a5961b70dc7d2", "name": "Dangling fetch: GET /api/instructor/me (app/scheduling/shifts/new/page.tsx:166)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduling/shifts/new/page.tsx:166)"}, "fullDescription": {"text": "`app/scheduling/shifts/new/page.tsx:166` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1f182daa2bbcbecf", "name": "Dangling fetch: GET /api/lab-management/lab-days?startDate=${today}&endDate=${endDate}&limit=100 (app/scheduling/shifts/", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days?startDate=${today}&endDate=${endDate}&limit=100 (app/scheduling/shifts/new/page.tsx:195)"}, "fullDescription": {"text": "`app/scheduling/shifts/new/page.tsx:195` calls `GET /api/lab-management/lab-days?startDate=${today}&endDate=${endDate}&limit=100` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f40efe84b0bcd7ab", "name": "Dangling fetch: GET /api/scheduling/shifts?start_date=${today}&end_date=${endDate} (app/scheduling/shifts/new/page.tsx:1", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/shifts?start_date=${today}&end_date=${endDate} (app/scheduling/shifts/new/page.tsx:196)"}, "fullDescription": {"text": "`app/scheduling/shifts/new/page.tsx:196` calls `GET /api/scheduling/shifts?start_date=${today}&end_date=${endDate}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/shifts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f980c15ce30792c6", "name": "Dangling fetch: POST /api/scheduling/shifts (app/scheduling/shifts/new/page.tsx:451)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/shifts (app/scheduling/shifts/new/page.tsx:451)"}, "fullDescription": {"text": "`app/scheduling/shifts/new/page.tsx:451` calls `POST /api/scheduling/shifts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/shifts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f184c6764d3eb88d", "name": "Dangling fetch: POST /api/scheduling/shifts (app/scheduling/shifts/new/page.tsx:477)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/shifts (app/scheduling/shifts/new/page.tsx:477)"}, "fullDescription": {"text": "`app/scheduling/shifts/new/page.tsx:477` calls `POST /api/scheduling/shifts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/shifts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3884389d8556ba63", "name": "Dangling fetch: GET /api/instructor/me (app/scheduling/polls/page.tsx:38)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduling/polls/page.tsx:38)"}, "fullDescription": {"text": "`app/scheduling/polls/page.tsx:38` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-787011477b3363d9", "name": "Dangling fetch: DELETE /api/polls?id=${pollId} (app/scheduling/polls/page.tsx:79)", "shortDescription": {"text": "Dangling fetch: DELETE /api/polls?id=${pollId} (app/scheduling/polls/page.tsx:79)"}, "fullDescription": {"text": "`app/scheduling/polls/page.tsx:79` calls `DELETE /api/polls?id=${pollId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/polls`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3b93122086ed17d8", "name": "Dangling fetch: POST /api/polls (app/scheduling/polls/create/page.tsx:29)", "shortDescription": {"text": "Dangling fetch: POST /api/polls (app/scheduling/polls/create/page.tsx:29)"}, "fullDescription": {"text": "`app/scheduling/polls/create/page.tsx:29` calls `POST /api/polls` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/polls`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-22f77afb5ad1f0a9", "name": "Dangling fetch: PATCH /api/scheduling/resource-bookings/resources (app/scheduling/resource-bookings/page.tsx:194)", "shortDescription": {"text": "Dangling fetch: PATCH /api/scheduling/resource-bookings/resources (app/scheduling/resource-bookings/page.tsx:194)"}, "fullDescription": {"text": "`app/scheduling/resource-bookings/page.tsx:194` calls `PATCH /api/scheduling/resource-bookings/resources` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/resource-bookings/resources`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b36304f54999a667", "name": "Dangling fetch: POST /api/scheduling/resource-bookings/resources (app/scheduling/resource-bookings/page.tsx:200)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/resource-bookings/resources (app/scheduling/resource-bookings/page.tsx:200)"}, "fullDescription": {"text": "`app/scheduling/resource-bookings/page.tsx:200` calls `POST /api/scheduling/resource-bookings/resources` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/resource-bookings/resources`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-499f6f351b72b46c", "name": "Dangling fetch: POST /api/scheduling/resource-bookings (app/scheduling/resource-bookings/page.tsx:377)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/resource-bookings (app/scheduling/resource-bookings/page.tsx:377)"}, "fullDescription": {"text": "`app/scheduling/resource-bookings/page.tsx:377` calls `POST /api/scheduling/resource-bookings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/resource-bookings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-433a8056aa14ad58", "name": "Dangling fetch: GET /api/instructor/me (app/scheduling/resource-bookings/page.tsx:689)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduling/resource-bookings/page.tsx:689)"}, "fullDescription": {"text": "`app/scheduling/resource-bookings/page.tsx:689` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-17814b8121aa1c24", "name": "Dangling fetch: GET /api/scheduling/resource-bookings/resources?${params} (app/scheduling/resource-bookings/page.tsx:707", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/resource-bookings/resources?${params} (app/scheduling/resource-bookings/page.tsx:707)"}, "fullDescription": {"text": "`app/scheduling/resource-bookings/page.tsx:707` calls `GET /api/scheduling/resource-bookings/resources?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/resource-bookings/resources`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f26f2d5f97081adf", "name": "Dangling fetch: GET /api/scheduling/resource-bookings?${params} (app/scheduling/resource-bookings/page.tsx:728)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/resource-bookings?${params} (app/scheduling/resource-bookings/page.tsx:728)"}, "fullDescription": {"text": "`app/scheduling/resource-bookings/page.tsx:728` calls `GET /api/scheduling/resource-bookings?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/resource-bookings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b5cfc13cd427a4be", "name": "Dangling fetch: PUT /api/scheduling/resource-bookings/${booking.id} (app/scheduling/resource-bookings/page.tsx:747)", "shortDescription": {"text": "Dangling fetch: PUT /api/scheduling/resource-bookings/${booking.id} (app/scheduling/resource-bookings/page.tsx:747)"}, "fullDescription": {"text": "`app/scheduling/resource-bookings/page.tsx:747` calls `PUT /api/scheduling/resource-bookings/${booking.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/resource-bookings/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2872829e280cd49d", "name": "Dangling fetch: DELETE /api/scheduling/resource-bookings/${booking.id} (app/scheduling/resource-bookings/page.tsx:767)", "shortDescription": {"text": "Dangling fetch: DELETE /api/scheduling/resource-bookings/${booking.id} (app/scheduling/resource-bookings/page.tsx:767)"}, "fullDescription": {"text": "`app/scheduling/resource-bookings/page.tsx:767` calls `DELETE /api/scheduling/resource-bookings/${booking.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/resource-bookings/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c5977490ac4acec6", "name": "Dangling fetch: GET /api/instructor/me (app/scheduling/availability/page.tsx:266)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduling/availability/page.tsx:266)"}, "fullDescription": {"text": "`app/scheduling/availability/page.tsx:266` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ba2cc26d6d6a76a4", "name": "Dangling fetch: GET /api/scheduling/availability?${params} (app/scheduling/availability/page.tsx:296)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/availability?${params} (app/scheduling/availability/page.tsx:296)"}, "fullDescription": {"text": "`app/scheduling/availability/page.tsx:296` calls `GET /api/scheduling/availability?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b1ff0945c563b902", "name": "Dangling fetch: GET /api/scheduling/availability/suggestions (app/scheduling/availability/page.tsx:308)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/availability/suggestions (app/scheduling/availability/page.tsx:308)"}, "fullDescription": {"text": "`app/scheduling/availability/page.tsx:308` calls `GET /api/scheduling/availability/suggestions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/availability/suggestions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-819c7d5ebf1b5977", "name": "Dangling fetch: POST /api/scheduling/availability (app/scheduling/availability/page.tsx:338)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/availability (app/scheduling/availability/page.tsx:338)"}, "fullDescription": {"text": "`app/scheduling/availability/page.tsx:338` calls `POST /api/scheduling/availability` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2f6e666b0633bd1b", "name": "Dangling fetch: POST /api/scheduling/availability/bulk (app/scheduling/availability/page.tsx:373)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/availability/bulk (app/scheduling/availability/page.tsx:373)"}, "fullDescription": {"text": "`app/scheduling/availability/page.tsx:373` calls `POST /api/scheduling/availability/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/availability/bulk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6d08e6be6bd6efc4", "name": "Dangling fetch: POST /api/scheduling/availability/bulk (app/scheduling/availability/page.tsx:481)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/availability/bulk (app/scheduling/availability/page.tsx:481)"}, "fullDescription": {"text": "`app/scheduling/availability/page.tsx:481` calls `POST /api/scheduling/availability/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/availability/bulk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4f55bce300357ce4", "name": "Dangling fetch: PUT /api/scheduling/availability/${editingEntry.id} (app/scheduling/availability/page.tsx:493)", "shortDescription": {"text": "Dangling fetch: PUT /api/scheduling/availability/${editingEntry.id} (app/scheduling/availability/page.tsx:493)"}, "fullDescription": {"text": "`app/scheduling/availability/page.tsx:493` calls `PUT /api/scheduling/availability/${editingEntry.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/availability/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ffacea14c22696e2", "name": "Dangling fetch: POST /api/scheduling/availability (app/scheduling/availability/page.tsx:511)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/availability (app/scheduling/availability/page.tsx:511)"}, "fullDescription": {"text": "`app/scheduling/availability/page.tsx:511` calls `POST /api/scheduling/availability` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2abc6a43ff3ae511", "name": "Dangling fetch: DELETE /api/scheduling/availability/${editingEntry.id} (app/scheduling/availability/page.tsx:543)", "shortDescription": {"text": "Dangling fetch: DELETE /api/scheduling/availability/${editingEntry.id} (app/scheduling/availability/page.tsx:543)"}, "fullDescription": {"text": "`app/scheduling/availability/page.tsx:543` calls `DELETE /api/scheduling/availability/${editingEntry.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/availability/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b8fcf2d50974cbf", "name": "Dangling fetch: GET /api/scheduling/availability-status?week=${selectedWeek} (app/scheduling/availability/all/page.tsx:2", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/availability-status?week=${selectedWeek} (app/scheduling/availability/all/page.tsx:270)"}, "fullDescription": {"text": "`app/scheduling/availability/all/page.tsx:270` calls `GET /api/scheduling/availability-status?week=${selectedWeek}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/availability-status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-45752a4289728188", "name": "Dangling fetch: POST /api/scheduling/send-availability-reminders (app/scheduling/availability/all/page.tsx:290)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/send-availability-reminders (app/scheduling/availability/all/page.tsx:290)"}, "fullDescription": {"text": "`app/scheduling/availability/all/page.tsx:290` calls `POST /api/scheduling/send-availability-reminders` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/send-availability-reminders`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b90eafd1a7102525", "name": "Dangling fetch: POST /api/scheduling/send-availability-reminders (app/scheduling/availability/all/page.tsx:311)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/send-availability-reminders (app/scheduling/availability/all/page.tsx:311)"}, "fullDescription": {"text": "`app/scheduling/availability/all/page.tsx:311` calls `POST /api/scheduling/send-availability-reminders` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/send-availability-reminders`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-960f78d74367e755", "name": "Dangling fetch: GET /api/instructor/me (app/scheduling/availability/all/page.tsx:1408)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduling/availability/all/page.tsx:1408)"}, "fullDescription": {"text": "`app/scheduling/availability/all/page.tsx:1408` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1713ac733a4bfcc2", "name": "Dangling fetch: GET /api/scheduling/availability/all?${params} (app/scheduling/availability/all/page.tsx:1435)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/availability/all?${params} (app/scheduling/availability/all/page.tsx:1435)"}, "fullDescription": {"text": "`app/scheduling/availability/all/page.tsx:1435` calls `GET /api/scheduling/availability/all?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/availability/all`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6dcfa9f42696da13", "name": "Dangling fetch: GET /api/admin/users?activeOnly=true&limit=100 (app/scheduling/team-availability/page.tsx:154)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/users?activeOnly=true&limit=100 (app/scheduling/team-availability/page.tsx:154)"}, "fullDescription": {"text": "`app/scheduling/team-availability/page.tsx:154` calls `GET /api/admin/users?activeOnly=true&limit=100` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/users`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6b0a8bd05638bdbd", "name": "Dangling fetch: GET /api/scheduling/team-availability/saved (app/scheduling/team-availability/page.tsx:173)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/team-availability/saved (app/scheduling/team-availability/page.tsx:173)"}, "fullDescription": {"text": "`app/scheduling/team-availability/page.tsx:173` calls `GET /api/scheduling/team-availability/saved` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/team-availability/saved`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-45b1153d67cf4a02", "name": "Dangling fetch: GET /api/scheduling/team-availability?${params} (app/scheduling/team-availability/page.tsx:208)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/team-availability?${params} (app/scheduling/team-availability/page.tsx:208)"}, "fullDescription": {"text": "`app/scheduling/team-availability/page.tsx:208` calls `GET /api/scheduling/team-availability?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/team-availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-24ebb0a3344d20d2", "name": "Dangling fetch: DELETE /api/scheduling/team-availability/saved?id=${viewId} (app/scheduling/team-availability/page.tsx:2", "shortDescription": {"text": "Dangling fetch: DELETE /api/scheduling/team-availability/saved?id=${viewId} (app/scheduling/team-availability/page.tsx:253)"}, "fullDescription": {"text": "`app/scheduling/team-availability/page.tsx:253` calls `DELETE /api/scheduling/team-availability/saved?id=${viewId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/team-availability/saved`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b1588cad64dd6483", "name": "Dangling fetch: POST /api/scheduling/team-availability (app/scheduling/team-availability/page.tsx:269)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/team-availability (app/scheduling/team-availability/page.tsx:269)"}, "fullDescription": {"text": "`app/scheduling/team-availability/page.tsx:269` calls `POST /api/scheduling/team-availability` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/team-availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c65d3f9b7f2abc85", "name": "Dangling fetch: GET /api/instructor/me (app/scheduling/substitute-requests/page.tsx:176)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduling/substitute-requests/page.tsx:176)"}, "fullDescription": {"text": "`app/scheduling/substitute-requests/page.tsx:176` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1f838b82e86eeb21", "name": "Dangling fetch: GET /api/scheduling/substitute-requests?${params.toString()} (app/scheduling/substitute-requests/page.ts", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/substitute-requests?${params.toString()} (app/scheduling/substitute-requests/page.tsx:197)"}, "fullDescription": {"text": "`app/scheduling/substitute-requests/page.tsx:197` calls `GET /api/scheduling/substitute-requests?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/substitute-requests`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-68652c269b72c210", "name": "Dangling fetch: GET /api/instructor/history?startDate=${today} (app/scheduling/substitute-requests/page.tsx:218)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/history?startDate=${today} (app/scheduling/substitute-requests/page.tsx:218)"}, "fullDescription": {"text": "`app/scheduling/substitute-requests/page.tsx:218` calls `GET /api/instructor/history?startDate=${today}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-31c7cae38330ef34", "name": "Dangling fetch: POST /api/scheduling/substitute-requests (app/scheduling/substitute-requests/page.tsx:257)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/substitute-requests (app/scheduling/substitute-requests/page.tsx:257)"}, "fullDescription": {"text": "`app/scheduling/substitute-requests/page.tsx:257` calls `POST /api/scheduling/substitute-requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/substitute-requests`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4648d38b47082298", "name": "Dangling fetch: PUT /api/scheduling/substitute-requests/${requestId} (app/scheduling/substitute-requests/page.tsx:289)", "shortDescription": {"text": "Dangling fetch: PUT /api/scheduling/substitute-requests/${requestId} (app/scheduling/substitute-requests/page.tsx:289)"}, "fullDescription": {"text": "`app/scheduling/substitute-requests/page.tsx:289` calls `PUT /api/scheduling/substitute-requests/${requestId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/substitute-requests/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5f40f91c6714ef0f", "name": "Dangling fetch: PUT /api/scheduling/substitute-requests/${reviewingRequest.id} (app/scheduling/substitute-requests/page.", "shortDescription": {"text": "Dangling fetch: PUT /api/scheduling/substitute-requests/${reviewingRequest.id} (app/scheduling/substitute-requests/page.tsx:318)"}, "fullDescription": {"text": "`app/scheduling/substitute-requests/page.tsx:318` calls `PUT /api/scheduling/substitute-requests/${reviewingRequest.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/substitute-requests/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a38280b696b4950", "name": "Dangling fetch: GET /api/lab-management/lab-days?date=${blockDate} (app/scheduling/planner/page.tsx:618)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days?date=${blockDate} (app/scheduling/planner/page.tsx:618)"}, "fullDescription": {"text": "`app/scheduling/planner/page.tsx:618` calls `GET /api/lab-management/lab-days?date=${blockDate}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f1bfee03bc8e087e", "name": "Dangling fetch: POST /api/scheduling/planner/blocks/link-lab-day (app/scheduling/planner/page.tsx:1141)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/planner/blocks/link-lab-day (app/scheduling/planner/page.tsx:1141)"}, "fullDescription": {"text": "`app/scheduling/planner/page.tsx:1141` calls `POST /api/scheduling/planner/blocks/link-lab-day` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/blocks/link-lab-day`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-db9a8586f859ed03", "name": "Dangling fetch: POST /api/scheduling/planner/programs (app/scheduling/planner/page.tsx:1513)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/planner/programs (app/scheduling/planner/page.tsx:1513)"}, "fullDescription": {"text": "`app/scheduling/planner/page.tsx:1513` calls `POST /api/scheduling/planner/programs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/programs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a5173e3cfbe91338", "name": "Dangling fetch: POST /api/scheduling/planner/generate (app/scheduling/planner/page.tsx:1530)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/planner/generate (app/scheduling/planner/page.tsx:1530)"}, "fullDescription": {"text": "`app/scheduling/planner/page.tsx:1530` calls `POST /api/scheduling/planner/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/generate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0da03154a29d53a1", "name": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=false (app/scheduling/planner/page.tsx:2395)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=false (app/scheduling/planner/page.tsx:2395)"}, "fullDescription": {"text": "`app/scheduling/planner/page.tsx:2395` calls `GET /api/scheduling/planner/semesters?active_only=false` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/semesters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5f4746959835a9b6", "name": "Dangling fetch: GET /api/scheduling/planner/rooms (app/scheduling/planner/page.tsx:2396)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/rooms (app/scheduling/planner/page.tsx:2396)"}, "fullDescription": {"text": "`app/scheduling/planner/page.tsx:2396` calls `GET /api/scheduling/planner/rooms` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/rooms`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6d0d4c893756ef88", "name": "Dangling fetch: GET /api/scheduling/planner/instructors (app/scheduling/planner/page.tsx:2397)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/instructors (app/scheduling/planner/page.tsx:2397)"}, "fullDescription": {"text": "`app/scheduling/planner/page.tsx:2397` calls `GET /api/scheduling/planner/instructors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/instructors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6c7d2282887112b5", "name": "Dangling fetch: POST /api/scheduling/planner/semesters (app/scheduling/planner/page.tsx:2469)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/planner/semesters (app/scheduling/planner/page.tsx:2469)"}, "fullDescription": {"text": "`app/scheduling/planner/page.tsx:2469` calls `POST /api/scheduling/planner/semesters` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/semesters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-016dea9849d30c0a", "name": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=false (app/scheduling/planner/page.tsx:2480)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=false (app/scheduling/planner/page.tsx:2480)"}, "fullDescription": {"text": "`app/scheduling/planner/page.tsx:2480` calls `GET /api/scheduling/planner/semesters?active_only=false` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/semesters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f3eb735710ea5f13", "name": "Dangling fetch: GET /api/scheduling/planner/programs?semester_id=${selectedSemesterId} (app/scheduling/planner/page.tsx:", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/programs?semester_id=${selectedSemesterId} (app/scheduling/planner/page.tsx:2519)"}, "fullDescription": {"text": "`app/scheduling/planner/page.tsx:2519` calls `GET /api/scheduling/planner/programs?semester_id=${selectedSemesterId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/programs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c951063131dd4405", "name": "Dangling fetch: GET /api/scheduling/planner/blocks?semester_id=${selectedSemesterId}&date_from=${dateFrom}&date_to=${dat", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/blocks?semester_id=${selectedSemesterId}&date_from=${dateFrom}&date_to=${dateTo} (app/scheduling/planner/page.tsx:2520)"}, "fullDescription": {"text": "`app/scheduling/planner/page.tsx:2520` calls `GET /api/scheduling/planner/blocks?semester_id=${selectedSemesterId}&date_from=${dateFrom}&date_to=${dateTo}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/blocks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f87a2b4f6846b1d9", "name": "Dangling fetch: GET /api/scheduling/planner/conflicts?semester_id=${selectedSemesterId} (app/scheduling/planner/page.tsx", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/conflicts?semester_id=${selectedSemesterId} (app/scheduling/planner/page.tsx:2521)"}, "fullDescription": {"text": "`app/scheduling/planner/page.tsx:2521` calls `GET /api/scheduling/planner/conflicts?semester_id=${selectedSemesterId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/conflicts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8f253f86e8f8c5a5", "name": "Dangling fetch: GET /api/lab-management/lab-days?startDate=${dateFrom}&endDate=${dateTo}&limit=100 (app/scheduling/plann", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days?startDate=${dateFrom}&endDate=${dateTo}&limit=100 (app/scheduling/planner/page.tsx:2522)"}, "fullDescription": {"text": "`app/scheduling/planner/page.tsx:2522` calls `GET /api/lab-management/lab-days?startDate=${dateFrom}&endDate=${dateTo}&limit=100` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3ae472657de0e64b", "name": "Dangling fetch: GET /api/scheduling/planner/blocks?semester_id=${selectedSemesterId}&status=draft&count_only=true (app/s", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/blocks?semester_id=${selectedSemesterId}&status=draft&count_only=true (app/scheduling/planner/page.tsx:2523)"}, "fullDescription": {"text": "`app/scheduling/planner/page.tsx:2523` calls `GET /api/scheduling/planner/blocks?semester_id=${selectedSemesterId}&status=draft&count_only=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/blocks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-86a979a451513f84", "name": "Dangling fetch: POST /api/scheduling/planner/blocks/recurring (app/scheduling/planner/page.tsx:2644)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/planner/blocks/recurring (app/scheduling/planner/page.tsx:2644)"}, "fullDescription": {"text": "`app/scheduling/planner/page.tsx:2644` calls `POST /api/scheduling/planner/blocks/recurring` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/blocks/recurring`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9c1b8c50a8c956f2", "name": "Dangling fetch: DELETE /api/scheduling/planner/blocks/${editingBlock.id}${modeParam} (app/scheduling/planner/page.tsx:26", "shortDescription": {"text": "Dangling fetch: DELETE /api/scheduling/planner/blocks/${editingBlock.id}${modeParam} (app/scheduling/planner/page.tsx:2669)"}, "fullDescription": {"text": "`app/scheduling/planner/page.tsx:2669` calls `DELETE /api/scheduling/planner/blocks/${editingBlock.id}${modeParam}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/blocks/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cb1503082117f25d", "name": "Dangling fetch: PUT /api/scheduling/planner/blocks/${blockId} (app/scheduling/planner/page.tsx:2757)", "shortDescription": {"text": "Dangling fetch: PUT /api/scheduling/planner/blocks/${blockId} (app/scheduling/planner/page.tsx:2757)"}, "fullDescription": {"text": "`app/scheduling/planner/page.tsx:2757` calls `PUT /api/scheduling/planner/blocks/${blockId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/blocks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6451da3059f0f629", "name": "Dangling fetch: POST /api/scheduling/planner/blocks/publish-all (app/scheduling/planner/page.tsx:2935)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/planner/blocks/publish-all (app/scheduling/planner/page.tsx:2935)"}, "fullDescription": {"text": "`app/scheduling/planner/page.tsx:2935` calls `POST /api/scheduling/planner/blocks/publish-all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/blocks/publish-all`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2c471fad1663cc10", "name": "Dangling fetch: GET /api/scheduling/planner/workload?semester_id=${semesterId} (app/scheduling/planner/workload/page.tsx", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/workload?semester_id=${semesterId} (app/scheduling/planner/workload/page.tsx:778)"}, "fullDescription": {"text": "`app/scheduling/planner/workload/page.tsx:778` calls `GET /api/scheduling/planner/workload?semester_id=${semesterId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/workload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e7699456afd471eb", "name": "Dangling fetch: GET /api/scheduling/planner/semesters (app/scheduling/planner/workload/page.tsx:793)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters (app/scheduling/planner/workload/page.tsx:793)"}, "fullDescription": {"text": "`app/scheduling/planner/workload/page.tsx:793` calls `GET /api/scheduling/planner/semesters` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/semesters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5fc97932c042d55d", "name": "Dangling fetch: POST /api/scheduling/planner/workload (app/scheduling/planner/workload/page.tsx:834)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/planner/workload (app/scheduling/planner/workload/page.tsx:834)"}, "fullDescription": {"text": "`app/scheduling/planner/workload/page.tsx:834` calls `POST /api/scheduling/planner/workload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/workload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3473cf8c5937705b", "name": "Dangling fetch: GET /api/users/list (app/scheduling/planner/templates/page.tsx:135)", "shortDescription": {"text": "Dangling fetch: GET /api/users/list (app/scheduling/planner/templates/page.tsx:135)"}, "fullDescription": {"text": "`app/scheduling/planner/templates/page.tsx:135` calls `GET /api/users/list` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/list`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-74e0c2d23c239cc4", "name": "Dangling fetch: DELETE /api/scheduling/planner/templates/${id} (app/scheduling/planner/templates/page.tsx:216)", "shortDescription": {"text": "Dangling fetch: DELETE /api/scheduling/planner/templates/${id} (app/scheduling/planner/templates/page.tsx:216)"}, "fullDescription": {"text": "`app/scheduling/planner/templates/page.tsx:216` calls `DELETE /api/scheduling/planner/templates/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/templates/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b02169c0d092d17c", "name": "Dangling fetch: GET /api/instructor/me (app/scheduling/signups/pending/page.tsx:88)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduling/signups/pending/page.tsx:88)"}, "fullDescription": {"text": "`app/scheduling/signups/pending/page.tsx:88` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-76ea086cb74f1e7c", "name": "Dangling fetch: GET /api/scheduling/signups/pending (app/scheduling/signups/pending/page.tsx:101)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/signups/pending (app/scheduling/signups/pending/page.tsx:101)"}, "fullDescription": {"text": "`app/scheduling/signups/pending/page.tsx:101` calls `GET /api/scheduling/signups/pending` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/signups/pending`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e7bb10517888de5d", "name": "Dangling fetch: POST /api/scheduling/shifts/${signup.shift_id}/signup/${signup.id} (app/scheduling/signups/pending/page.", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/shifts/${signup.shift_id}/signup/${signup.id} (app/scheduling/signups/pending/page.tsx:116)"}, "fullDescription": {"text": "`app/scheduling/signups/pending/page.tsx:116` calls `POST /api/scheduling/shifts/${signup.shift_id}/signup/${signup.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/shifts/<p>/signup/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e93c5e1c8e296fd0", "name": "Dangling fetch: POST /api/scheduling/shifts/${declineModal.signup.shift_id}/signup/${declineModal.signup.id} (app/schedu", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/shifts/${declineModal.signup.shift_id}/signup/${declineModal.signup.id} (app/scheduling/signups/pending/page.tsx:149)"}, "fullDescription": {"text": "`app/scheduling/signups/pending/page.tsx:149` calls `POST /api/scheduling/shifts/${declineModal.signup.shift_id}/signup/${declineModal.signup.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/shifts/<p>/signup/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7fdf5ffaa499f8ed", "name": "Dangling fetch: GET /api/user/preferences (app/notifications/page.tsx:232)", "shortDescription": {"text": "Dangling fetch: GET /api/user/preferences (app/notifications/page.tsx:232)"}, "fullDescription": {"text": "`app/notifications/page.tsx:232` calls `GET /api/user/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d44d6cbd31e62740", "name": "Dangling fetch: PUT /api/user/preferences (app/notifications/page.tsx:247)", "shortDescription": {"text": "Dangling fetch: PUT /api/user/preferences (app/notifications/page.tsx:247)"}, "fullDescription": {"text": "`app/notifications/page.tsx:247` calls `PUT /api/user/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-90a27c8151304dec", "name": "Dangling fetch: GET /api/notifications?${params.toString()} (app/notifications/page.tsx:279)", "shortDescription": {"text": "Dangling fetch: GET /api/notifications?${params.toString()} (app/notifications/page.tsx:279)"}, "fullDescription": {"text": "`app/notifications/page.tsx:279` calls `GET /api/notifications?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd8eb086793675e3", "name": "Dangling fetch: PUT /api/notifications/read (app/notifications/page.tsx:295)", "shortDescription": {"text": "Dangling fetch: PUT /api/notifications/read (app/notifications/page.tsx:295)"}, "fullDescription": {"text": "`app/notifications/page.tsx:295` calls `PUT /api/notifications/read` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/read`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-98aef420f990305c", "name": "Dangling fetch: PUT /api/notifications/read (app/notifications/page.tsx:309)", "shortDescription": {"text": "Dangling fetch: PUT /api/notifications/read (app/notifications/page.tsx:309)"}, "fullDescription": {"text": "`app/notifications/page.tsx:309` calls `PUT /api/notifications/read` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/read`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-017ebb7a897e2e27", "name": "Dangling fetch: PUT /api/notifications/read (app/notifications/page.tsx:336)", "shortDescription": {"text": "Dangling fetch: PUT /api/notifications/read (app/notifications/page.tsx:336)"}, "fullDescription": {"text": "`app/notifications/page.tsx:336` calls `PUT /api/notifications/read` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/read`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-580bc100090f46ec", "name": "Dangling fetch: DELETE /api/notifications (app/notifications/page.tsx:363)", "shortDescription": {"text": "Dangling fetch: DELETE /api/notifications (app/notifications/page.tsx:363)"}, "fullDescription": {"text": "`app/notifications/page.tsx:363` calls `DELETE /api/notifications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-baeebf4cc063d7ee", "name": "Dangling fetch: PUT /api/notifications/archive (app/notifications/page.tsx:390)", "shortDescription": {"text": "Dangling fetch: PUT /api/notifications/archive (app/notifications/page.tsx:390)"}, "fullDescription": {"text": "`app/notifications/page.tsx:390` calls `PUT /api/notifications/archive` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/archive`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6bc178370286981c", "name": "Dangling fetch: PUT /api/notifications/archive (app/notifications/page.tsx:418)", "shortDescription": {"text": "Dangling fetch: PUT /api/notifications/archive (app/notifications/page.tsx:418)"}, "fullDescription": {"text": "`app/notifications/page.tsx:418` calls `PUT /api/notifications/archive` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/archive`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cbb9db6ecb609c7d", "name": "Dangling fetch: GET /api/exam-scheduling/signups (app/exam-scheduling/page.tsx:78)", "shortDescription": {"text": "Dangling fetch: GET /api/exam-scheduling/signups (app/exam-scheduling/page.tsx:78)"}, "fullDescription": {"text": "`app/exam-scheduling/page.tsx:78` calls `GET /api/exam-scheduling/signups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/exam-scheduling/signups`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dc3f836b7b0d8ec4", "name": "Dangling fetch: GET /api/exam-scheduling/sessions (app/exam-scheduling/page.tsx:79)", "shortDescription": {"text": "Dangling fetch: GET /api/exam-scheduling/sessions (app/exam-scheduling/page.tsx:79)"}, "fullDescription": {"text": "`app/exam-scheduling/page.tsx:79` calls `GET /api/exam-scheduling/sessions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/exam-scheduling/sessions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c88f19aadf2ec0b", "name": "Dangling fetch: DELETE /api/exam-scheduling/signups/${me.signup.id} (app/exam-scheduling/page.tsx:135)", "shortDescription": {"text": "Dangling fetch: DELETE /api/exam-scheduling/signups/${me.signup.id} (app/exam-scheduling/page.tsx:135)"}, "fullDescription": {"text": "`app/exam-scheduling/page.tsx:135` calls `DELETE /api/exam-scheduling/signups/${me.signup.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/exam-scheduling/signups/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d623feaa3eff09b3", "name": "Dangling fetch: GET /api/student/skill-evaluations?evaluation_id=${evaluationId} (app/skill-evaluations/[id]/page.tsx:10", "shortDescription": {"text": "Dangling fetch: GET /api/student/skill-evaluations?evaluation_id=${evaluationId} (app/skill-evaluations/[id]/page.tsx:108)"}, "fullDescription": {"text": "`app/skill-evaluations/[id]/page.tsx:108` calls `GET /api/student/skill-evaluations?evaluation_id=${evaluationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/skill-evaluations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1f081b03d6452db8", "name": "Dangling fetch: GET /api/skill-sheets/${eval_.skill_sheet.id} (app/skill-evaluations/[id]/page.tsx:114)", "shortDescription": {"text": "Dangling fetch: GET /api/skill-sheets/${eval_.skill_sheet.id} (app/skill-evaluations/[id]/page.tsx:114)"}, "fullDescription": {"text": "`app/skill-evaluations/[id]/page.tsx:114` calls `GET /api/skill-sheets/${eval_.skill_sheet.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b8136a3a5f88b509", "name": "Dangling fetch: GET /api/volunteer/invites/${token} (app/volunteer/[token]/page.tsx:78)", "shortDescription": {"text": "Dangling fetch: GET /api/volunteer/invites/${token} (app/volunteer/[token]/page.tsx:78)"}, "fullDescription": {"text": "`app/volunteer/[token]/page.tsx:78` calls `GET /api/volunteer/invites/${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/invites/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2f084bce142d3957", "name": "Dangling fetch: POST /api/volunteer/register (app/volunteer/[token]/page.tsx:119)", "shortDescription": {"text": "Dangling fetch: POST /api/volunteer/register (app/volunteer/[token]/page.tsx:119)"}, "fullDescription": {"text": "`app/volunteer/[token]/page.tsx:119` calls `POST /api/volunteer/register` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/register`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-04a5bf9939285cee", "name": "Dangling fetch: GET /api/volunteer/lab-tokens/${token} (app/volunteer-lab/[token]/page.tsx:100)", "shortDescription": {"text": "Dangling fetch: GET /api/volunteer/lab-tokens/${token} (app/volunteer-lab/[token]/page.tsx:100)"}, "fullDescription": {"text": "`app/volunteer-lab/[token]/page.tsx:100` calls `GET /api/volunteer/lab-tokens/${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/lab-tokens/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1f91a0b53885568e", "name": "Dangling fetch: POST /api/volunteer/lab-tokens/${token}/evaluate (app/volunteer-lab/[token]/page.tsx:164)", "shortDescription": {"text": "Dangling fetch: POST /api/volunteer/lab-tokens/${token}/evaluate (app/volunteer-lab/[token]/page.tsx:164)"}, "fullDescription": {"text": "`app/volunteer-lab/[token]/page.tsx:164` calls `POST /api/volunteer/lab-tokens/${token}/evaluate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/lab-tokens/<p>/evaluate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2e50da454616ec33", "name": "Dangling fetch: POST /api/guest/login (app/guest/page.tsx:88)", "shortDescription": {"text": "Dangling fetch: POST /api/guest/login (app/guest/page.tsx:88)"}, "fullDescription": {"text": "`app/guest/page.tsx:88` calls `POST /api/guest/login` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/guest/login`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cfc84c5669568a96", "name": "Dangling fetch: GET /api/osce/time-blocks (app/osce-evaluator-signup/page.tsx:32)", "shortDescription": {"text": "Dangling fetch: GET /api/osce/time-blocks (app/osce-evaluator-signup/page.tsx:32)"}, "fullDescription": {"text": "`app/osce-evaluator-signup/page.tsx:32` calls `GET /api/osce/time-blocks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/time-blocks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9373b011188ec1b1", "name": "Dangling fetch: POST /api/osce/register (app/osce-evaluator-signup/page.tsx:87)", "shortDescription": {"text": "Dangling fetch: POST /api/osce/register (app/osce-evaluator-signup/page.tsx:87)"}, "fullDescription": {"text": "`app/osce-evaluator-signup/page.tsx:87` calls `POST /api/osce/register` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/osce/register`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-45b4b5a27b51be1f", "name": "Dangling fetch: GET /api/instructor/me (app/academics/page.tsx:45)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/academics/page.tsx:45)"}, "fullDescription": {"text": "`app/academics/page.tsx:45` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8a7c17bb040769f4", "name": "Dangling fetch: GET /api/instructor/me (app/academics/admin/smc/page.tsx:160)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/academics/admin/smc/page.tsx:160)"}, "fullDescription": {"text": "`app/academics/admin/smc/page.tsx:160` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f695e285e22c2707", "name": "Dangling fetch: PATCH /api/lab-management/smc-admin/${id} (app/academics/admin/smc/page.tsx:258)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/smc-admin/${id} (app/academics/admin/smc/page.tsx:258)"}, "fullDescription": {"text": "`app/academics/admin/smc/page.tsx:258` calls `PATCH /api/lab-management/smc-admin/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/smc-admin/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-66b3cc081b1b867d", "name": "Dangling fetch: POST /api/lab-management/smc-admin (app/academics/admin/smc/page.tsx:279)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/smc-admin (app/academics/admin/smc/page.tsx:279)"}, "fullDescription": {"text": "`app/academics/admin/smc/page.tsx:279` calls `POST /api/lab-management/smc-admin` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/smc-admin`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0d3408c2e42090d4", "name": "Dangling fetch: DELETE /api/lab-management/smc-admin/${id} (app/academics/admin/smc/page.tsx:303)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/smc-admin/${id} (app/academics/admin/smc/page.tsx:303)"}, "fullDescription": {"text": "`app/academics/admin/smc/page.tsx:303` calls `DELETE /api/lab-management/smc-admin/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/smc-admin/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3576f2ec256b5133", "name": "Dangling fetch: PATCH /api/lab-management/smc-admin/${smcId} (app/academics/admin/smc/page.tsx:1233)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/smc-admin/${smcId} (app/academics/admin/smc/page.tsx:1233)"}, "fullDescription": {"text": "`app/academics/admin/smc/page.tsx:1233` calls `PATCH /api/lab-management/smc-admin/${smcId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/smc-admin/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f5a03ab3959f2bf9", "name": "Dangling fetch: PATCH /api/lab-management/smc-admin/${s.smc_id} (app/academics/admin/smc/page.tsx:1276)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/smc-admin/${s.smc_id} (app/academics/admin/smc/page.tsx:1276)"}, "fullDescription": {"text": "`app/academics/admin/smc/page.tsx:1276` calls `PATCH /api/lab-management/smc-admin/${s.smc_id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/smc-admin/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-55d2622487736b75", "name": "Dangling fetch: GET /api/lab-management/lab-days?date=${blockDate} (app/academics/planner/page.tsx:600)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days?date=${blockDate} (app/academics/planner/page.tsx:600)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:600` calls `GET /api/lab-management/lab-days?date=${blockDate}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ee80dd33c97c2c3a", "name": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=false (app/academics/planner/page.tsx:1356)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=false (app/academics/planner/page.tsx:1356)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:1356` calls `GET /api/scheduling/planner/semesters?active_only=false` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/semesters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b94abe50ca20e0fe", "name": "Dangling fetch: GET /api/scheduling/planner/blocks/check-existing?${params.toString()} (app/academics/planner/page.tsx:1", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/blocks/check-existing?${params.toString()} (app/academics/planner/page.tsx:1481)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:1481` calls `GET /api/scheduling/planner/blocks/check-existing?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/blocks/check-existing`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c5ad3249432b8345", "name": "Dangling fetch: POST /api/scheduling/planner/programs (app/academics/planner/page.tsx:1536)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/planner/programs (app/academics/planner/page.tsx:1536)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:1536` calls `POST /api/scheduling/planner/programs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/programs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c97ee5321be31244", "name": "Dangling fetch: POST /api/scheduling/planner/generate (app/academics/planner/page.tsx:1563)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/planner/generate (app/academics/planner/page.tsx:1563)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:1563` calls `POST /api/scheduling/planner/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/generate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-190b211ca41cf9a9", "name": "Dangling fetch: POST /api/scheduling/planner/generate (app/academics/planner/page.tsx:1626)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/planner/generate (app/academics/planner/page.tsx:1626)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:1626` calls `POST /api/scheduling/planner/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/generate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f5599192d0c24b29", "name": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=false (app/academics/planner/page.tsx:2585)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=false (app/academics/planner/page.tsx:2585)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:2585` calls `GET /api/scheduling/planner/semesters?active_only=false` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/semesters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-93add056895ea228", "name": "Dangling fetch: GET /api/scheduling/planner/rooms (app/academics/planner/page.tsx:2586)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/rooms (app/academics/planner/page.tsx:2586)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:2586` calls `GET /api/scheduling/planner/rooms` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/rooms`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b06c9a78c9fd801f", "name": "Dangling fetch: GET /api/scheduling/planner/instructors (app/academics/planner/page.tsx:2587)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/instructors (app/academics/planner/page.tsx:2587)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:2587` calls `GET /api/scheduling/planner/instructors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/instructors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6f6fb5d126b4c9b9", "name": "Dangling fetch: POST /api/scheduling/planner/semesters (app/academics/planner/page.tsx:2672)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/planner/semesters (app/academics/planner/page.tsx:2672)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:2672` calls `POST /api/scheduling/planner/semesters` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/semesters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-80cf78c418dff53f", "name": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=false (app/academics/planner/page.tsx:2683)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=false (app/academics/planner/page.tsx:2683)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:2683` calls `GET /api/scheduling/planner/semesters?active_only=false` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/semesters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-43c00d4f07f791f2", "name": "Dangling fetch: GET /api/scheduling/planner/programs?semester_id=${selectedSemesterId} (app/academics/planner/page.tsx:2", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/programs?semester_id=${selectedSemesterId} (app/academics/planner/page.tsx:2722)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:2722` calls `GET /api/scheduling/planner/programs?semester_id=${selectedSemesterId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/programs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0dc15104d944d9d5", "name": "Dangling fetch: GET /api/scheduling/planner/blocks?semester_id=${selectedSemesterId}&date_from=${dateFrom}&date_to=${dat", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/blocks?semester_id=${selectedSemesterId}&date_from=${dateFrom}&date_to=${dateTo} (app/academics/planner/page.tsx:2723)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:2723` calls `GET /api/scheduling/planner/blocks?semester_id=${selectedSemesterId}&date_from=${dateFrom}&date_to=${dateTo}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/blocks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-901863a75be00c52", "name": "Dangling fetch: GET /api/scheduling/planner/conflicts?semester_id=${selectedSemesterId} (app/academics/planner/page.tsx:", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/conflicts?semester_id=${selectedSemesterId} (app/academics/planner/page.tsx:2724)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:2724` calls `GET /api/scheduling/planner/conflicts?semester_id=${selectedSemesterId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/conflicts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-64b96150c20d2824", "name": "Dangling fetch: GET /api/lab-management/lab-days?startDate=${dateFrom}&endDate=${dateTo}&limit=100 (app/academics/planne", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days?startDate=${dateFrom}&endDate=${dateTo}&limit=100 (app/academics/planner/page.tsx:2725)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:2725` calls `GET /api/lab-management/lab-days?startDate=${dateFrom}&endDate=${dateTo}&limit=100` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-13c4d2fbe999695d", "name": "Dangling fetch: GET /api/scheduling/planner/blocks?semester_id=${selectedSemesterId}&status=draft&count_only=true (app/a", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/blocks?semester_id=${selectedSemesterId}&status=draft&count_only=true (app/academics/planner/page.tsx:2728)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:2728` calls `GET /api/scheduling/planner/blocks?semester_id=${selectedSemesterId}&status=draft&count_only=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/blocks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fcbf9e679815d1f8", "name": "Dangling fetch: POST /api/scheduling/planner/blocks/recurring (app/academics/planner/page.tsx:2849)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/planner/blocks/recurring (app/academics/planner/page.tsx:2849)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:2849` calls `POST /api/scheduling/planner/blocks/recurring` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/blocks/recurring`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f0cc180e8a8172c8", "name": "Dangling fetch: DELETE /api/scheduling/planner/blocks/${editingBlock.id}${modeParam} (app/academics/planner/page.tsx:287", "shortDescription": {"text": "Dangling fetch: DELETE /api/scheduling/planner/blocks/${editingBlock.id}${modeParam} (app/academics/planner/page.tsx:2874)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:2874` calls `DELETE /api/scheduling/planner/blocks/${editingBlock.id}${modeParam}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/blocks/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d44076f390377247", "name": "Dangling fetch: PUT /api/scheduling/planner/blocks/${blockId} (app/academics/planner/page.tsx:2982)", "shortDescription": {"text": "Dangling fetch: PUT /api/scheduling/planner/blocks/${blockId} (app/academics/planner/page.tsx:2982)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:2982` calls `PUT /api/scheduling/planner/blocks/${blockId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/blocks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1425107273fbe5c2", "name": "Dangling fetch: POST /api/scheduling/planner/blocks/publish-all (app/academics/planner/page.tsx:3165)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/planner/blocks/publish-all (app/academics/planner/page.tsx:3165)"}, "fullDescription": {"text": "`app/academics/planner/page.tsx:3165` calls `POST /api/scheduling/planner/blocks/publish-all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/blocks/publish-all`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7c88e0b2e3140a6e", "name": "Dangling fetch: GET /api/scheduling/planner/workload?semester_id=${semesterId} (app/academics/planner/workload/page.tsx:", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/workload?semester_id=${semesterId} (app/academics/planner/workload/page.tsx:778)"}, "fullDescription": {"text": "`app/academics/planner/workload/page.tsx:778` calls `GET /api/scheduling/planner/workload?semester_id=${semesterId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/workload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-567990f3cd6d07b6", "name": "Dangling fetch: GET /api/scheduling/planner/semesters (app/academics/planner/workload/page.tsx:793)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters (app/academics/planner/workload/page.tsx:793)"}, "fullDescription": {"text": "`app/academics/planner/workload/page.tsx:793` calls `GET /api/scheduling/planner/semesters` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/semesters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f0d3bc808400ac34", "name": "Dangling fetch: POST /api/scheduling/planner/workload (app/academics/planner/workload/page.tsx:834)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/planner/workload (app/academics/planner/workload/page.tsx:834)"}, "fullDescription": {"text": "`app/academics/planner/workload/page.tsx:834` calls `POST /api/scheduling/planner/workload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/workload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-28ff9f17909c52a9", "name": "Dangling fetch: GET /api/users/list (app/academics/planner/templates/page.tsx:135)", "shortDescription": {"text": "Dangling fetch: GET /api/users/list (app/academics/planner/templates/page.tsx:135)"}, "fullDescription": {"text": "`app/academics/planner/templates/page.tsx:135` calls `GET /api/users/list` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/list`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f7be886fdc6abd2f", "name": "Dangling fetch: DELETE /api/scheduling/planner/templates/${id} (app/academics/planner/templates/page.tsx:216)", "shortDescription": {"text": "Dangling fetch: DELETE /api/scheduling/planner/templates/${id} (app/academics/planner/templates/page.tsx:216)"}, "fullDescription": {"text": "`app/academics/planner/templates/page.tsx:216` calls `DELETE /api/scheduling/planner/templates/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/templates/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8c2bb906938545be", "name": "Dangling fetch: GET /api/instructor/me (app/academics/students/page.tsx:124)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/academics/students/page.tsx:124)"}, "fullDescription": {"text": "`app/academics/students/page.tsx:124` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a4fbbf877ba054ef", "name": "Dangling fetch: GET /api/instructor/me (app/academics/students/[id]/page.tsx:400)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/academics/students/[id]/page.tsx:400)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:400` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-566eb21283039506", "name": "Dangling fetch: GET /api/lab-management/students/${studentId}/notes (app/academics/students/[id]/page.tsx:414)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students/${studentId}/notes (app/academics/students/[id]/page.tsx:414)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:414` calls `GET /api/lab-management/students/${studentId}/notes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>/notes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-41742886022c8c48", "name": "Dangling fetch: GET /api/lab-management/students/${studentId} (app/academics/students/[id]/page.tsx:427)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students/${studentId} (app/academics/students/[id]/page.tsx:427)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:427` calls `GET /api/lab-management/students/${studentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa2906a71fc09795", "name": "Dangling fetch: GET /api/lab-management/team-leads?studentId=${studentId} (app/academics/students/[id]/page.tsx:454)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/team-leads?studentId=${studentId} (app/academics/students/[id]/page.tsx:454)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:454` calls `GET /api/lab-management/team-leads?studentId=${studentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/team-leads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cc50f7d2c743120b", "name": "Dangling fetch: GET /api/lab-management/assessments/scenario?studentId=${studentId} (app/academics/students/[id]/page.ts", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/assessments/scenario?studentId=${studentId} (app/academics/students/[id]/page.tsx:467)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:467` calls `GET /api/lab-management/assessments/scenario?studentId=${studentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/assessments/scenario`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c8f4e18aeb045cde", "name": "Dangling fetch: GET /api/lab-management/assessments/skill?studentId=${studentId} (app/academics/students/[id]/page.tsx:4", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/assessments/skill?studentId=${studentId} (app/academics/students/[id]/page.tsx:471)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:471` calls `GET /api/lab-management/assessments/skill?studentId=${studentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/assessments/skill`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7c7dcf1002d273b4", "name": "Dangling fetch: GET /api/lab-management/students/${studentId}/clinical-tasks (app/academics/students/[id]/page.tsx:487)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students/${studentId}/clinical-tasks (app/academics/students/[id]/page.tsx:487)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:487` calls `GET /api/lab-management/students/${studentId}/clinical-tasks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>/clinical-tasks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e0c7321e1eb7d7d7", "name": "Dangling fetch: GET /api/seating/learning-styles?studentId=${studentId} (app/academics/students/[id]/page.tsx:499)", "shortDescription": {"text": "Dangling fetch: GET /api/seating/learning-styles?studentId=${studentId} (app/academics/students/[id]/page.tsx:499)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:499` calls `GET /api/seating/learning-styles?studentId=${studentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seating/learning-styles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5c4ff64f4a1f0016", "name": "Dangling fetch: GET /api/compliance?student_id=${studentId} (app/academics/students/[id]/page.tsx:516)", "shortDescription": {"text": "Dangling fetch: GET /api/compliance?student_id=${studentId} (app/academics/students/[id]/page.tsx:516)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:516` calls `GET /api/compliance?student_id=${studentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/compliance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ca56a2453a627b8e", "name": "Dangling fetch: GET /api/lab-management/students/${studentId}/ratings (app/academics/students/[id]/page.tsx:530)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students/${studentId}/ratings (app/academics/students/[id]/page.tsx:530)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:530` calls `GET /api/lab-management/students/${studentId}/ratings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>/ratings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7f8cebe8c92f6e0b", "name": "Dangling fetch: GET /api/lab-management/skill-signoffs?student_id=${studentId} (app/academics/students/[id]/page.tsx:546", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skill-signoffs?student_id=${studentId} (app/academics/students/[id]/page.tsx:546)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:546` calls `GET /api/lab-management/skill-signoffs?student_id=${studentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-signoffs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-89b61edb2cd35d87", "name": "Dangling fetch: GET /api/lab-management/skills (app/academics/students/[id]/page.tsx:559)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skills (app/academics/students/[id]/page.tsx:559)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:559` calls `GET /api/lab-management/skills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ede2f3157b15f615", "name": "Dangling fetch: GET /api/students/${studentId}/skill-evaluations (app/academics/students/[id]/page.tsx:572)", "shortDescription": {"text": "Dangling fetch: GET /api/students/${studentId}/skill-evaluations (app/academics/students/[id]/page.tsx:572)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:572` calls `GET /api/students/${studentId}/skill-evaluations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/students/<p>/skill-evaluations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-821bcb6ffc981372", "name": "Dangling fetch: POST /api/compliance (app/academics/students/[id]/page.tsx:586)", "shortDescription": {"text": "Dangling fetch: POST /api/compliance (app/academics/students/[id]/page.tsx:586)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:586` calls `POST /api/compliance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/compliance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0d146c1db726dfd9", "name": "Dangling fetch: PUT /api/compliance (app/academics/students/[id]/page.tsx:614)", "shortDescription": {"text": "Dangling fetch: PUT /api/compliance (app/academics/students/[id]/page.tsx:614)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:614` calls `PUT /api/compliance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/compliance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2811c17c582ee910", "name": "Dangling fetch: POST /api/seating/learning-styles (app/academics/students/[id]/page.tsx:647)", "shortDescription": {"text": "Dangling fetch: POST /api/seating/learning-styles (app/academics/students/[id]/page.tsx:647)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:647` calls `POST /api/seating/learning-styles` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seating/learning-styles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-44874d9cf4046e38", "name": "Dangling fetch: POST /api/lab-management/students/${studentId}/notes (app/academics/students/[id]/page.tsx:675)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/students/${studentId}/notes (app/academics/students/[id]/page.tsx:675)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:675` calls `POST /api/lab-management/students/${studentId}/notes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>/notes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8a4ef53ccf0aace0", "name": "Dangling fetch: PUT /api/lab-management/students/${studentId}/notes (app/academics/students/[id]/page.tsx:711)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/students/${studentId}/notes (app/academics/students/[id]/page.tsx:711)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:711` calls `PUT /api/lab-management/students/${studentId}/notes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>/notes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d7b14b804d357c08", "name": "Dangling fetch: DELETE /api/lab-management/students/${studentId}/notes?noteId=${noteId} (app/academics/students/[id]/pag", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/students/${studentId}/notes?noteId=${noteId} (app/academics/students/[id]/page.tsx:738)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:738` calls `DELETE /api/lab-management/students/${studentId}/notes?noteId=${noteId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>/notes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26a5fa41fc76928d", "name": "Dangling fetch: POST /api/lab-management/students/${studentId}/photo (app/academics/students/[id]/page.tsx:804)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/students/${studentId}/photo (app/academics/students/[id]/page.tsx:804)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:804` calls `POST /api/lab-management/students/${studentId}/photo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>/photo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2a58d0de1b7008be", "name": "Dangling fetch: PATCH /api/lab-management/students/${studentId} (app/academics/students/[id]/page.tsx:855)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/students/${studentId} (app/academics/students/[id]/page.tsx:855)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:855` calls `PATCH /api/lab-management/students/${studentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aa2544c08061ecd9", "name": "Dangling fetch: DELETE /api/lab-management/students/${studentId} (app/academics/students/[id]/page.tsx:895)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/students/${studentId} (app/academics/students/[id]/page.tsx:895)"}, "fullDescription": {"text": "`app/academics/students/[id]/page.tsx:895` calls `DELETE /api/lab-management/students/${studentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2d20ec7bb6a82972", "name": "Dangling fetch: GET /api/instructor/me (app/academics/students/[id]/learning-plan/page.tsx:167)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/academics/students/[id]/learning-plan/page.tsx:167)"}, "fullDescription": {"text": "`app/academics/students/[id]/learning-plan/page.tsx:167` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6aaa80c1f434e212", "name": "Dangling fetch: GET /api/lab-management/students/${studentId} (app/academics/students/[id]/learning-plan/page.tsx:179)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students/${studentId} (app/academics/students/[id]/learning-plan/page.tsx:179)"}, "fullDescription": {"text": "`app/academics/students/[id]/learning-plan/page.tsx:179` calls `GET /api/lab-management/students/${studentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3d2d9afeef639a53", "name": "Dangling fetch: GET /api/lab-management/students/${studentId}/learning-plan (app/academics/students/[id]/learning-plan/p", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students/${studentId}/learning-plan (app/academics/students/[id]/learning-plan/page.tsx:192)"}, "fullDescription": {"text": "`app/academics/students/[id]/learning-plan/page.tsx:192` calls `GET /api/lab-management/students/${studentId}/learning-plan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>/learning-plan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-876f939fc387fa3c", "name": "Dangling fetch: POST /api/lab-management/students/${studentId}/learning-plan (app/academics/students/[id]/learning-plan/", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/students/${studentId}/learning-plan (app/academics/students/[id]/learning-plan/page.tsx:223)"}, "fullDescription": {"text": "`app/academics/students/[id]/learning-plan/page.tsx:223` calls `POST /api/lab-management/students/${studentId}/learning-plan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>/learning-plan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fd1b2eb3573bf793", "name": "Dangling fetch: POST /api/lab-management/students/${studentId}/learning-plan/notes (app/academics/students/[id]/learning", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/students/${studentId}/learning-plan/notes (app/academics/students/[id]/learning-plan/page.tsx:254)"}, "fullDescription": {"text": "`app/academics/students/[id]/learning-plan/page.tsx:254` calls `POST /api/lab-management/students/${studentId}/learning-plan/notes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>/learning-plan/notes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-211b98798b7a5c99", "name": "Dangling fetch: GET /api/lab-management/students/${studentId}/portfolio (app/academics/students/[id]/portfolio/page.tsx:", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students/${studentId}/portfolio (app/academics/students/[id]/portfolio/page.tsx:294)"}, "fullDescription": {"text": "`app/academics/students/[id]/portfolio/page.tsx:294` calls `GET /api/lab-management/students/${studentId}/portfolio` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>/portfolio`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5c50b462bbdcb50c", "name": "Dangling fetch: GET /api/lab-management/competencies?student_id=${studentId} (app/academics/students/[id]/portfolio/page", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/competencies?student_id=${studentId} (app/academics/students/[id]/portfolio/page.tsx:312)"}, "fullDescription": {"text": "`app/academics/students/[id]/portfolio/page.tsx:312` calls `GET /api/lab-management/competencies?student_id=${studentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/competencies`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c9841019b3767ac0", "name": "Dangling fetch: GET /api/lab-management/cohorts (app/academics/students/new/page.tsx:62)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/academics/students/new/page.tsx:62)"}, "fullDescription": {"text": "`app/academics/students/new/page.tsx:62` calls `GET /api/lab-management/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a63bc59975568f54", "name": "Dangling fetch: POST /api/lab-management/students (app/academics/students/new/page.tsx:121)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/students (app/academics/students/new/page.tsx:121)"}, "fullDescription": {"text": "`app/academics/students/new/page.tsx:121` calls `POST /api/lab-management/students` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9956ec786c1f0459", "name": "Dangling fetch: GET /api/lab-management/students/import?limit=10 (app/academics/students/import/page.tsx:341)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students/import?limit=10 (app/academics/students/import/page.tsx:341)"}, "fullDescription": {"text": "`app/academics/students/import/page.tsx:341` calls `GET /api/lab-management/students/import?limit=10` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/import`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-95cc42b0049a2b7d", "name": "Dangling fetch: GET /api/lab-management/cohorts (app/academics/students/import/page.tsx:472)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/academics/students/import/page.tsx:472)"}, "fullDescription": {"text": "`app/academics/students/import/page.tsx:472` calls `GET /api/lab-management/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-25e7711f364415a5", "name": "Dangling fetch: POST /api/lab-management/students/check-duplicates (app/academics/students/import/page.tsx:507)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/students/check-duplicates (app/academics/students/import/page.tsx:507)"}, "fullDescription": {"text": "`app/academics/students/import/page.tsx:507` calls `POST /api/lab-management/students/check-duplicates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/check-duplicates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c374c0ccb677f5d5", "name": "Dangling fetch: POST /api/lab-management/students/import (app/academics/students/import/page.tsx:618)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/students/import (app/academics/students/import/page.tsx:618)"}, "fullDescription": {"text": "`app/academics/students/import/page.tsx:618` calls `POST /api/lab-management/students/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/import`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-96f3a440f68f8467", "name": "Dangling fetch: GET /api/skill-sheets/${sheetId} (app/academics/skill-sheets/[id]/page.tsx:193)", "shortDescription": {"text": "Dangling fetch: GET /api/skill-sheets/${sheetId} (app/academics/skill-sheets/[id]/page.tsx:193)"}, "fullDescription": {"text": "`app/academics/skill-sheets/[id]/page.tsx:193` calls `GET /api/skill-sheets/${sheetId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dd906ed14fe95f0e", "name": "Dangling fetch: GET /api/students?role=student (app/academics/skill-sheets/[id]/page.tsx:209)", "shortDescription": {"text": "Dangling fetch: GET /api/students?role=student (app/academics/skill-sheets/[id]/page.tsx:209)"}, "fullDescription": {"text": "`app/academics/skill-sheets/[id]/page.tsx:209` calls `GET /api/students?role=student` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5306546e2f7c7555", "name": "Dangling fetch: GET /api/lab-management/lab-days?limit=20 (app/academics/skill-sheets/[id]/page.tsx:221)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days?limit=20 (app/academics/skill-sheets/[id]/page.tsx:221)"}, "fullDescription": {"text": "`app/academics/skill-sheets/[id]/page.tsx:221` calls `GET /api/lab-management/lab-days?limit=20` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4045777468feec04", "name": "Dangling fetch: POST /api/skill-sheets/${sheetId}/evaluate (app/academics/skill-sheets/[id]/page.tsx:381)", "shortDescription": {"text": "Dangling fetch: POST /api/skill-sheets/${sheetId}/evaluate (app/academics/skill-sheets/[id]/page.tsx:381)"}, "fullDescription": {"text": "`app/academics/skill-sheets/[id]/page.tsx:381` calls `POST /api/skill-sheets/${sheetId}/evaluate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets/<p>/evaluate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-588107ae176ccdb2", "name": "Dangling fetch: GET /api/instructor/me (app/academics/cohorts/page.tsx:119)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/academics/cohorts/page.tsx:119)"}, "fullDescription": {"text": "`app/academics/cohorts/page.tsx:119` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cc3bd00268eb7fc4", "name": "Dangling fetch: GET /api/lab-management/programs (app/academics/cohorts/page.tsx:133)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/programs (app/academics/cohorts/page.tsx:133)"}, "fullDescription": {"text": "`app/academics/cohorts/page.tsx:133` calls `GET /api/lab-management/programs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/programs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2ab610649f0915bf", "name": "Dangling fetch: POST /api/lab-management/cohorts (app/academics/cohorts/page.tsx:165)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/cohorts (app/academics/cohorts/page.tsx:165)"}, "fullDescription": {"text": "`app/academics/cohorts/page.tsx:165` calls `POST /api/lab-management/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f58c7e813d3f0b26", "name": "Dangling fetch: POST /api/admin/lab-templates/apply (app/academics/cohorts/page.tsx:185)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/lab-templates/apply (app/academics/cohorts/page.tsx:185)"}, "fullDescription": {"text": "`app/academics/cohorts/page.tsx:185` calls `POST /api/admin/lab-templates/apply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/lab-templates/apply`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-96d5ff1493a78c00", "name": "Dangling fetch: PATCH /api/lab-management/cohorts/${cohortId} (app/academics/cohorts/page.tsx:251)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/cohorts/${cohortId} (app/academics/cohorts/page.tsx:251)"}, "fullDescription": {"text": "`app/academics/cohorts/page.tsx:251` calls `PATCH /api/lab-management/cohorts/${cohortId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-806b446e61f6c66d", "name": "Dangling fetch: PATCH /api/lab-management/cohorts/${cohort.id} (app/academics/cohorts/page.tsx:283)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/cohorts/${cohort.id} (app/academics/cohorts/page.tsx:283)"}, "fullDescription": {"text": "`app/academics/cohorts/page.tsx:283` calls `PATCH /api/lab-management/cohorts/${cohort.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f8acd264ff1274b9", "name": "Dangling fetch: DELETE /api/lab-management/cohorts/${cohort.id} (app/academics/cohorts/page.tsx:313)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/cohorts/${cohort.id} (app/academics/cohorts/page.tsx:313)"}, "fullDescription": {"text": "`app/academics/cohorts/page.tsx:313` calls `DELETE /api/lab-management/cohorts/${cohort.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6ea6aedaa9fa7069", "name": "Dangling fetch: POST /api/lab-management/cohorts/${cohort.id}/archive (app/academics/cohorts/page.tsx:336)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/cohorts/${cohort.id}/archive (app/academics/cohorts/page.tsx:336)"}, "fullDescription": {"text": "`app/academics/cohorts/page.tsx:336` calls `POST /api/lab-management/cohorts/${cohort.id}/archive` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts/<p>/archive`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5bb8289f6dff9197", "name": "Dangling fetch: DELETE /api/lab-management/cohorts/${cohort.id}/archive (app/academics/cohorts/page.tsx:362)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/cohorts/${cohort.id}/archive (app/academics/cohorts/page.tsx:362)"}, "fullDescription": {"text": "`app/academics/cohorts/page.tsx:362` calls `DELETE /api/lab-management/cohorts/${cohort.id}/archive` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts/<p>/archive`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-feca132a30d41be1", "name": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId} (app/academics/cohorts/[id]/page.tsx:341)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId} (app/academics/cohorts/[id]/page.tsx:341)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/page.tsx:341` calls `GET /api/lab-management/cohorts/${cohortId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e7d9d6d80b175b6a", "name": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/academics/cohorts/[id]/page.tsx", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/academics/cohorts/[id]/page.tsx:348)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/page.tsx:348` calls `GET /api/lab-management/students?cohortId=${cohortId}&status=active` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e92f350773ca241", "name": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=withdrawn (app/academics/cohorts/[id]/page.", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=withdrawn (app/academics/cohorts/[id]/page.tsx:355)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/page.tsx:355` calls `GET /api/lab-management/students?cohortId=${cohortId}&status=withdrawn` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-12c55bf9e52e98e9", "name": "Dangling fetch: GET /api/seating/learning-styles?cohortId=${cohortId} (app/academics/cohorts/[id]/page.tsx:362)", "shortDescription": {"text": "Dangling fetch: GET /api/seating/learning-styles?cohortId=${cohortId} (app/academics/cohorts/[id]/page.tsx:362)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/page.tsx:362` calls `GET /api/seating/learning-styles?cohortId=${cohortId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seating/learning-styles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9bceaae8ebefcfbb", "name": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId}/stats (app/academics/cohorts/[id]/page.tsx:373)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId}/stats (app/academics/cohorts/[id]/page.tsx:373)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/page.tsx:373` calls `GET /api/lab-management/cohorts/${cohortId}/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts/<p>/stats`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a59889a993c12d54", "name": "Dangling fetch: PATCH /api/lab-management/students/${removingStudent.id} (app/academics/cohorts/[id]/page.tsx:393)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/students/${removingStudent.id} (app/academics/cohorts/[id]/page.tsx:393)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/page.tsx:393` calls `PATCH /api/lab-management/students/${removingStudent.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-79b912029283e9f3", "name": "Dangling fetch: PATCH /api/lab-management/students/${student.id} (app/academics/cohorts/[id]/page.tsx:419)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/students/${student.id} (app/academics/cohorts/[id]/page.tsx:419)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/page.tsx:419` calls `PATCH /api/lab-management/students/${student.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4cf827682df9ddce", "name": "Dangling fetch: POST /api/lab-management/cohorts/${cohortId}/email (app/academics/cohorts/[id]/page.tsx:446)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/cohorts/${cohortId}/email (app/academics/cohorts/[id]/page.tsx:446)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/page.tsx:446` calls `POST /api/lab-management/cohorts/${cohortId}/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts/<p>/email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-797cb0a621c202ca", "name": "Dangling fetch: POST /api/lab-management/cohorts/${cohortId}/archive (app/academics/cohorts/[id]/page.tsx:494)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/cohorts/${cohortId}/archive (app/academics/cohorts/[id]/page.tsx:494)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/page.tsx:494` calls `POST /api/lab-management/cohorts/${cohortId}/archive` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts/<p>/archive`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-984bea38c054a36b", "name": "Dangling fetch: DELETE /api/lab-management/cohorts/${cohortId}/archive (app/academics/cohorts/[id]/page.tsx:514)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/cohorts/${cohortId}/archive (app/academics/cohorts/[id]/page.tsx:514)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/page.tsx:514` calls `DELETE /api/lab-management/cohorts/${cohortId}/archive` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts/<p>/archive`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a477742f09a76e3", "name": "Dangling fetch: POST /api/admin/lab-templates/apply (app/academics/cohorts/[id]/page.tsx:657)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/lab-templates/apply (app/academics/cohorts/[id]/page.tsx:657)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/page.tsx:657` calls `POST /api/admin/lab-templates/apply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/lab-templates/apply`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8076f3d23c85a3b5", "name": "Dangling fetch: POST /api/admin/lab-templates/update-existing (app/academics/cohorts/[id]/page.tsx:723)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/lab-templates/update-existing (app/academics/cohorts/[id]/page.tsx:723)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/page.tsx:723` calls `POST /api/admin/lab-templates/update-existing` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/lab-templates/update-existing`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d0bac4f290f003b7", "name": "Dangling fetch: POST /api/admin/lab-templates/cohort-results-check (app/academics/cohorts/[id]/page.tsx:1170)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/lab-templates/cohort-results-check (app/academics/cohorts/[id]/page.tsx:1170)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/page.tsx:1170` calls `POST /api/admin/lab-templates/cohort-results-check` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/lab-templates/cohort-results-check`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-776f12790ee0b9f5", "name": "Dangling fetch: GET /api/instructor/me (app/academics/cohorts/[id]/groups/page.tsx:105)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/academics/cohorts/[id]/groups/page.tsx:105)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/groups/page.tsx:105` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa445f532e428037", "name": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId} (app/academics/cohorts/[id]/groups/page.tsx:119)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId} (app/academics/cohorts/[id]/groups/page.tsx:119)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/groups/page.tsx:119` calls `GET /api/lab-management/cohorts/${cohortId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c1da67cd6b5e1c61", "name": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/academics/cohorts/[id]/groups/p", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/academics/cohorts/[id]/groups/page.tsx:126)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/groups/page.tsx:126` calls `GET /api/lab-management/students?cohortId=${cohortId}&status=active` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-94fe81effee5b82f", "name": "Dangling fetch: GET /api/lab-management/groups?cohortId=${cohortId}&include=members (app/academics/cohorts/[id]/groups/p", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/groups?cohortId=${cohortId}&include=members (app/academics/cohorts/[id]/groups/page.tsx:132)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/groups/page.tsx:132` calls `GET /api/lab-management/groups?cohortId=${cohortId}&include=members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3b98705a1efea3e7", "name": "Dangling fetch: GET /api/seating/learning-styles?cohortId=${cohortId} (app/academics/cohorts/[id]/groups/page.tsx:146)", "shortDescription": {"text": "Dangling fetch: GET /api/seating/learning-styles?cohortId=${cohortId} (app/academics/cohorts/[id]/groups/page.tsx:146)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/groups/page.tsx:146` calls `GET /api/seating/learning-styles?cohortId=${cohortId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/seating/learning-styles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1bca36b0ad9a9779", "name": "Dangling fetch: POST /api/lab-management/groups (app/academics/cohorts/[id]/groups/page.tsx:237)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/groups (app/academics/cohorts/[id]/groups/page.tsx:237)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/groups/page.tsx:237` calls `POST /api/lab-management/groups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-943682ce54e685a2", "name": "Dangling fetch: DELETE /api/lab-management/groups/${groupId} (app/academics/cohorts/[id]/groups/page.tsx:259)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/groups/${groupId} (app/academics/cohorts/[id]/groups/page.tsx:259)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/groups/page.tsx:259` calls `DELETE /api/lab-management/groups/${groupId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-97c76252371eb9b6", "name": "Dangling fetch: PUT /api/lab-management/groups/${groupId} (app/academics/cohorts/[id]/groups/page.tsx:281)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/groups/${groupId} (app/academics/cohorts/[id]/groups/page.tsx:281)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/groups/page.tsx:281` calls `PUT /api/lab-management/groups/${groupId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-053d65402d8f5c51", "name": "Dangling fetch: PUT /api/lab-management/groups/${group.id}/members (app/academics/cohorts/[id]/groups/page.tsx:309)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/groups/${group.id}/members (app/academics/cohorts/[id]/groups/page.tsx:309)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/groups/page.tsx:309` calls `PUT /api/lab-management/groups/${group.id}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups/<p>/members`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6419b06788524b76", "name": "Dangling fetch: POST /api/lab-management/groups/generate (app/academics/cohorts/[id]/groups/page.tsx:371)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/groups/generate (app/academics/cohorts/[id]/groups/page.tsx:371)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/groups/page.tsx:371` calls `POST /api/lab-management/groups/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups/generate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-24d1030351d31ab0", "name": "Dangling fetch: POST /api/lab-management/groups (app/academics/cohorts/[id]/groups/page.tsx:391)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/groups (app/academics/cohorts/[id]/groups/page.tsx:391)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/groups/page.tsx:391` calls `POST /api/lab-management/groups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/groups`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eea7f394643ae4a8", "name": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/academics/cohorts/[id]/intake/p", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/academics/cohorts/[id]/intake/page.tsx:108)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/intake/page.tsx:108` calls `GET /api/lab-management/students?cohortId=${cohortId}&status=active` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aca7c19520890f88", "name": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId} (app/academics/cohorts/[id]/intake/page.tsx:109)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId} (app/academics/cohorts/[id]/intake/page.tsx:109)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/intake/page.tsx:109` calls `GET /api/lab-management/cohorts/${cohortId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e33f22cb8f412e73", "name": "Dangling fetch: PATCH /api/lab-management/students/${studentId} (app/academics/cohorts/[id]/intake/page.tsx:161)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/students/${studentId} (app/academics/cohorts/[id]/intake/page.tsx:161)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/intake/page.tsx:161` calls `PATCH /api/lab-management/students/${studentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-259d3cf84131be26", "name": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId}/completion (app/academics/cohorts/[id]/completion/page.tsx:2", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId}/completion (app/academics/cohorts/[id]/completion/page.tsx:236)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/completion/page.tsx:236` calls `GET /api/lab-management/cohorts/${cohortId}/completion` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts/<p>/completion`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ca43db393f500b98", "name": "Dangling fetch: GET /api/instructor/me (app/academics/cohorts/[id]/smc/page.tsx:141)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/academics/cohorts/[id]/smc/page.tsx:141)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/smc/page.tsx:141` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-47c3fe29c0991958", "name": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId}/calendar (app/academics/cohorts/[id]/calendar/page.tsx:295)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId}/calendar (app/academics/cohorts/[id]/calendar/page.tsx:295)"}, "fullDescription": {"text": "`app/academics/cohorts/[id]/calendar/page.tsx:295` calls `GET /api/lab-management/cohorts/${cohortId}/calendar` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts/<p>/calendar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-454e1968a0d7dae1", "name": "Dangling fetch: GET /api/instructor/me (app/cases/page.tsx:154)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/cases/page.tsx:154)"}, "fullDescription": {"text": "`app/cases/page.tsx:154` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2d7edb66b12d2be0", "name": "Dangling fetch: GET /api/cases?${params.toString()} (app/cases/page.tsx:195)", "shortDescription": {"text": "Dangling fetch: GET /api/cases?${params.toString()} (app/cases/page.tsx:195)"}, "fullDescription": {"text": "`app/cases/page.tsx:195` calls `GET /api/cases?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cases`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f774632b392fc661", "name": "Dangling fetch: POST /api/cases/${caseId}/duplicate (app/cases/page.tsx:221)", "shortDescription": {"text": "Dangling fetch: POST /api/cases/${caseId}/duplicate (app/cases/page.tsx:221)"}, "fullDescription": {"text": "`app/cases/page.tsx:221` calls `POST /api/cases/${caseId}/duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cases/<p>/duplicate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1be25937859e01a9", "name": "Dangling fetch: POST /api/cases/import (app/cases/page.tsx:248)", "shortDescription": {"text": "Dangling fetch: POST /api/cases/import (app/cases/page.tsx:248)"}, "fullDescription": {"text": "`app/cases/page.tsx:248` calls `POST /api/cases/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cases/import`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2ef6c21ea8f1e980", "name": "Dangling fetch: GET /api/cases/${caseId} (app/cases/[id]/page.tsx:77)", "shortDescription": {"text": "Dangling fetch: GET /api/cases/${caseId} (app/cases/[id]/page.tsx:77)"}, "fullDescription": {"text": "`app/cases/[id]/page.tsx:77` calls `GET /api/cases/${caseId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cases/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-23a48b3de80ee3fe", "name": "Dangling fetch: GET /api/cases/${caseId}/practice/history (app/cases/[id]/page.tsx:104)", "shortDescription": {"text": "Dangling fetch: GET /api/cases/${caseId}/practice/history (app/cases/[id]/page.tsx:104)"}, "fullDescription": {"text": "`app/cases/[id]/page.tsx:104` calls `GET /api/cases/${caseId}/practice/history` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cases/<p>/practice/history`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-775c743c7413e42b", "name": "Dangling fetch: POST /api/cases (app/cases/[id]/page.tsx:124)", "shortDescription": {"text": "Dangling fetch: POST /api/cases (app/cases/[id]/page.tsx:124)"}, "fullDescription": {"text": "`app/cases/[id]/page.tsx:124` calls `POST /api/cases` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cases`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-95fba80b61ebe60c", "name": "Dangling fetch: POST /api/cases/${caseId}/practice/start (app/cases/[id]/practice/page.tsx:193)", "shortDescription": {"text": "Dangling fetch: POST /api/cases/${caseId}/practice/start (app/cases/[id]/practice/page.tsx:193)"}, "fullDescription": {"text": "`app/cases/[id]/practice/page.tsx:193` calls `POST /api/cases/${caseId}/practice/start` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cases/<p>/practice/start`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9a3d7aa91761f3ba", "name": "Dangling fetch: PUT /api/cases/${caseId}/practice/respond (app/cases/[id]/practice/page.tsx:276)", "shortDescription": {"text": "Dangling fetch: PUT /api/cases/${caseId}/practice/respond (app/cases/[id]/practice/page.tsx:276)"}, "fullDescription": {"text": "`app/cases/[id]/practice/page.tsx:276` calls `PUT /api/cases/${caseId}/practice/respond` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cases/<p>/practice/respond`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b3e0206acfe634a2", "name": "Dangling fetch: POST /api/cases/${caseId}/practice/complete (app/cases/[id]/practice/page.tsx:337)", "shortDescription": {"text": "Dangling fetch: POST /api/cases/${caseId}/practice/complete (app/cases/[id]/practice/page.tsx:337)"}, "fullDescription": {"text": "`app/cases/[id]/practice/page.tsx:337` calls `POST /api/cases/${caseId}/practice/complete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cases/<p>/practice/complete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8af0d9db2d767031", "name": "Dangling fetch: GET /api/cases/${caseId} (app/cases/[id]/edit/page.tsx:33)", "shortDescription": {"text": "Dangling fetch: GET /api/cases/${caseId} (app/cases/[id]/edit/page.tsx:33)"}, "fullDescription": {"text": "`app/cases/[id]/edit/page.tsx:33` calls `GET /api/cases/${caseId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cases/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-342a8e085b8b40ca", "name": "Dangling fetch: GET /api/case-sessions/${code}/instructor (app/cases/session/[code]/instructor/page.tsx:143)", "shortDescription": {"text": "Dangling fetch: GET /api/case-sessions/${code}/instructor (app/cases/session/[code]/instructor/page.tsx:143)"}, "fullDescription": {"text": "`app/cases/session/[code]/instructor/page.tsx:143` calls `GET /api/case-sessions/${code}/instructor` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/case-sessions/<p>/instructor`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3b85725fc53aa4b1", "name": "Dangling fetch: PUT /api/case-sessions/${code}/instructor (app/cases/session/[code]/instructor/page.tsx:273)", "shortDescription": {"text": "Dangling fetch: PUT /api/case-sessions/${code}/instructor (app/cases/session/[code]/instructor/page.tsx:273)"}, "fullDescription": {"text": "`app/cases/session/[code]/instructor/page.tsx:273` calls `PUT /api/case-sessions/${code}/instructor` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/case-sessions/<p>/instructor`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-869871f4474e58e3", "name": "Dangling fetch: GET /api/case-sessions/${code} (app/cases/session/[code]/student/page.tsx:237)", "shortDescription": {"text": "Dangling fetch: GET /api/case-sessions/${code} (app/cases/session/[code]/student/page.tsx:237)"}, "fullDescription": {"text": "`app/cases/session/[code]/student/page.tsx:237` calls `GET /api/case-sessions/${code}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/case-sessions/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-70721a00fed2e419", "name": "Dangling fetch: POST /api/case-sessions/${code}/respond (app/cases/session/[code]/student/page.tsx:436)", "shortDescription": {"text": "Dangling fetch: POST /api/case-sessions/${code}/respond (app/cases/session/[code]/student/page.tsx:436)"}, "fullDescription": {"text": "`app/cases/session/[code]/student/page.tsx:436` calls `POST /api/case-sessions/${code}/respond` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/case-sessions/<p>/respond`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d709d3bc790b45a8", "name": "Dangling fetch: POST /api/case-sessions/${code}/respond (app/cases/session/[code]/student/page.tsx:532)", "shortDescription": {"text": "Dangling fetch: POST /api/case-sessions/${code}/respond (app/cases/session/[code]/student/page.tsx:532)"}, "fullDescription": {"text": "`app/cases/session/[code]/student/page.tsx:532` calls `POST /api/case-sessions/${code}/respond` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/case-sessions/<p>/respond`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f6d53a7f20c45458", "name": "Dangling fetch: GET /api/case-sessions/${code} (app/cases/session/[code]/tv/page.tsx:137)", "shortDescription": {"text": "Dangling fetch: GET /api/case-sessions/${code} (app/cases/session/[code]/tv/page.tsx:137)"}, "fullDescription": {"text": "`app/cases/session/[code]/tv/page.tsx:137` calls `GET /api/case-sessions/${code}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/case-sessions/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cc2660c493e9b5d9", "name": "Dangling fetch: GET /api/cases/${caseInfo.id} (app/cases/session/[code]/tv/page.tsx:175)", "shortDescription": {"text": "Dangling fetch: GET /api/cases/${caseInfo.id} (app/cases/session/[code]/tv/page.tsx:175)"}, "fullDescription": {"text": "`app/cases/session/[code]/tv/page.tsx:175` calls `GET /api/cases/${caseInfo.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cases/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-784d4fdf3a04eff5", "name": "Dangling fetch: GET /api/auth/session (app/cases/session/[code]/join/page.tsx:45)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/session (app/cases/session/[code]/join/page.tsx:45)"}, "fullDescription": {"text": "`app/cases/session/[code]/join/page.tsx:45` calls `GET /api/auth/session` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/session`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9eb929a661a09d77", "name": "Dangling fetch: POST /api/case-sessions/${sessionCode}/join (app/cases/session/[code]/join/page.tsx:106)", "shortDescription": {"text": "Dangling fetch: POST /api/case-sessions/${sessionCode}/join (app/cases/session/[code]/join/page.tsx:106)"}, "fullDescription": {"text": "`app/cases/session/[code]/join/page.tsx:106` calls `POST /api/case-sessions/${sessionCode}/join` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/case-sessions/<p>/join`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d0dc5f61e9a865c7", "name": "Dangling fetch: GET /api/instructor/me (app/cases/leaderboard/page.tsx:74)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/cases/leaderboard/page.tsx:74)"}, "fullDescription": {"text": "`app/cases/leaderboard/page.tsx:74` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b01b41c531bc62e7", "name": "Dangling fetch: GET /api/admin/database-tools/cohorts (app/cases/leaderboard/page.tsx:98)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/database-tools/cohorts (app/cases/leaderboard/page.tsx:98)"}, "fullDescription": {"text": "`app/cases/leaderboard/page.tsx:98` calls `GET /api/admin/database-tools/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/database-tools/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-81c433500f9a30e9", "name": "Dangling fetch: GET /api/student/me (app/cases/leaderboard/page.tsx:112)", "shortDescription": {"text": "Dangling fetch: GET /api/student/me (app/cases/leaderboard/page.tsx:112)"}, "fullDescription": {"text": "`app/cases/leaderboard/page.tsx:112` calls `GET /api/student/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/student/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e7586111178eca91", "name": "Dangling fetch: GET /api/cases/leaderboard/${cohortId}?${params.toString()} (app/cases/leaderboard/page.tsx:145)", "shortDescription": {"text": "Dangling fetch: GET /api/cases/leaderboard/${cohortId}?${params.toString()} (app/cases/leaderboard/page.tsx:145)"}, "fullDescription": {"text": "`app/cases/leaderboard/page.tsx:145` calls `GET /api/cases/leaderboard/${cohortId}?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cases/leaderboard/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-17e8c2f4403f848c", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/layout.tsx:35)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/layout.tsx:35)"}, "fullDescription": {"text": "`app/clinical/layout.tsx:35` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3ba552c80f7d47bb", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/page.tsx:82)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/page.tsx:82)"}, "fullDescription": {"text": "`app/clinical/page.tsx:82` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d2cef87ed41e4e2f", "name": "Dangling fetch: GET /api/clinical/preceptors?activeOnly=true (app/clinical/page.tsx:96)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/preceptors?activeOnly=true (app/clinical/page.tsx:96)"}, "fullDescription": {"text": "`app/clinical/page.tsx:96` calls `GET /api/clinical/preceptors?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/preceptors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e2c9806a23092650", "name": "Dangling fetch: GET /api/clinical/agencies?type=hospital (app/clinical/page.tsx:97)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/agencies?type=hospital (app/clinical/page.tsx:97)"}, "fullDescription": {"text": "`app/clinical/page.tsx:97` calls `GET /api/clinical/agencies?type=hospital` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/agencies`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-947ac3575ccc9c5f", "name": "Dangling fetch: GET /api/clinical/agencies?type=ems (app/clinical/page.tsx:98)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/agencies?type=ems (app/clinical/page.tsx:98)"}, "fullDescription": {"text": "`app/clinical/page.tsx:98` calls `GET /api/clinical/agencies?type=ems` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/agencies`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-03a289ed29a06b76", "name": "Dangling fetch: GET /api/clinical/internships (app/clinical/page.tsx:99)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/internships (app/clinical/page.tsx:99)"}, "fullDescription": {"text": "`app/clinical/page.tsx:99` calls `GET /api/clinical/internships` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b5324477a077bd1c", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/aemt-tracking/page.tsx:93)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/aemt-tracking/page.tsx:93)"}, "fullDescription": {"text": "`app/clinical/aemt-tracking/page.tsx:93` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-008af78b0ed282da", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/aemt-tracking/page.tsx:104)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/aemt-tracking/page.tsx:104)"}, "fullDescription": {"text": "`app/clinical/aemt-tracking/page.tsx:104` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b0be9e8df6268005", "name": "Dangling fetch: GET /api/lab-management/students?cohortId=${selectedCohort}&status=active (app/clinical/aemt-tracking/pa", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${selectedCohort}&status=active (app/clinical/aemt-tracking/page.tsx:126)"}, "fullDescription": {"text": "`app/clinical/aemt-tracking/page.tsx:126` calls `GET /api/lab-management/students?cohortId=${selectedCohort}&status=active` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8dcdc9b7544ad25c", "name": "Dangling fetch: GET /api/clinical/aemt-tracking?cohortId=${selectedCohort} (app/clinical/aemt-tracking/page.tsx:127)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/aemt-tracking?cohortId=${selectedCohort} (app/clinical/aemt-tracking/page.tsx:127)"}, "fullDescription": {"text": "`app/clinical/aemt-tracking/page.tsx:127` calls `GET /api/clinical/aemt-tracking?cohortId=${selectedCohort}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/aemt-tracking`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c546368375243964", "name": "Dangling fetch: POST /api/clinical/aemt-tracking (app/clinical/aemt-tracking/page.tsx:165)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/aemt-tracking (app/clinical/aemt-tracking/page.tsx:165)"}, "fullDescription": {"text": "`app/clinical/aemt-tracking/page.tsx:165` calls `POST /api/clinical/aemt-tracking` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/aemt-tracking`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-06aed322c6d22c24", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/internships/[id]/page.tsx:432)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/internships/[id]/page.tsx:432)"}, "fullDescription": {"text": "`app/clinical/internships/[id]/page.tsx:432` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3d8eb239f4b541a5", "name": "Dangling fetch: GET /api/clinical/internships/${internshipId} (app/clinical/internships/[id]/page.tsx:443)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId} (app/clinical/internships/[id]/page.tsx:443)"}, "fullDescription": {"text": "`app/clinical/internships/[id]/page.tsx:443` calls `GET /api/clinical/internships/${internshipId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ef256f4f058cc3c5", "name": "Dangling fetch: GET /api/clinical/preceptors?activeOnly=true (app/clinical/internships/[id]/page.tsx:444)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/preceptors?activeOnly=true (app/clinical/internships/[id]/page.tsx:444)"}, "fullDescription": {"text": "`app/clinical/internships/[id]/page.tsx:444` calls `GET /api/clinical/preceptors?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/preceptors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8c96c284d5cb11d9", "name": "Dangling fetch: GET /api/clinical/agencies (app/clinical/internships/[id]/page.tsx:445)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/agencies (app/clinical/internships/[id]/page.tsx:445)"}, "fullDescription": {"text": "`app/clinical/internships/[id]/page.tsx:445` calls `GET /api/clinical/agencies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/agencies`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c7258640c6884c4c", "name": "Dangling fetch: GET /api/clinical/internships/${internshipId}/preceptors (app/clinical/internships/[id]/page.tsx:446)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId}/preceptors (app/clinical/internships/[id]/page.tsx:446)"}, "fullDescription": {"text": "`app/clinical/internships/[id]/page.tsx:446` calls `GET /api/clinical/internships/${internshipId}/preceptors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>/preceptors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b81cf6170df6b250", "name": "Dangling fetch: GET /api/clinical/internships/${internshipId}/preceptors (app/clinical/internships/[id]/page.tsx:613)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId}/preceptors (app/clinical/internships/[id]/page.tsx:613)"}, "fullDescription": {"text": "`app/clinical/internships/[id]/page.tsx:613` calls `GET /api/clinical/internships/${internshipId}/preceptors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>/preceptors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b9cd7fd9a93c67de", "name": "Dangling fetch: PUT /api/clinical/internships/${internshipId} (app/clinical/internships/[id]/page.tsx:663)", "shortDescription": {"text": "Dangling fetch: PUT /api/clinical/internships/${internshipId} (app/clinical/internships/[id]/page.tsx:663)"}, "fullDescription": {"text": "`app/clinical/internships/[id]/page.tsx:663` calls `PUT /api/clinical/internships/${internshipId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-13d83977d19fde56", "name": "Dangling fetch: POST /api/clinical/internships/${internshipId}/notify-nremt (app/clinical/internships/[id]/page.tsx:772)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/internships/${internshipId}/notify-nremt (app/clinical/internships/[id]/page.tsx:772)"}, "fullDescription": {"text": "`app/clinical/internships/[id]/page.tsx:772` calls `POST /api/clinical/internships/${internshipId}/notify-nremt` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>/notify-nremt`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b1a8f98edfe1fa99", "name": "Dangling fetch: POST /api/clinical/preceptors (app/clinical/internships/[id]/page.tsx:827)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/preceptors (app/clinical/internships/[id]/page.tsx:827)"}, "fullDescription": {"text": "`app/clinical/internships/[id]/page.tsx:827` calls `POST /api/clinical/preceptors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/preceptors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5844997fe33f3bbf", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/internships/all/page.tsx:304)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/internships/all/page.tsx:304)"}, "fullDescription": {"text": "`app/clinical/internships/all/page.tsx:304` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a29a1978704911bd", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/internships/all/page.tsx:312)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/internships/all/page.tsx:312)"}, "fullDescription": {"text": "`app/clinical/internships/all/page.tsx:312` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a6f974f4c44519f6", "name": "Dangling fetch: GET /api/clinical/agencies?type=ems (app/clinical/internships/all/page.tsx:313)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/agencies?type=ems (app/clinical/internships/all/page.tsx:313)"}, "fullDescription": {"text": "`app/clinical/internships/all/page.tsx:313` calls `GET /api/clinical/agencies?type=ems` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/agencies`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-58fa840d0f204228", "name": "Dangling fetch: GET /api/clinical/preceptors?activeOnly=true (app/clinical/internships/all/page.tsx:314)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/preceptors?activeOnly=true (app/clinical/internships/all/page.tsx:314)"}, "fullDescription": {"text": "`app/clinical/internships/all/page.tsx:314` calls `GET /api/clinical/preceptors?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/preceptors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5669cc8226290843", "name": "Dangling fetch: GET /api/clinical/internships/${i.id}/closeout/checklist (app/clinical/internships/all/page.tsx:376)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/internships/${i.id}/closeout/checklist (app/clinical/internships/all/page.tsx:376)"}, "fullDescription": {"text": "`app/clinical/internships/all/page.tsx:376` calls `GET /api/clinical/internships/${i.id}/closeout/checklist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>/closeout/checklist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c925492bcfa26412", "name": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/clinical/internships/all/page.t", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/clinical/internships/all/page.tsx:392)"}, "fullDescription": {"text": "`app/clinical/internships/all/page.tsx:392` calls `GET /api/lab-management/students?cohortId=${cohortId}&status=active` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-116ff6f58fbfa8da", "name": "Dangling fetch: POST /api/clinical/agencies (app/clinical/internships/all/page.tsx:508)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/agencies (app/clinical/internships/all/page.tsx:508)"}, "fullDescription": {"text": "`app/clinical/internships/all/page.tsx:508` calls `POST /api/clinical/agencies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/agencies`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6569629831178b6d", "name": "Dangling fetch: POST /api/clinical/preceptors (app/clinical/internships/all/page.tsx:538)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/preceptors (app/clinical/internships/all/page.tsx:538)"}, "fullDescription": {"text": "`app/clinical/internships/all/page.tsx:538` calls `POST /api/clinical/preceptors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/preceptors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ee26c1e7bc650ab5", "name": "Dangling fetch: PUT /api/clinical/internships/${editingInternship.id} (app/clinical/internships/all/page.tsx:578)", "shortDescription": {"text": "Dangling fetch: PUT /api/clinical/internships/${editingInternship.id} (app/clinical/internships/all/page.tsx:578)"}, "fullDescription": {"text": "`app/clinical/internships/all/page.tsx:578` calls `PUT /api/clinical/internships/${editingInternship.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0c9e5e99fe1d4b8b", "name": "Dangling fetch: POST /api/clinical/internships (app/clinical/internships/all/page.tsx:585)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/internships (app/clinical/internships/all/page.tsx:585)"}, "fullDescription": {"text": "`app/clinical/internships/all/page.tsx:585` calls `POST /api/clinical/internships` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2e80810aaa5b185f", "name": "Dangling fetch: PUT /api/clinical/internships/${internshipId} (app/clinical/internships/all/page.tsx:615)", "shortDescription": {"text": "Dangling fetch: PUT /api/clinical/internships/${internshipId} (app/clinical/internships/all/page.tsx:615)"}, "fullDescription": {"text": "`app/clinical/internships/all/page.tsx:615` calls `PUT /api/clinical/internships/${internshipId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bb1a0ead94342edc", "name": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId} (app/clinical/internships/cohort/[id]/page.tsx:351)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId} (app/clinical/internships/cohort/[id]/page.tsx:351)"}, "fullDescription": {"text": "`app/clinical/internships/cohort/[id]/page.tsx:351` calls `GET /api/lab-management/cohorts/${cohortId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-29bbc6a514d251b5", "name": "Dangling fetch: PATCH /api/clinical/capacity (app/clinical/capacity/page.tsx:245)", "shortDescription": {"text": "Dangling fetch: PATCH /api/clinical/capacity (app/clinical/capacity/page.tsx:245)"}, "fullDescription": {"text": "`app/clinical/capacity/page.tsx:245` calls `PATCH /api/clinical/capacity` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/capacity`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-453b14029d4713ae", "name": "Dangling fetch: GET /api/clinical/capacity?${params.toString()} (app/clinical/capacity/page.tsx:410)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/capacity?${params.toString()} (app/clinical/capacity/page.tsx:410)"}, "fullDescription": {"text": "`app/clinical/capacity/page.tsx:410` calls `GET /api/clinical/capacity?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/capacity`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-80b1f7c4a0ae3440", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/capacity/page.tsx:428)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/capacity/page.tsx:428)"}, "fullDescription": {"text": "`app/clinical/capacity/page.tsx:428` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a71decbcd9a48f9d", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/ride-alongs/page.tsx:56)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/ride-alongs/page.tsx:56)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/page.tsx:56` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-29e9c44dcc6b31a4", "name": "Dangling fetch: GET /api/clinical/ride-alongs (app/clinical/ride-alongs/page.tsx:68)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/ride-alongs (app/clinical/ride-alongs/page.tsx:68)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/page.tsx:68` calls `GET /api/clinical/ride-alongs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/ride-alongs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ea37fd1f9f056dc4", "name": "Dangling fetch: GET /api/clinical/ride-alongs/availability (app/clinical/ride-alongs/page.tsx:69)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/ride-alongs/availability (app/clinical/ride-alongs/page.tsx:69)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/page.tsx:69` calls `GET /api/clinical/ride-alongs/availability` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/ride-alongs/availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-34218432194b151a", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/ride-alongs/shifts/page.tsx:137)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/ride-alongs/shifts/page.tsx:137)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/shifts/page.tsx:137` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d21306a223540cdd", "name": "Dangling fetch: GET /api/clinical/ride-alongs (app/clinical/ride-alongs/shifts/page.tsx:145)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/ride-alongs (app/clinical/ride-alongs/shifts/page.tsx:145)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/shifts/page.tsx:145` calls `GET /api/clinical/ride-alongs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/ride-alongs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c10cfa781729353f", "name": "Dangling fetch: GET /api/clinical/ride-alongs/templates (app/clinical/ride-alongs/shifts/page.tsx:146)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/ride-alongs/templates (app/clinical/ride-alongs/shifts/page.tsx:146)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/shifts/page.tsx:146` calls `GET /api/clinical/ride-alongs/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/ride-alongs/templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-33cb6f1d22f6b365", "name": "Dangling fetch: GET /api/clinical/agencies?type=ems (app/clinical/ride-alongs/shifts/page.tsx:147)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/agencies?type=ems (app/clinical/ride-alongs/shifts/page.tsx:147)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/shifts/page.tsx:147` calls `GET /api/clinical/agencies?type=ems` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/agencies`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6383d02f31003ba3", "name": "Dangling fetch: GET /api/lab-management/cohorts (app/clinical/ride-alongs/shifts/page.tsx:148)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/clinical/ride-alongs/shifts/page.tsx:148)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/shifts/page.tsx:148` calls `GET /api/lab-management/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-279323d20a5a8867", "name": "Dangling fetch: GET /api/clinical/ride-alongs?${params.toString()} (app/clinical/ride-alongs/shifts/page.tsx:174)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/ride-alongs?${params.toString()} (app/clinical/ride-alongs/shifts/page.tsx:174)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/shifts/page.tsx:174` calls `GET /api/clinical/ride-alongs?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/ride-alongs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5439dce1f25a9b3a", "name": "Dangling fetch: GET /api/students?cohortId=${cohortId} (app/clinical/ride-alongs/shifts/page.tsx:188)", "shortDescription": {"text": "Dangling fetch: GET /api/students?cohortId=${cohortId} (app/clinical/ride-alongs/shifts/page.tsx:188)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/shifts/page.tsx:188` calls `GET /api/students?cohortId=${cohortId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-43083ee7b27433e9", "name": "Dangling fetch: POST /api/clinical/ride-alongs (app/clinical/ride-alongs/shifts/page.tsx:200)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/ride-alongs (app/clinical/ride-alongs/shifts/page.tsx:200)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/shifts/page.tsx:200` calls `POST /api/clinical/ride-alongs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/ride-alongs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3fe366b898aa0d36", "name": "Dangling fetch: POST /api/clinical/ride-alongs/templates/generate (app/clinical/ride-alongs/shifts/page.tsx:229)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/ride-alongs/templates/generate (app/clinical/ride-alongs/shifts/page.tsx:229)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/shifts/page.tsx:229` calls `POST /api/clinical/ride-alongs/templates/generate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/ride-alongs/templates/generate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-05e8e777095f396e", "name": "Dangling fetch: POST /api/clinical/ride-alongs/assignments (app/clinical/ride-alongs/shifts/page.tsx:255)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/ride-alongs/assignments (app/clinical/ride-alongs/shifts/page.tsx:255)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/shifts/page.tsx:255` calls `POST /api/clinical/ride-alongs/assignments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/ride-alongs/assignments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cbb731ddf7a19657", "name": "Dangling fetch: POST /api/clinical/ride-alongs/auto-assign (app/clinical/ride-alongs/shifts/page.tsx:276)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/ride-alongs/auto-assign (app/clinical/ride-alongs/shifts/page.tsx:276)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/shifts/page.tsx:276` calls `POST /api/clinical/ride-alongs/auto-assign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/ride-alongs/auto-assign`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-12c34abf908f4a26", "name": "Dangling fetch: POST /api/clinical/ride-alongs/auto-assign (app/clinical/ride-alongs/shifts/page.tsx:295)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/ride-alongs/auto-assign (app/clinical/ride-alongs/shifts/page.tsx:295)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/shifts/page.tsx:295` calls `POST /api/clinical/ride-alongs/auto-assign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/ride-alongs/auto-assign`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d01721ab1426b59c", "name": "Dangling fetch: PUT /api/clinical/ride-alongs/${shiftId} (app/clinical/ride-alongs/shifts/page.tsx:316)", "shortDescription": {"text": "Dangling fetch: PUT /api/clinical/ride-alongs/${shiftId} (app/clinical/ride-alongs/shifts/page.tsx:316)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/shifts/page.tsx:316` calls `PUT /api/clinical/ride-alongs/${shiftId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/ride-alongs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b904ebbe5187ba31", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/ride-alongs/availability/page.tsx:110)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/ride-alongs/availability/page.tsx:110)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/availability/page.tsx:110` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7c29e70ea9281ffc", "name": "Dangling fetch: GET /api/lab-management/cohorts (app/clinical/ride-alongs/availability/page.tsx:118)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/clinical/ride-alongs/availability/page.tsx:118)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/availability/page.tsx:118` calls `GET /api/lab-management/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ffdef57de5ffaa3f", "name": "Dangling fetch: GET /api/clinical/ride-alongs/availability (app/clinical/ride-alongs/availability/page.tsx:119)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/ride-alongs/availability (app/clinical/ride-alongs/availability/page.tsx:119)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/availability/page.tsx:119` calls `GET /api/clinical/ride-alongs/availability` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/ride-alongs/availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ea23ce7a51e51f85", "name": "Dangling fetch: GET /api/clinical/ride-alongs/polls (app/clinical/ride-alongs/availability/page.tsx:120)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/ride-alongs/polls (app/clinical/ride-alongs/availability/page.tsx:120)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/availability/page.tsx:120` calls `GET /api/clinical/ride-alongs/polls` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/ride-alongs/polls`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6b88c212f93b09eb", "name": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=true (app/clinical/ride-alongs/availability/page.tsx:1", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=true (app/clinical/ride-alongs/availability/page.tsx:121)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/availability/page.tsx:121` calls `GET /api/scheduling/planner/semesters?active_only=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/semesters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0dade1303abd9f3c", "name": "Dangling fetch: GET /api/students?cohortId=${selectedCohort} (app/clinical/ride-alongs/availability/page.tsx:144)", "shortDescription": {"text": "Dangling fetch: GET /api/students?cohortId=${selectedCohort} (app/clinical/ride-alongs/availability/page.tsx:144)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/availability/page.tsx:144` calls `GET /api/students?cohortId=${selectedCohort}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-df34d9162a04f6de", "name": "Dangling fetch: GET /api/clinical/ride-alongs/availability?cohort_id=${selectedCohort} (app/clinical/ride-alongs/availab", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/ride-alongs/availability?cohort_id=${selectedCohort} (app/clinical/ride-alongs/availability/page.tsx:145)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/availability/page.tsx:145` calls `GET /api/clinical/ride-alongs/availability?cohort_id=${selectedCohort}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/ride-alongs/availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bbe26d23b1e613d2", "name": "Dangling fetch: POST /api/clinical/ride-alongs/polls (app/clinical/ride-alongs/availability/page.tsx:176)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/ride-alongs/polls (app/clinical/ride-alongs/availability/page.tsx:176)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/availability/page.tsx:176` calls `POST /api/clinical/ride-alongs/polls` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/ride-alongs/polls`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f4bf2989f8b0ffac", "name": "Dangling fetch: POST /api/clinical/ride-alongs/polls/${pollId}/send (app/clinical/ride-alongs/availability/page.tsx:212)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/ride-alongs/polls/${pollId}/send (app/clinical/ride-alongs/availability/page.tsx:212)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/availability/page.tsx:212` calls `POST /api/clinical/ride-alongs/polls/${pollId}/send` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/ride-alongs/polls/<p>/send`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6b832f35ef01d108", "name": "Dangling fetch: POST /api/clinical/ride-alongs/import (app/clinical/ride-alongs/import/page.tsx:108)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/ride-alongs/import (app/clinical/ride-alongs/import/page.tsx:108)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/import/page.tsx:108` calls `POST /api/clinical/ride-alongs/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/ride-alongs/import`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d7554c43cd52d00", "name": "Dangling fetch: POST /api/clinical/ride-alongs/import (app/clinical/ride-alongs/import/page.tsx:131)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/ride-alongs/import (app/clinical/ride-alongs/import/page.tsx:131)"}, "fullDescription": {"text": "`app/clinical/ride-alongs/import/page.tsx:131` calls `POST /api/clinical/ride-alongs/import` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/ride-alongs/import`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a9593468909851ca", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/agencies/page.tsx:89)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/agencies/page.tsx:89)"}, "fullDescription": {"text": "`app/clinical/agencies/page.tsx:89` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a19eeb3af71b6ca6", "name": "Dangling fetch: GET /api/clinical/agencies?${params.toString()} (app/clinical/agencies/page.tsx:103)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/agencies?${params.toString()} (app/clinical/agencies/page.tsx:103)"}, "fullDescription": {"text": "`app/clinical/agencies/page.tsx:103` calls `GET /api/clinical/agencies?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/agencies`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4486a0715d50eed6", "name": "Dangling fetch: DELETE /api/clinical/agencies/${id} (app/clinical/agencies/page.tsx:200)", "shortDescription": {"text": "Dangling fetch: DELETE /api/clinical/agencies/${id} (app/clinical/agencies/page.tsx:200)"}, "fullDescription": {"text": "`app/clinical/agencies/page.tsx:200` calls `DELETE /api/clinical/agencies/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/agencies/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83a040a5a06d2daf", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/rotation-scheduler/page.tsx:181)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/rotation-scheduler/page.tsx:181)"}, "fullDescription": {"text": "`app/clinical/rotation-scheduler/page.tsx:181` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-77db370d5038643c", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/rotation-scheduler/page.tsx:213)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/rotation-scheduler/page.tsx:213)"}, "fullDescription": {"text": "`app/clinical/rotation-scheduler/page.tsx:213` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-256593b94aa636d5", "name": "Dangling fetch: GET /api/clinical/sites?activeOnly=true (app/clinical/rotation-scheduler/page.tsx:214)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/sites?activeOnly=true (app/clinical/rotation-scheduler/page.tsx:214)"}, "fullDescription": {"text": "`app/clinical/rotation-scheduler/page.tsx:214` calls `GET /api/clinical/sites?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/sites`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5a04cf62b951e2f5", "name": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active&limit=100 (app/clinical/rotation-sch", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active&limit=100 (app/clinical/rotation-scheduler/page.tsx:240)"}, "fullDescription": {"text": "`app/clinical/rotation-scheduler/page.tsx:240` calls `GET /api/lab-management/students?cohortId=${cohortId}&status=active&limit=100` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-817ce8fad055741c", "name": "Dangling fetch: POST /api/clinical/rotations (app/clinical/rotation-scheduler/page.tsx:352)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/rotations (app/clinical/rotation-scheduler/page.tsx:352)"}, "fullDescription": {"text": "`app/clinical/rotation-scheduler/page.tsx:352` calls `POST /api/clinical/rotations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/rotations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b460a6492023bf75", "name": "Dangling fetch: DELETE /api/clinical/rotations/${rotationId} (app/clinical/rotation-scheduler/page.tsx:407)", "shortDescription": {"text": "Dangling fetch: DELETE /api/clinical/rotations/${rotationId} (app/clinical/rotation-scheduler/page.tsx:407)"}, "fullDescription": {"text": "`app/clinical/rotation-scheduler/page.tsx:407` calls `DELETE /api/clinical/rotations/${rotationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/rotations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-27f27f4f0ea4f659", "name": "Dangling fetch: POST /api/clinical/rotations (app/clinical/rotation-scheduler/page.tsx:470)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/rotations (app/clinical/rotation-scheduler/page.tsx:470)"}, "fullDescription": {"text": "`app/clinical/rotation-scheduler/page.tsx:470` calls `POST /api/clinical/rotations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/rotations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ad879df89adc8a3b", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/site-visits/page.tsx:209)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/site-visits/page.tsx:209)"}, "fullDescription": {"text": "`app/clinical/site-visits/page.tsx:209` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9d258bb30f4354ba", "name": "Dangling fetch: GET /api/clinical/sites?includeDepartments=true&includeAgencies=true (app/clinical/site-visits/page.tsx:", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/sites?includeDepartments=true&includeAgencies=true (app/clinical/site-visits/page.tsx:228)"}, "fullDescription": {"text": "`app/clinical/site-visits/page.tsx:228` calls `GET /api/clinical/sites?includeDepartments=true&includeAgencies=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/sites`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-58f68dec986b1edb", "name": "Dangling fetch: GET /api/lab-management/cohorts (app/clinical/site-visits/page.tsx:229)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/clinical/site-visits/page.tsx:229)"}, "fullDescription": {"text": "`app/clinical/site-visits/page.tsx:229` calls `GET /api/lab-management/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c250cc5dd3f8ece7", "name": "Dangling fetch: GET /api/lab-management/instructors (app/clinical/site-visits/page.tsx:230)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/instructors (app/clinical/site-visits/page.tsx:230)"}, "fullDescription": {"text": "`app/clinical/site-visits/page.tsx:230` calls `GET /api/lab-management/instructors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/instructors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f174bd8fbc9ddc00", "name": "Dangling fetch: GET /api/clinical/site-visits?${params.toString()} (app/clinical/site-visits/page.tsx:266)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/site-visits?${params.toString()} (app/clinical/site-visits/page.tsx:266)"}, "fullDescription": {"text": "`app/clinical/site-visits/page.tsx:266` calls `GET /api/clinical/site-visits?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/site-visits`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bd79154a00f103d9", "name": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/clinical/site-visits/page.tsx:2", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/clinical/site-visits/page.tsx:282)"}, "fullDescription": {"text": "`app/clinical/site-visits/page.tsx:282` calls `GET /api/lab-management/students?cohortId=${cohortId}&status=active` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3125716840e32256", "name": "Dangling fetch: DELETE /api/clinical/site-visits/${id} (app/clinical/site-visits/page.tsx:382)", "shortDescription": {"text": "Dangling fetch: DELETE /api/clinical/site-visits/${id} (app/clinical/site-visits/page.tsx:382)"}, "fullDescription": {"text": "`app/clinical/site-visits/page.tsx:382` calls `DELETE /api/clinical/site-visits/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/site-visits/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-161088b5773544f3", "name": "Dangling fetch: GET /api/clinical/affiliations?${params.toString()} (app/clinical/affiliations/page.tsx:165)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/affiliations?${params.toString()} (app/clinical/affiliations/page.tsx:165)"}, "fullDescription": {"text": "`app/clinical/affiliations/page.tsx:165` calls `GET /api/clinical/affiliations?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/affiliations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e5232d2a443ae0b", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/affiliations/page.tsx:180)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/affiliations/page.tsx:180)"}, "fullDescription": {"text": "`app/clinical/affiliations/page.tsx:180` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e19895e2e0cec89f", "name": "Dangling fetch: GET /api/clinical/affiliations (app/clinical/affiliations/page.tsx:290)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/affiliations (app/clinical/affiliations/page.tsx:290)"}, "fullDescription": {"text": "`app/clinical/affiliations/page.tsx:290` calls `GET /api/clinical/affiliations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/affiliations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f685ba7c7ac6b2fa", "name": "Dangling fetch: DELETE /api/clinical/affiliations?id=${id} (app/clinical/affiliations/page.tsx:312)", "shortDescription": {"text": "Dangling fetch: DELETE /api/clinical/affiliations?id=${id} (app/clinical/affiliations/page.tsx:312)"}, "fullDescription": {"text": "`app/clinical/affiliations/page.tsx:312` calls `DELETE /api/clinical/affiliations?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/affiliations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-90cbdf3fdc9d8387", "name": "Dangling fetch: PUT /api/clinical/affiliations (app/clinical/affiliations/page.tsx:328)", "shortDescription": {"text": "Dangling fetch: PUT /api/clinical/affiliations (app/clinical/affiliations/page.tsx:328)"}, "fullDescription": {"text": "`app/clinical/affiliations/page.tsx:328` calls `PUT /api/clinical/affiliations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/affiliations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b4ae12a13b4e093e", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/site-visit-settings/page.tsx:62)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/site-visit-settings/page.tsx:62)"}, "fullDescription": {"text": "`app/clinical/site-visit-settings/page.tsx:62` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-665cfcdeda5cf7e8", "name": "Dangling fetch: GET /api/clinical/sites?activeOnly=false (app/clinical/site-visit-settings/page.tsx:73)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/sites?activeOnly=false (app/clinical/site-visit-settings/page.tsx:73)"}, "fullDescription": {"text": "`app/clinical/site-visit-settings/page.tsx:73` calls `GET /api/clinical/sites?activeOnly=false` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/sites`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0f0eb827fab0d9cd", "name": "Dangling fetch: PUT /api/clinical/sites/${siteId} (app/clinical/site-visit-settings/page.tsx:140)", "shortDescription": {"text": "Dangling fetch: PUT /api/clinical/sites/${siteId} (app/clinical/site-visit-settings/page.tsx:140)"}, "fullDescription": {"text": "`app/clinical/site-visit-settings/page.tsx:140` calls `PUT /api/clinical/sites/${siteId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/sites/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f4764a144474a23f", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/preceptors/page.tsx:190)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/preceptors/page.tsx:190)"}, "fullDescription": {"text": "`app/clinical/preceptors/page.tsx:190` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-852d2fcd7a739e6e", "name": "Dangling fetch: GET /api/clinical/agencies (app/clinical/preceptors/page.tsx:206)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/agencies (app/clinical/preceptors/page.tsx:206)"}, "fullDescription": {"text": "`app/clinical/preceptors/page.tsx:206` calls `GET /api/clinical/agencies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/agencies`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4d82eaea2cda5506", "name": "Dangling fetch: DELETE /api/clinical/preceptors/${preceptor.id} (app/clinical/preceptors/page.tsx:351)", "shortDescription": {"text": "Dangling fetch: DELETE /api/clinical/preceptors/${preceptor.id} (app/clinical/preceptors/page.tsx:351)"}, "fullDescription": {"text": "`app/clinical/preceptors/page.tsx:351` calls `DELETE /api/clinical/preceptors/${preceptor.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/preceptors/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eda9707e4ff74ad7", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/summative-evaluations/page.tsx:128)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/summative-evaluations/page.tsx:128)"}, "fullDescription": {"text": "`app/clinical/summative-evaluations/page.tsx:128` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0a4f5197eb234c65", "name": "Dangling fetch: GET /api/clinical/summative-evaluations (app/clinical/summative-evaluations/page.tsx:140)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/summative-evaluations (app/clinical/summative-evaluations/page.tsx:140)"}, "fullDescription": {"text": "`app/clinical/summative-evaluations/page.tsx:140` calls `GET /api/clinical/summative-evaluations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/summative-evaluations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fc1a53fe8be6c1ff", "name": "Dangling fetch: GET /api/clinical/summative-scenarios (app/clinical/summative-evaluations/page.tsx:141)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/summative-scenarios (app/clinical/summative-evaluations/page.tsx:141)"}, "fullDescription": {"text": "`app/clinical/summative-evaluations/page.tsx:141` calls `GET /api/clinical/summative-scenarios` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/summative-scenarios`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ca613e51a79501d", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/summative-evaluations/page.tsx:142)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/summative-evaluations/page.tsx:142)"}, "fullDescription": {"text": "`app/clinical/summative-evaluations/page.tsx:142` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4d001d8fc79b0a11", "name": "Dangling fetch: GET /api/students?cohortId=${cohortId} (app/clinical/summative-evaluations/page.tsx:167)", "shortDescription": {"text": "Dangling fetch: GET /api/students?cohortId=${cohortId} (app/clinical/summative-evaluations/page.tsx:167)"}, "fullDescription": {"text": "`app/clinical/summative-evaluations/page.tsx:167` calls `GET /api/students?cohortId=${cohortId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-559fe1393fd1dc0f", "name": "Dangling fetch: POST /api/clinical/summative-evaluations (app/clinical/summative-evaluations/page.tsx:202)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/summative-evaluations (app/clinical/summative-evaluations/page.tsx:202)"}, "fullDescription": {"text": "`app/clinical/summative-evaluations/page.tsx:202` calls `POST /api/clinical/summative-evaluations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/summative-evaluations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-145641eab3d05f9f", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/summative-evaluations/[id]/grade/page.tsx:288)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/summative-evaluations/[id]/grade/page.tsx:288)"}, "fullDescription": {"text": "`app/clinical/summative-evaluations/[id]/grade/page.tsx:288` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-344db8c48fd31252", "name": "Dangling fetch: GET /api/clinical/summative-evaluations/${evaluationId} (app/clinical/summative-evaluations/[id]/grade/p", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/summative-evaluations/${evaluationId} (app/clinical/summative-evaluations/[id]/grade/page.tsx:299)"}, "fullDescription": {"text": "`app/clinical/summative-evaluations/[id]/grade/page.tsx:299` calls `GET /api/clinical/summative-evaluations/${evaluationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/summative-evaluations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a4bf7fc2e4cd6e44", "name": "Dangling fetch: PATCH /api/clinical/summative-evaluations/${evaluationId}/scores (app/clinical/summative-evaluations/[id", "shortDescription": {"text": "Dangling fetch: PATCH /api/clinical/summative-evaluations/${evaluationId}/scores (app/clinical/summative-evaluations/[id]/grade/page.tsx:360)"}, "fullDescription": {"text": "`app/clinical/summative-evaluations/[id]/grade/page.tsx:360` calls `PATCH /api/clinical/summative-evaluations/${evaluationId}/scores` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/summative-evaluations/<p>/scores`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-90fad75c54e3a10e", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/compliance-tracker/page.tsx:199)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/compliance-tracker/page.tsx:199)"}, "fullDescription": {"text": "`app/clinical/compliance-tracker/page.tsx:199` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-68fbc44ec79a6991", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/compliance-tracker/page.tsx:209)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/compliance-tracker/page.tsx:209)"}, "fullDescription": {"text": "`app/clinical/compliance-tracker/page.tsx:209` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f4437750ec6d33a2", "name": "Dangling fetch: GET /api/compliance?cohort_id=${selectedCohort} (app/clinical/compliance-tracker/page.tsx:226)", "shortDescription": {"text": "Dangling fetch: GET /api/compliance?cohort_id=${selectedCohort} (app/clinical/compliance-tracker/page.tsx:226)"}, "fullDescription": {"text": "`app/clinical/compliance-tracker/page.tsx:226` calls `GET /api/compliance?cohort_id=${selectedCohort}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/compliance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1263b4d4b5a8fdc2", "name": "Dangling fetch: POST /api/compliance (app/clinical/compliance-tracker/page.tsx:253)", "shortDescription": {"text": "Dangling fetch: POST /api/compliance (app/clinical/compliance-tracker/page.tsx:253)"}, "fullDescription": {"text": "`app/clinical/compliance-tracker/page.tsx:253` calls `POST /api/compliance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/compliance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ff7c4e7cd3f4fe5", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/overview/page.tsx:92)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/overview/page.tsx:92)"}, "fullDescription": {"text": "`app/clinical/overview/page.tsx:92` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ae318b534afb77f9", "name": "Dangling fetch: GET /api/clinical/overview-all (app/clinical/overview/page.tsx:112)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/overview-all (app/clinical/overview/page.tsx:112)"}, "fullDescription": {"text": "`app/clinical/overview/page.tsx:112` calls `GET /api/clinical/overview-all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/overview-all`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7bc0c4b1ddfe1ead", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/compliance/page.tsx:91)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/compliance/page.tsx:91)"}, "fullDescription": {"text": "`app/clinical/compliance/page.tsx:91` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ba987f9a54adc1fd", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/compliance/page.tsx:101)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/compliance/page.tsx:101)"}, "fullDescription": {"text": "`app/clinical/compliance/page.tsx:101` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8024a4074f49b28c", "name": "Dangling fetch: GET /api/lab-management/students?cohortId=${selectedCohort}&status=active (app/clinical/compliance/page.", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${selectedCohort}&status=active (app/clinical/compliance/page.tsx:119)"}, "fullDescription": {"text": "`app/clinical/compliance/page.tsx:119` calls `GET /api/lab-management/students?cohortId=${selectedCohort}&status=active` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fbccdebde99a7587", "name": "Dangling fetch: GET /api/clinical/compliance?cohortId=${selectedCohort} (app/clinical/compliance/page.tsx:120)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/compliance?cohortId=${selectedCohort} (app/clinical/compliance/page.tsx:120)"}, "fullDescription": {"text": "`app/clinical/compliance/page.tsx:120` calls `GET /api/clinical/compliance?cohortId=${selectedCohort}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/compliance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-270dbb54c96c736a", "name": "Dangling fetch: POST /api/clinical/compliance (app/clinical/compliance/page.tsx:154)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/compliance (app/clinical/compliance/page.tsx:154)"}, "fullDescription": {"text": "`app/clinical/compliance/page.tsx:154` calls `POST /api/clinical/compliance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/compliance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-deed7e05a5205d9c", "name": "Dangling fetch: POST /api/clinical/hours (app/clinical/hours/page.tsx:483)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/hours (app/clinical/hours/page.tsx:483)"}, "fullDescription": {"text": "`app/clinical/hours/page.tsx:483` calls `POST /api/clinical/hours` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/hours`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2ccdfa49d5f87182", "name": "Dangling fetch: PATCH /api/lab-management/students/${row.matchedStudent.id} (app/clinical/hours/page.tsx:876)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/students/${row.matchedStudent.id} (app/clinical/hours/page.tsx:876)"}, "fullDescription": {"text": "`app/clinical/hours/page.tsx:876` calls `PATCH /api/lab-management/students/${row.matchedStudent.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-631df3bdec797c78", "name": "Dangling fetch: POST /api/clinical/hours (app/clinical/hours/page.tsx:895)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/hours (app/clinical/hours/page.tsx:895)"}, "fullDescription": {"text": "`app/clinical/hours/page.tsx:895` calls `POST /api/clinical/hours` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/hours`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9bbbe5cff95047ca", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/mce/page.tsx:145)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/mce/page.tsx:145)"}, "fullDescription": {"text": "`app/clinical/mce/page.tsx:145` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a89e15655dab1eaf", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/mce/page.tsx:155)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/mce/page.tsx:155)"}, "fullDescription": {"text": "`app/clinical/mce/page.tsx:155` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-433118c8e01eec64", "name": "Dangling fetch: GET /api/clinical/mce?cohortId=${selectedCohort} (app/clinical/mce/page.tsx:171)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/mce?cohortId=${selectedCohort} (app/clinical/mce/page.tsx:171)"}, "fullDescription": {"text": "`app/clinical/mce/page.tsx:171` calls `GET /api/clinical/mce?cohortId=${selectedCohort}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/mce`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dc06e53ae7a7c791", "name": "Dangling fetch: POST /api/clinical/mce (app/clinical/mce/page.tsx:205)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/mce (app/clinical/mce/page.tsx:205)"}, "fullDescription": {"text": "`app/clinical/mce/page.tsx:205` calls `POST /api/clinical/mce` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/mce`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6cb6069165fbbb34", "name": "Dangling fetch: PATCH /api/clinical/mce (app/clinical/mce/page.tsx:235)", "shortDescription": {"text": "Dangling fetch: PATCH /api/clinical/mce (app/clinical/mce/page.tsx:235)"}, "fullDescription": {"text": "`app/clinical/mce/page.tsx:235` calls `PATCH /api/clinical/mce` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/mce`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-73ed51d2dcdffeab", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/emt-tracking/page.tsx:87)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/emt-tracking/page.tsx:87)"}, "fullDescription": {"text": "`app/clinical/emt-tracking/page.tsx:87` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-03b2b16916338dfb", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/emt-tracking/page.tsx:98)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/emt-tracking/page.tsx:98)"}, "fullDescription": {"text": "`app/clinical/emt-tracking/page.tsx:98` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-62d96f01c9bcba2e", "name": "Dangling fetch: GET /api/lab-management/students?cohortId=${selectedCohort}&status=active (app/clinical/emt-tracking/pag", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${selectedCohort}&status=active (app/clinical/emt-tracking/page.tsx:120)"}, "fullDescription": {"text": "`app/clinical/emt-tracking/page.tsx:120` calls `GET /api/lab-management/students?cohortId=${selectedCohort}&status=active` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2216942cb5ccf637", "name": "Dangling fetch: GET /api/clinical/emt-tracking?cohortId=${selectedCohort} (app/clinical/emt-tracking/page.tsx:121)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/emt-tracking?cohortId=${selectedCohort} (app/clinical/emt-tracking/page.tsx:121)"}, "fullDescription": {"text": "`app/clinical/emt-tracking/page.tsx:121` calls `GET /api/clinical/emt-tracking?cohortId=${selectedCohort}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/emt-tracking`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-680662f35f5459fc", "name": "Dangling fetch: POST /api/clinical/emt-tracking (app/clinical/emt-tracking/page.tsx:153)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/emt-tracking (app/clinical/emt-tracking/page.tsx:153)"}, "fullDescription": {"text": "`app/clinical/emt-tracking/page.tsx:153` calls `POST /api/clinical/emt-tracking` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/emt-tracking`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-96d4a7b60f14a059", "name": "Dangling fetch: GET /api/instructor/me (app/clinical/planning-calendar/page.tsx:148)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/planning-calendar/page.tsx:148)"}, "fullDescription": {"text": "`app/clinical/planning-calendar/page.tsx:148` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7d8143fa1b20dfde", "name": "Dangling fetch: GET /api/clinical/sites?activeOnly=true (app/clinical/planning-calendar/page.tsx:176)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/sites?activeOnly=true (app/clinical/planning-calendar/page.tsx:176)"}, "fullDescription": {"text": "`app/clinical/planning-calendar/page.tsx:176` calls `GET /api/clinical/sites?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/sites`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5ce2574e6fb985cd", "name": "Dangling fetch: GET /api/clinical/planning-calendar (app/clinical/planning-calendar/page.tsx:333)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/planning-calendar (app/clinical/planning-calendar/page.tsx:333)"}, "fullDescription": {"text": "`app/clinical/planning-calendar/page.tsx:333` calls `GET /api/clinical/planning-calendar` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/planning-calendar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-329a991945a9f7ab", "name": "Dangling fetch: DELETE /api/clinical/planning-calendar?id=${id} (app/clinical/planning-calendar/page.tsx:356)", "shortDescription": {"text": "Dangling fetch: DELETE /api/clinical/planning-calendar?id=${id} (app/clinical/planning-calendar/page.tsx:356)"}, "fullDescription": {"text": "`app/clinical/planning-calendar/page.tsx:356` calls `DELETE /api/clinical/planning-calendar?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/planning-calendar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-663150b5ca881f9b", "name": "Dangling fetch: GET /api/instructor/me (app/scheduler/page.tsx:38)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduler/page.tsx:38)"}, "fullDescription": {"text": "`app/scheduler/page.tsx:38` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-da1d9695feb63506", "name": "Dangling fetch: DELETE /api/polls?id=${pollId} (app/scheduler/page.tsx:83)", "shortDescription": {"text": "Dangling fetch: DELETE /api/polls?id=${pollId} (app/scheduler/page.tsx:83)"}, "fullDescription": {"text": "`app/scheduler/page.tsx:83` calls `DELETE /api/polls?id=${pollId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/polls`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2f6544dc674f60a3", "name": "Dangling fetch: POST /api/polls (app/scheduler/create/page.tsx:29)", "shortDescription": {"text": "Dangling fetch: POST /api/polls (app/scheduler/create/page.tsx:29)"}, "fullDescription": {"text": "`app/scheduler/create/page.tsx:29` calls `POST /api/polls` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/polls`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6dad619ee88593fc", "name": "Dangling fetch: GET /api/clinical/preceptor-eval/${token} (app/preceptor/evaluate/[token]/page.tsx:126)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/preceptor-eval/${token} (app/preceptor/evaluate/[token]/page.tsx:126)"}, "fullDescription": {"text": "`app/preceptor/evaluate/[token]/page.tsx:126` calls `GET /api/clinical/preceptor-eval/${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/preceptor-eval/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4aaa564722e5c12e", "name": "Dangling fetch: POST /api/clinical/preceptor-eval/${token} (app/preceptor/evaluate/[token]/page.tsx:170)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/preceptor-eval/${token} (app/preceptor/evaluate/[token]/page.tsx:170)"}, "fullDescription": {"text": "`app/preceptor/evaluate/[token]/page.tsx:170` calls `POST /api/clinical/preceptor-eval/${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/preceptor-eval/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c0a398c76e6202c", "name": "Dangling fetch: GET /api/instructor/me (hooks/useCurrentUser.ts:5)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (hooks/useCurrentUser.ts:5)"}, "fullDescription": {"text": "`hooks/useCurrentUser.ts:5` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7edee7f1c8ff49ea", "name": "Dangling fetch: GET /api/lab-management/students?${params} (hooks/useStudents.ts:32)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?${params} (hooks/useStudents.ts:32)"}, "fullDescription": {"text": "`hooks/useStudents.ts:32` calls `GET /api/lab-management/students?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-08a90f3c57d00518", "name": "Dangling fetch: GET /api/calendar/availability?${params} (hooks/useCalendarAvailability.ts:66)", "shortDescription": {"text": "Dangling fetch: GET /api/calendar/availability?${params} (hooks/useCalendarAvailability.ts:66)"}, "fullDescription": {"text": "`hooks/useCalendarAvailability.ts:66` calls `GET /api/calendar/availability?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-de46d5e0c0b7a1a0", "name": "Dangling fetch: GET /api/lab-management/lab-days?${params} (hooks/useLabDays.ts:75)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days?${params} (hooks/useLabDays.ts:75)"}, "fullDescription": {"text": "`hooks/useLabDays.ts:75` calls `GET /api/lab-management/lab-days?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a5fc0436eac82b48", "name": "Dangling fetch: GET /api/lab-management/cohorts?${params} (hooks/useCohorts.ts:29)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?${params} (hooks/useCohorts.ts:29)"}, "fullDescription": {"text": "`hooks/useCohorts.ts:29` calls `GET /api/lab-management/cohorts?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0074e42be01662f9", "name": "Dangling fetch: GET /api/lab-management/scenarios?${params} (hooks/useScenarios.ts:29)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/scenarios?${params} (hooks/useScenarios.ts:29)"}, "fullDescription": {"text": "`hooks/useScenarios.ts:29` calls `GET /api/lab-management/scenarios?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6eaf907629d7b93b", "name": "Dangling fetch: POST /api/lab-management/students/${studentId}/communications (components/StudentCommunications.tsx:198)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/students/${studentId}/communications (components/StudentCommunications.tsx:198)"}, "fullDescription": {"text": "`components/StudentCommunications.tsx:198` calls `POST /api/lab-management/students/${studentId}/communications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>/communications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2603afc6ed20d870", "name": "Dangling fetch: PATCH /api/lab-management/students/${studentId}/communications (components/StudentCommunications.tsx:234", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/students/${studentId}/communications (components/StudentCommunications.tsx:234)"}, "fullDescription": {"text": "`components/StudentCommunications.tsx:234` calls `PATCH /api/lab-management/students/${studentId}/communications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>/communications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-961d4b24b54cfd5d", "name": "Dangling fetch: PATCH /api/lab-management/students/${studentId}/communications (components/StudentCommunications.tsx:257", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/students/${studentId}/communications (components/StudentCommunications.tsx:257)"}, "fullDescription": {"text": "`components/StudentCommunications.tsx:257` calls `PATCH /api/lab-management/students/${studentId}/communications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>/communications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8f691de630abb471", "name": "Dangling fetch: GET /api/instructor/me (components/RolePreviewSelector.tsx:29)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (components/RolePreviewSelector.tsx:29)"}, "fullDescription": {"text": "`components/RolePreviewSelector.tsx:29` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b5a12d341553cc82", "name": "Dangling fetch: GET /api/lab-management/scenarios/${scenarioId}/versions (components/ScenarioVersionHistory.tsx:290)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/scenarios/${scenarioId}/versions (components/ScenarioVersionHistory.tsx:290)"}, "fullDescription": {"text": "`components/ScenarioVersionHistory.tsx:290` calls `GET /api/lab-management/scenarios/${scenarioId}/versions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios/<p>/versions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c0ba75553fdd620b", "name": "Dangling fetch: GET /api/lab-management/scenarios/${scenarioId} (components/ScenarioVersionHistory.tsx:315)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/scenarios/${scenarioId} (components/ScenarioVersionHistory.tsx:315)"}, "fullDescription": {"text": "`components/ScenarioVersionHistory.tsx:315` calls `GET /api/lab-management/scenarios/${scenarioId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-da42a8bb05777bb9", "name": "Dangling fetch: PUT /api/lab-management/scenarios/${scenarioId}/versions (components/ScenarioVersionHistory.tsx:332)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/scenarios/${scenarioId}/versions (components/ScenarioVersionHistory.tsx:332)"}, "fullDescription": {"text": "`components/ScenarioVersionHistory.tsx:332` calls `PUT /api/lab-management/scenarios/${scenarioId}/versions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios/<p>/versions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9214bdaf988a37bc", "name": "Dangling fetch: GET /api/lab-management/timer/ready?labDayId=${labDayId} (components/TimerBanner.tsx:140)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/timer/ready?labDayId=${labDayId} (components/TimerBanner.tsx:140)"}, "fullDescription": {"text": "`components/TimerBanner.tsx:140` calls `GET /api/lab-management/timer/ready?labDayId=${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/timer/ready`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0ebc4af4efeca060", "name": "Dangling fetch: POST /api/lab-management/timer/ready (components/TimerBanner.tsx:160)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/timer/ready (components/TimerBanner.tsx:160)"}, "fullDescription": {"text": "`components/TimerBanner.tsx:160` calls `POST /api/lab-management/timer/ready` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/timer/ready`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4bceb469768f9cca", "name": "Dangling fetch: GET /api/notifications (components/NotificationBell.tsx:165)", "shortDescription": {"text": "Dangling fetch: GET /api/notifications (components/NotificationBell.tsx:165)"}, "fullDescription": {"text": "`components/NotificationBell.tsx:165` calls `GET /api/notifications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6f5cea6eb0f90cbf", "name": "Dangling fetch: GET /api/notifications (components/NotificationBell.tsx:203)", "shortDescription": {"text": "Dangling fetch: GET /api/notifications (components/NotificationBell.tsx:203)"}, "fullDescription": {"text": "`components/NotificationBell.tsx:203` calls `GET /api/notifications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c2138b014b1f435e", "name": "Dangling fetch: GET /api/notifications/preferences (components/NotificationBell.tsx:204)", "shortDescription": {"text": "Dangling fetch: GET /api/notifications/preferences (components/NotificationBell.tsx:204)"}, "fullDescription": {"text": "`components/NotificationBell.tsx:204` calls `GET /api/notifications/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-211e08f38e9d1255", "name": "Dangling fetch: GET /api/user/preferences (components/NotificationBell.tsx:205)", "shortDescription": {"text": "Dangling fetch: GET /api/user/preferences (components/NotificationBell.tsx:205)"}, "fullDescription": {"text": "`components/NotificationBell.tsx:205` calls `GET /api/user/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d5c2a541a1306738", "name": "Dangling fetch: PUT /api/notifications/read (components/NotificationBell.tsx:261)", "shortDescription": {"text": "Dangling fetch: PUT /api/notifications/read (components/NotificationBell.tsx:261)"}, "fullDescription": {"text": "`components/NotificationBell.tsx:261` calls `PUT /api/notifications/read` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/read`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-77efd3614bed81ba", "name": "Dangling fetch: PUT /api/notifications/read (components/NotificationBell.tsx:278)", "shortDescription": {"text": "Dangling fetch: PUT /api/notifications/read (components/NotificationBell.tsx:278)"}, "fullDescription": {"text": "`components/NotificationBell.tsx:278` calls `PUT /api/notifications/read` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/read`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1457f6ce0bb1a82b", "name": "Dangling fetch: PUT /api/notifications/preferences (components/NotificationBell.tsx:307)", "shortDescription": {"text": "Dangling fetch: PUT /api/notifications/preferences (components/NotificationBell.tsx:307)"}, "fullDescription": {"text": "`components/NotificationBell.tsx:307` calls `PUT /api/notifications/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ea9f7a98ebb23598", "name": "Dangling fetch: GET /api/notifications (components/NotificationBell.tsx:315)", "shortDescription": {"text": "Dangling fetch: GET /api/notifications (components/NotificationBell.tsx:315)"}, "fullDescription": {"text": "`components/NotificationBell.tsx:315` calls `GET /api/notifications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-86d2ff8e66a46815", "name": "Dangling fetch: POST /api/lab-management/checklists/attendance (components/ChecklistAttendance.tsx:135)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/checklists/attendance (components/ChecklistAttendance.tsx:135)"}, "fullDescription": {"text": "`components/ChecklistAttendance.tsx:135` calls `POST /api/lab-management/checklists/attendance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/checklists/attendance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ea92c4c28b49a188", "name": "Dangling fetch: PATCH /api/lab-management/checklists/attendance (components/ChecklistAttendance.tsx:172)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/checklists/attendance (components/ChecklistAttendance.tsx:172)"}, "fullDescription": {"text": "`components/ChecklistAttendance.tsx:172` calls `PATCH /api/lab-management/checklists/attendance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/checklists/attendance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1eda41ec8c864278", "name": "Dangling fetch: POST /api/lab-management/checklists (components/ChecklistAttendance.tsx:198)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/checklists (components/ChecklistAttendance.tsx:198)"}, "fullDescription": {"text": "`components/ChecklistAttendance.tsx:198` calls `POST /api/lab-management/checklists` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/checklists`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-948fd6ad7fa10007", "name": "Dangling fetch: GET /api/instructor/me (components/SessionTimeoutProvider.tsx:21)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (components/SessionTimeoutProvider.tsx:21)"}, "fullDescription": {"text": "`components/SessionTimeoutProvider.tsx:21` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6037b54840288bfa", "name": "Dangling fetch: GET /api/lab-management/timer?labDayId=${labDayId} (components/LabTimer.tsx:163)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/timer?labDayId=${labDayId} (components/LabTimer.tsx:163)"}, "fullDescription": {"text": "`components/LabTimer.tsx:163` calls `GET /api/lab-management/timer?labDayId=${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/timer`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fb5b78263aec4cd8", "name": "Dangling fetch: GET /api/lab-management/timer/ready?labDayId=${labDayId} (components/LabTimer.tsx:227)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/timer/ready?labDayId=${labDayId} (components/LabTimer.tsx:227)"}, "fullDescription": {"text": "`components/LabTimer.tsx:227` calls `GET /api/lab-management/timer/ready?labDayId=${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/timer/ready`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a9ef70e6a1766bd5", "name": "Dangling fetch: PATCH /api/lab-management/timer/ready (components/LabTimer.tsx:252)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/timer/ready (components/LabTimer.tsx:252)"}, "fullDescription": {"text": "`components/LabTimer.tsx:252` calls `PATCH /api/lab-management/timer/ready` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/timer/ready`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0f5fbd469726be30", "name": "Dangling fetch: GET /api/lab-management/timer/active (components/LabTimer.tsx:275)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/timer/active (components/LabTimer.tsx:275)"}, "fullDescription": {"text": "`components/LabTimer.tsx:275` calls `GET /api/lab-management/timer/active` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/timer/active`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4add596fb2a2ec19", "name": "Dangling fetch: POST /api/lab-management/timer (components/LabTimer.tsx:295)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/timer (components/LabTimer.tsx:295)"}, "fullDescription": {"text": "`components/LabTimer.tsx:295` calls `POST /api/lab-management/timer` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/timer`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c72a1a9bbf6663a0", "name": "Dangling fetch: DELETE /api/lab-management/timer?labDayId=${labDayId} (components/LabTimer.tsx:320)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/timer?labDayId=${labDayId} (components/LabTimer.tsx:320)"}, "fullDescription": {"text": "`components/LabTimer.tsx:320` calls `DELETE /api/lab-management/timer?labDayId=${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/timer`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fcb4bfab72d478c5", "name": "Dangling fetch: PATCH /api/lab-management/timer (components/LabTimer.tsx:353)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/timer (components/LabTimer.tsx:353)"}, "fullDescription": {"text": "`components/LabTimer.tsx:353` calls `PATCH /api/lab-management/timer` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/timer`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0af6acd835e855b6", "name": "Dangling fetch: PATCH /api/lab-management/timer/adjust (components/LabTimer.tsx:384)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/timer/adjust (components/LabTimer.tsx:384)"}, "fullDescription": {"text": "`components/LabTimer.tsx:384` calls `PATCH /api/lab-management/timer/adjust` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/timer/adjust`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e1594d390638d01a", "name": "Dangling fetch: PATCH /api/lab-management/timer/adjust (components/LabTimer.tsx:410)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/timer/adjust (components/LabTimer.tsx:410)"}, "fullDescription": {"text": "`components/LabTimer.tsx:410` calls `PATCH /api/lab-management/timer/adjust` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/timer/adjust`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-25e3d64dce6a4a5d", "name": "Dangling fetch: POST /api/lab-management/students/${fm.matchedStudentId}/photo (components/BulkPhotoUpload.tsx:159)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/students/${fm.matchedStudentId}/photo (components/BulkPhotoUpload.tsx:159)"}, "fullDescription": {"text": "`components/BulkPhotoUpload.tsx:159` calls `POST /api/lab-management/students/${fm.matchedStudentId}/photo` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>/photo`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eab43991483357d2", "name": "Dangling fetch: POST /api/admin/user-activity/log (components/ActivityTracker.tsx:15)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/user-activity/log (components/ActivityTracker.tsx:15)"}, "fullDescription": {"text": "`components/ActivityTracker.tsx:15` calls `POST /api/admin/user-activity/log` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/user-activity/log`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-48320c6833789c7a", "name": "Dangling fetch: GET /api/instructor/me (components/CommandPalette.tsx:262)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (components/CommandPalette.tsx:262)"}, "fullDescription": {"text": "`components/CommandPalette.tsx:262` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c8bd2c8a270fc7e3", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/attendance (components/AttendanceSection.tsx:97)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/attendance (components/AttendanceSection.tsx:97)"}, "fullDescription": {"text": "`components/AttendanceSection.tsx:97` calls `GET /api/lab-management/lab-days/${labDayId}/attendance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/attendance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-373e513540bcf657", "name": "Dangling fetch: PUT /api/lab-management/lab-days/${labDayId}/attendance (components/AttendanceSection.tsx:161)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/lab-days/${labDayId}/attendance (components/AttendanceSection.tsx:161)"}, "fullDescription": {"text": "`components/AttendanceSection.tsx:161` calls `PUT /api/lab-management/lab-days/${labDayId}/attendance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/attendance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a2505649935d1ac2", "name": "Dangling fetch: PUT /api/lab-management/lab-days/${labDayId}/attendance (components/AttendanceSection.tsx:212)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/lab-days/${labDayId}/attendance (components/AttendanceSection.tsx:212)"}, "fullDescription": {"text": "`components/AttendanceSection.tsx:212` calls `PUT /api/lab-management/lab-days/${labDayId}/attendance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/attendance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-01c0791706008591", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/attendance (components/AttendanceSection.tsx:232)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/attendance (components/AttendanceSection.tsx:232)"}, "fullDescription": {"text": "`components/AttendanceSection.tsx:232` calls `POST /api/lab-management/lab-days/${labDayId}/attendance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/attendance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b640a4966799ac2a", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/attendance (components/AttendanceSection.tsx:258)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/attendance (components/AttendanceSection.tsx:258)"}, "fullDescription": {"text": "`components/AttendanceSection.tsx:258` calls `POST /api/lab-management/lab-days/${labDayId}/attendance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/attendance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6dec75718566c58f", "name": "Dangling fetch: GET /api/clinical/site-visits/coverage?keySitesOnly=true (components/SiteVisitAlerts.tsx:58)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/site-visits/coverage?keySitesOnly=true (components/SiteVisitAlerts.tsx:58)"}, "fullDescription": {"text": "`components/SiteVisitAlerts.tsx:58` calls `GET /api/clinical/site-visits/coverage?keySitesOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/site-visits/coverage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dfa6e519612c10ec", "name": "Dangling fetch: POST /api/clinical/site-visits/coverage (components/SiteVisitAlerts.tsx:80)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/site-visits/coverage (components/SiteVisitAlerts.tsx:80)"}, "fullDescription": {"text": "`components/SiteVisitAlerts.tsx:80` calls `POST /api/clinical/site-visits/coverage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/site-visits/coverage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8016fca144424bcf", "name": "Dangling fetch: POST /api/ferpa/agreement (components/ConsentModal.tsx:50)", "shortDescription": {"text": "Dangling fetch: POST /api/ferpa/agreement (components/ConsentModal.tsx:50)"}, "fullDescription": {"text": "`components/ConsentModal.tsx:50` calls `POST /api/ferpa/agreement` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ferpa/agreement`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ae93a17887e7e00", "name": "Dangling fetch: GET /api/calendar/status (components/UserMenu.tsx:87)", "shortDescription": {"text": "Dangling fetch: GET /api/calendar/status (components/UserMenu.tsx:87)"}, "fullDescription": {"text": "`components/UserMenu.tsx:87` calls `GET /api/calendar/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b40be4d79840469e", "name": "Dangling fetch: PATCH /api/lab-management/timer (components/InlineTimerWidget.tsx:137)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/timer (components/InlineTimerWidget.tsx:137)"}, "fullDescription": {"text": "`components/InlineTimerWidget.tsx:137` calls `PATCH /api/lab-management/timer` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/timer`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ef717d7594d6a04", "name": "Dangling fetch: PATCH /api/lab-management/timer/adjust (components/InlineTimerWidget.tsx:157)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/timer/adjust (components/InlineTimerWidget.tsx:157)"}, "fullDescription": {"text": "`components/InlineTimerWidget.tsx:157` calls `PATCH /api/lab-management/timer/adjust` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/timer/adjust`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-358bac647eda1a54", "name": "Dangling fetch: GET /api/lab-management/students/${studentId}/learning-plan (components/LearningPlanBanner.tsx:17)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students/${studentId}/learning-plan (components/LearningPlanBanner.tsx:17)"}, "fullDescription": {"text": "`components/LearningPlanBanner.tsx:17` calls `GET /api/lab-management/students/${studentId}/learning-plan` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students/<p>/learning-plan`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-53ad5c185665ca94", "name": "Dangling fetch: GET /api/user-preferences/tour (components/OnboardingTour.tsx:533)", "shortDescription": {"text": "Dangling fetch: GET /api/user-preferences/tour (components/OnboardingTour.tsx:533)"}, "fullDescription": {"text": "`components/OnboardingTour.tsx:533` calls `GET /api/user-preferences/tour` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user-preferences/tour`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c47493fb4a57bb8f", "name": "Dangling fetch: POST /api/user-preferences/tour (components/OnboardingTour.tsx:548)", "shortDescription": {"text": "Dangling fetch: POST /api/user-preferences/tour (components/OnboardingTour.tsx:548)"}, "fullDescription": {"text": "`components/OnboardingTour.tsx:548` calls `POST /api/user-preferences/tour` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user-preferences/tour`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c53bf4e4eb38967", "name": "Dangling fetch: POST /api/user-preferences/tour (components/OnboardingTour.tsx:577)", "shortDescription": {"text": "Dangling fetch: POST /api/user-preferences/tour (components/OnboardingTour.tsx:577)"}, "fullDescription": {"text": "`components/OnboardingTour.tsx:577` calls `POST /api/user-preferences/tour` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user-preferences/tour`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f2d9f1a416df8e0d", "name": "Dangling fetch: POST /api/errors/log (components/PageErrorBoundary.tsx:33)", "shortDescription": {"text": "Dangling fetch: POST /api/errors/log (components/PageErrorBoundary.tsx:33)"}, "fullDescription": {"text": "`components/PageErrorBoundary.tsx:33` calls `POST /api/errors/log` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/errors/log`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f3baaa561e5a72fd", "name": "Dangling fetch: GET /api/ferpa/agreement?type=${agreementType} (components/ConsentGate.tsx:38)", "shortDescription": {"text": "Dangling fetch: GET /api/ferpa/agreement?type=${agreementType} (components/ConsentGate.tsx:38)"}, "fullDescription": {"text": "`components/ConsentGate.tsx:38` calls `GET /api/ferpa/agreement?type=${agreementType}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/ferpa/agreement`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e03c782e8ab41b87", "name": "Dangling fetch: GET /api/lab-management/attendance/at-risk (components/AttendanceAlertBanner.tsx:37)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/attendance/at-risk (components/AttendanceAlertBanner.tsx:37)"}, "fullDescription": {"text": "`components/AttendanceAlertBanner.tsx:37` calls `GET /api/lab-management/attendance/at-risk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/attendance/at-risk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e88ebcb372010408", "name": "Dangling fetch: POST /api/admin/lab-templates/update-from-lab (components/TemplateDiffModal.tsx:410)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/lab-templates/update-from-lab (components/TemplateDiffModal.tsx:410)"}, "fullDescription": {"text": "`components/TemplateDiffModal.tsx:410` calls `POST /api/admin/lab-templates/update-from-lab` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/lab-templates/update-from-lab`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fd0339f2a09e65f1", "name": "Dangling fetch: GET /api/deep-links/qr?${params.toString()} (components/QRCodeDisplay.tsx:48)", "shortDescription": {"text": "Dangling fetch: GET /api/deep-links/qr?${params.toString()} (components/QRCodeDisplay.tsx:48)"}, "fullDescription": {"text": "`components/QRCodeDisplay.tsx:48` calls `GET /api/deep-links/qr?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/deep-links/qr`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ecc5277f36ee8d9b", "name": "Dangling fetch: GET /api/instructor/me (components/OnboardingTourWrapper.tsx:35)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (components/OnboardingTourWrapper.tsx:35)"}, "fullDescription": {"text": "`components/OnboardingTourWrapper.tsx:35` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ceaab893f4acf8ec", "name": "Dangling fetch: POST /api/errors/log (components/SectionErrorPage.tsx:36)", "shortDescription": {"text": "Dangling fetch: POST /api/errors/log (components/SectionErrorPage.tsx:36)"}, "fullDescription": {"text": "`components/SectionErrorPage.tsx:36` calls `POST /api/errors/log` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/errors/log`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c36d7a042200dd6e", "name": "Dangling fetch: GET /api/settings/2fa/status (components/TwoFactorPanel.tsx:259)", "shortDescription": {"text": "Dangling fetch: GET /api/settings/2fa/status (components/TwoFactorPanel.tsx:259)"}, "fullDescription": {"text": "`components/TwoFactorPanel.tsx:259` calls `GET /api/settings/2fa/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/2fa/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7e8a5edd39cdb15d", "name": "Dangling fetch: POST /api/settings/2fa/setup (components/TwoFactorPanel.tsx:280)", "shortDescription": {"text": "Dangling fetch: POST /api/settings/2fa/setup (components/TwoFactorPanel.tsx:280)"}, "fullDescription": {"text": "`components/TwoFactorPanel.tsx:280` calls `POST /api/settings/2fa/setup` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/2fa/setup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-40ae0948f3c06d5b", "name": "Dangling fetch: POST /api/settings/2fa/verify (components/TwoFactorPanel.tsx:305)", "shortDescription": {"text": "Dangling fetch: POST /api/settings/2fa/verify (components/TwoFactorPanel.tsx:305)"}, "fullDescription": {"text": "`components/TwoFactorPanel.tsx:305` calls `POST /api/settings/2fa/verify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/2fa/verify`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d700d2387fb5adce", "name": "Dangling fetch: POST /api/settings/2fa/disable (components/TwoFactorPanel.tsx:336)", "shortDescription": {"text": "Dangling fetch: POST /api/settings/2fa/disable (components/TwoFactorPanel.tsx:336)"}, "fullDescription": {"text": "`components/TwoFactorPanel.tsx:336` calls `POST /api/settings/2fa/disable` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/settings/2fa/disable`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-101b56b1c707290f", "name": "Dangling fetch: GET /api/skill-sheets/${sheetId} (components/SkillSheetPanel.tsx:485)", "shortDescription": {"text": "Dangling fetch: GET /api/skill-sheets/${sheetId} (components/SkillSheetPanel.tsx:485)"}, "fullDescription": {"text": "`components/SkillSheetPanel.tsx:485` calls `GET /api/skill-sheets/${sheetId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-91d2fe9f31a62983", "name": "Dangling fetch: GET /api/skill-sheets/${sheetId}/evaluations?student_id=${studentId} (components/SkillSheetPanel.tsx:510", "shortDescription": {"text": "Dangling fetch: GET /api/skill-sheets/${sheetId}/evaluations?student_id=${studentId} (components/SkillSheetPanel.tsx:510)"}, "fullDescription": {"text": "`components/SkillSheetPanel.tsx:510` calls `GET /api/skill-sheets/${sheetId}/evaluations?student_id=${studentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets/<p>/evaluations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-97ef8c24f313c41e", "name": "Dangling fetch: POST /api/lab-management/student-queue (components/SkillSheetPanel.tsx:569)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/student-queue (components/SkillSheetPanel.tsx:569)"}, "fullDescription": {"text": "`components/SkillSheetPanel.tsx:569` calls `POST /api/lab-management/student-queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/student-queue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83efdba16e1abcea", "name": "Dangling fetch: POST /api/skill-sheets/${sheetId}/evaluate (components/SkillSheetPanel.tsx:725)", "shortDescription": {"text": "Dangling fetch: POST /api/skill-sheets/${sheetId}/evaluate (components/SkillSheetPanel.tsx:725)"}, "fullDescription": {"text": "`components/SkillSheetPanel.tsx:725` calls `POST /api/skill-sheets/${sheetId}/evaluate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets/<p>/evaluate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-90652abef7922a92", "name": "Dangling fetch: PUT /api/lab-management/student-queue (components/SkillSheetPanel.tsx:769)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/student-queue (components/SkillSheetPanel.tsx:769)"}, "fullDescription": {"text": "`components/SkillSheetPanel.tsx:769` calls `PUT /api/lab-management/student-queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/student-queue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-48f59732d3dac48b", "name": "Dangling fetch: POST /api/skill-sheets/evaluations/send-email (components/SkillSheetPanel.tsx:795)", "shortDescription": {"text": "Dangling fetch: POST /api/skill-sheets/evaluations/send-email (components/SkillSheetPanel.tsx:795)"}, "fullDescription": {"text": "`components/SkillSheetPanel.tsx:795` calls `POST /api/skill-sheets/evaluations/send-email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets/evaluations/send-email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-748acf95b9de9327", "name": "Dangling fetch: POST /api/skill-sheets/evaluations/send-batch-email (components/SkillSheetPanel.tsx:849)", "shortDescription": {"text": "Dangling fetch: POST /api/skill-sheets/evaluations/send-batch-email (components/SkillSheetPanel.tsx:849)"}, "fullDescription": {"text": "`components/SkillSheetPanel.tsx:849` calls `POST /api/skill-sheets/evaluations/send-batch-email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets/evaluations/send-batch-email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-897a7de3dff74470", "name": "Dangling fetch: DELETE /api/skill-sheets/${sheetId}/evaluations?evaluation_id=${evalId} (components/SkillSheetPanel.tsx:", "shortDescription": {"text": "Dangling fetch: DELETE /api/skill-sheets/${sheetId}/evaluations?evaluation_id=${evalId} (components/SkillSheetPanel.tsx:873)"}, "fullDescription": {"text": "`components/SkillSheetPanel.tsx:873` calls `DELETE /api/skill-sheets/${sheetId}/evaluations?evaluation_id=${evalId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets/<p>/evaluations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-989eb0d8b8e06ce5", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/skill-results/resend (components/SkillSheetPanel.tsx:901)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/skill-results/resend (components/SkillSheetPanel.tsx:901)"}, "fullDescription": {"text": "`components/SkillSheetPanel.tsx:901` calls `POST /api/lab-management/lab-days/${labDayId}/skill-results/resend` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/skill-results/resend`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-80b0f8aa98a1f2e7", "name": "Dangling fetch: POST /api/skill-sheets/${sheetId}/evaluate (components/SkillSheetPanel.tsx:1073)", "shortDescription": {"text": "Dangling fetch: POST /api/skill-sheets/${sheetId}/evaluate (components/SkillSheetPanel.tsx:1073)"}, "fullDescription": {"text": "`components/SkillSheetPanel.tsx:1073` calls `POST /api/skill-sheets/${sheetId}/evaluate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets/<p>/evaluate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2b628dc851e72747", "name": "Dangling fetch: POST /api/feedback (components/FeedbackButton.tsx:122)", "shortDescription": {"text": "Dangling fetch: POST /api/feedback (components/FeedbackButton.tsx:122)"}, "fullDescription": {"text": "`components/FeedbackButton.tsx:122` calls `POST /api/feedback` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/feedback`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-597622b6a6af5fae", "name": "Dangling fetch: GET /api/lab-management/learning-style-report?${params} (components/LearningStyleDistribution.tsx:116)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/learning-style-report?${params} (components/LearningStyleDistribution.tsx:116)"}, "fullDescription": {"text": "`components/LearningStyleDistribution.tsx:116` calls `GET /api/lab-management/learning-style-report?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/learning-style-report`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-75e1101a45d0cae5", "name": "Dangling fetch: GET /api/lab-management/skills (components/BLSPlatinumChecklist.tsx:67)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skills (components/BLSPlatinumChecklist.tsx:67)"}, "fullDescription": {"text": "`components/BLSPlatinumChecklist.tsx:67` calls `GET /api/lab-management/skills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5b24fb9b06a88228", "name": "Dangling fetch: GET /api/lab-management/lab-day-skills?labDayId=${labDayId} (components/BLSPlatinumChecklist.tsx:71)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-day-skills?labDayId=${labDayId} (components/BLSPlatinumChecklist.tsx:71)"}, "fullDescription": {"text": "`components/BLSPlatinumChecklist.tsx:71` calls `GET /api/lab-management/lab-day-skills?labDayId=${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-day-skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fb9312d45fcd190d", "name": "Dangling fetch: GET /api/instructor/me (components/QuickActionsMenu.tsx:72)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (components/QuickActionsMenu.tsx:72)"}, "fullDescription": {"text": "`components/QuickActionsMenu.tsx:72` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4bcf46a9535e38df", "name": "Dangling fetch: GET /api/notifications/email-preferences (components/EmailSettingsPanel.tsx:70)", "shortDescription": {"text": "Dangling fetch: GET /api/notifications/email-preferences (components/EmailSettingsPanel.tsx:70)"}, "fullDescription": {"text": "`components/EmailSettingsPanel.tsx:70` calls `GET /api/notifications/email-preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/email-preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3b36980b3b979be0", "name": "Dangling fetch: PUT /api/notifications/email-preferences (components/EmailSettingsPanel.tsx:101)", "shortDescription": {"text": "Dangling fetch: PUT /api/notifications/email-preferences (components/EmailSettingsPanel.tsx:101)"}, "fullDescription": {"text": "`components/EmailSettingsPanel.tsx:101` calls `PUT /api/notifications/email-preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/email-preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-60fa58762fc9b138", "name": "Dangling fetch: GET /api/instructor/me (components/dashboard/CalendarConnectBanner.tsx:57)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (components/dashboard/CalendarConnectBanner.tsx:57)"}, "fullDescription": {"text": "`components/dashboard/CalendarConnectBanner.tsx:57` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f1e26f8759adf032", "name": "Dangling fetch: GET /api/user/preferences (components/dashboard/CalendarConnectBanner.tsx:58)", "shortDescription": {"text": "Dangling fetch: GET /api/user/preferences (components/dashboard/CalendarConnectBanner.tsx:58)"}, "fullDescription": {"text": "`components/dashboard/CalendarConnectBanner.tsx:58` calls `GET /api/user/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-85d00767c9d1cf3e", "name": "Dangling fetch: GET /api/calendar/status (components/dashboard/CalendarConnectBanner.tsx:59)", "shortDescription": {"text": "Dangling fetch: GET /api/calendar/status (components/dashboard/CalendarConnectBanner.tsx:59)"}, "fullDescription": {"text": "`components/dashboard/CalendarConnectBanner.tsx:59` calls `GET /api/calendar/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e56114f9f55a079", "name": "Dangling fetch: PUT /api/user/preferences (components/dashboard/CalendarConnectBanner.tsx:99)", "shortDescription": {"text": "Dangling fetch: PUT /api/user/preferences (components/dashboard/CalendarConnectBanner.tsx:99)"}, "fullDescription": {"text": "`components/dashboard/CalendarConnectBanner.tsx:99` calls `PUT /api/user/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/user/preferences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-164ca78627c64ddc", "name": "Dangling fetch: GET /api/instructor/me (components/dashboard/AnnouncementBanner.tsx:125)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (components/dashboard/AnnouncementBanner.tsx:125)"}, "fullDescription": {"text": "`components/dashboard/AnnouncementBanner.tsx:125` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5f967a4532288556", "name": "Dangling fetch: GET /api/announcements?active=true (components/dashboard/AnnouncementBanner.tsx:126)", "shortDescription": {"text": "Dangling fetch: GET /api/announcements?active=true (components/dashboard/AnnouncementBanner.tsx:126)"}, "fullDescription": {"text": "`components/dashboard/AnnouncementBanner.tsx:126` calls `GET /api/announcements?active=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/announcements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-05f1a8e756f73fd1", "name": "Dangling fetch: POST /api/announcements/${id}/read (components/dashboard/AnnouncementBanner.tsx:145)", "shortDescription": {"text": "Dangling fetch: POST /api/announcements/${id}/read (components/dashboard/AnnouncementBanner.tsx:145)"}, "fullDescription": {"text": "`components/dashboard/AnnouncementBanner.tsx:145` calls `POST /api/announcements/${id}/read` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/announcements/<p>/read`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-95c2210bb3204702", "name": "Dangling fetch: GET /api/lab-management/attendance/at-risk (components/dashboard/widgets/AtRiskStudentsWidget.tsx:58)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/attendance/at-risk (components/dashboard/widgets/AtRiskStudentsWidget.tsx:58)"}, "fullDescription": {"text": "`components/dashboard/widgets/AtRiskStudentsWidget.tsx:58` calls `GET /api/lab-management/attendance/at-risk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/attendance/at-risk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bf1548bb5fb04fb5", "name": "Dangling fetch: GET /api/notifications?limit=5&unread=true (components/dashboard/widgets/NotificationsWidget.tsx:40)", "shortDescription": {"text": "Dangling fetch: GET /api/notifications?limit=5&unread=true (components/dashboard/widgets/NotificationsWidget.tsx:40)"}, "fullDescription": {"text": "`components/dashboard/widgets/NotificationsWidget.tsx:40` calls `GET /api/notifications?limit=5&unread=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c08afe83d7029ba2", "name": "Dangling fetch: GET /api/notifications?limit=3 (components/dashboard/widgets/NotificationsWidget.tsx:50)", "shortDescription": {"text": "Dangling fetch: GET /api/notifications?limit=3 (components/dashboard/widgets/NotificationsWidget.tsx:50)"}, "fullDescription": {"text": "`components/dashboard/widgets/NotificationsWidget.tsx:50` calls `GET /api/notifications?limit=3` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a5729b31819362f7", "name": "Dangling fetch: PUT /api/notifications/read (components/dashboard/widgets/NotificationsWidget.tsx:67)", "shortDescription": {"text": "Dangling fetch: PUT /api/notifications/read (components/dashboard/widgets/NotificationsWidget.tsx:67)"}, "fullDescription": {"text": "`components/dashboard/widgets/NotificationsWidget.tsx:67` calls `PUT /api/notifications/read` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/read`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-608e70b1921f5ad6", "name": "Dangling fetch: GET /api/dashboard/program-snapshot (components/dashboard/widgets/ProgramSnapshotWidget.tsx:58)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/program-snapshot (components/dashboard/widgets/ProgramSnapshotWidget.tsx:58)"}, "fullDescription": {"text": "`components/dashboard/widgets/ProgramSnapshotWidget.tsx:58` calls `GET /api/dashboard/program-snapshot` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/program-snapshot`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-74150c0779add48d", "name": "Dangling fetch: GET /api/lab-management/stations?open=true&upcoming=true (components/dashboard/widgets/NeedsAttentionWid", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/stations?open=true&upcoming=true (components/dashboard/widgets/NeedsAttentionWidget.tsx:27)"}, "fullDescription": {"text": "`components/dashboard/widgets/NeedsAttentionWidget.tsx:27` calls `GET /api/lab-management/stations?open=true&upcoming=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-55889b8df4f83f80", "name": "Dangling fetch: GET /api/feedback?status=new&limit=1 (components/dashboard/widgets/NeedsAttentionWidget.tsx:44)", "shortDescription": {"text": "Dangling fetch: GET /api/feedback?status=new&limit=1 (components/dashboard/widgets/NeedsAttentionWidget.tsx:44)"}, "fullDescription": {"text": "`components/dashboard/widgets/NeedsAttentionWidget.tsx:44` calls `GET /api/feedback?status=new&limit=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/feedback`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-024302143a567d12", "name": "Dangling fetch: GET /api/admin/equipment/maintenance (components/dashboard/widgets/NeedsAttentionWidget.tsx:61)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/equipment/maintenance (components/dashboard/widgets/NeedsAttentionWidget.tsx:61)"}, "fullDescription": {"text": "`components/dashboard/widgets/NeedsAttentionWidget.tsx:61` calls `GET /api/admin/equipment/maintenance` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/equipment/maintenance`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c7368b7cd87c851", "name": "Dangling fetch: GET /api/instructor/me (components/dashboard/widgets/OverviewStatsWidget.tsx:87)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (components/dashboard/widgets/OverviewStatsWidget.tsx:87)"}, "fullDescription": {"text": "`components/dashboard/widgets/OverviewStatsWidget.tsx:87` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1a4658dae104772d", "name": "Dangling fetch: GET /api/lab-management/students?status=active (components/dashboard/widgets/OverviewStatsWidget.tsx:102", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/students?status=active (components/dashboard/widgets/OverviewStatsWidget.tsx:102)"}, "fullDescription": {"text": "`components/dashboard/widgets/OverviewStatsWidget.tsx:102` calls `GET /api/lab-management/students?status=active` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6be1a57b4dc6d7b5", "name": "Dangling fetch: GET /api/lab-management/lab-days?startDate=${startOfWeek}&endDate=${endOfWeek} (components/dashboard/wid", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days?startDate=${startOfWeek}&endDate=${endOfWeek} (components/dashboard/widgets/OverviewStatsWidget.tsx:103)"}, "fullDescription": {"text": "`components/dashboard/widgets/OverviewStatsWidget.tsx:103` calls `GET /api/lab-management/lab-days?startDate=${startOfWeek}&endDate=${endOfWeek}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ee5303e7e0c96f7", "name": "Dangling fetch: GET /api/lab-management/lab-days?startDate=${startOfMonth}&endDate=${endOfMonth} (components/dashboard/w", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days?startDate=${startOfMonth}&endDate=${endOfMonth} (components/dashboard/widgets/OverviewStatsWidget.tsx:104)"}, "fullDescription": {"text": "`components/dashboard/widgets/OverviewStatsWidget.tsx:104` calls `GET /api/lab-management/lab-days?startDate=${startOfMonth}&endDate=${endOfMonth}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3ee018e5cc1253d0", "name": "Dangling fetch: GET /api/lab-management/scenarios (components/dashboard/widgets/OverviewStatsWidget.tsx:106)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/scenarios (components/dashboard/widgets/OverviewStatsWidget.tsx:106)"}, "fullDescription": {"text": "`components/dashboard/widgets/OverviewStatsWidget.tsx:106` calls `GET /api/lab-management/scenarios` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-438be6abd56f415b", "name": "Dangling fetch: GET /api/feedback?status=new&limit=1 (components/dashboard/widgets/OverviewStatsWidget.tsx:108)", "shortDescription": {"text": "Dangling fetch: GET /api/feedback?status=new&limit=1 (components/dashboard/widgets/OverviewStatsWidget.tsx:108)"}, "fullDescription": {"text": "`components/dashboard/widgets/OverviewStatsWidget.tsx:108` calls `GET /api/feedback?status=new&limit=1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/feedback`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e5237853e17add23", "name": "Dangling fetch: GET /api/dashboard/internship-count (components/dashboard/widgets/OverviewStatsWidget.tsx:110)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/internship-count (components/dashboard/widgets/OverviewStatsWidget.tsx:110)"}, "fullDescription": {"text": "`components/dashboard/widgets/OverviewStatsWidget.tsx:110` calls `GET /api/dashboard/internship-count` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/internship-count`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ef7e958099c26ead", "name": "Dangling fetch: GET /api/onboarding/dashboard (components/dashboard/widgets/OnboardingWidget.tsx:67)", "shortDescription": {"text": "Dangling fetch: GET /api/onboarding/dashboard (components/dashboard/widgets/OnboardingWidget.tsx:67)"}, "fullDescription": {"text": "`components/dashboard/widgets/OnboardingWidget.tsx:67` calls `GET /api/onboarding/dashboard` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/onboarding/dashboard`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-37bb80847c65f636", "name": "Dangling fetch: GET /api/dashboard/quick-stats (components/dashboard/widgets/QuickStatsWidget.tsx:36)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/quick-stats (components/dashboard/widgets/QuickStatsWidget.tsx:36)"}, "fullDescription": {"text": "`components/dashboard/widgets/QuickStatsWidget.tsx:36` calls `GET /api/dashboard/quick-stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/quick-stats`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-860959cd4d4972e1", "name": "Dangling fetch: GET /api/tasks?filter=assigned_to_me&sortBy=due_date&sortOrder=asc&limit=10 (components/dashboard/widget", "shortDescription": {"text": "Dangling fetch: GET /api/tasks?filter=assigned_to_me&sortBy=due_date&sortOrder=asc&limit=10 (components/dashboard/widgets/MyTasksWidget.tsx:103)"}, "fullDescription": {"text": "`components/dashboard/widgets/MyTasksWidget.tsx:103` calls `GET /api/tasks?filter=assigned_to_me&sortBy=due_date&sortOrder=asc&limit=10` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tasks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f6eacae115d5a3c7", "name": "Dangling fetch: PATCH /api/tasks/${task.id} (components/dashboard/widgets/MyTasksWidget.tsx:132)", "shortDescription": {"text": "Dangling fetch: PATCH /api/tasks/${task.id} (components/dashboard/widgets/MyTasksWidget.tsx:132)"}, "fullDescription": {"text": "`components/dashboard/widgets/MyTasksWidget.tsx:132` calls `PATCH /api/tasks/${task.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tasks/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-94d6b85f30569980", "name": "Dangling fetch: GET /api/lab-management/stations?instructor=${session.user?.email}&upcoming=true&limit=5 (components/das", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/stations?instructor=${session.user?.email}&upcoming=true&limit=5 (components/dashboard/widgets/MyLabsWidget.tsx:80)"}, "fullDescription": {"text": "`components/dashboard/widgets/MyLabsWidget.tsx:80` calls `GET /api/lab-management/stations?instructor=${session.user?.email}&upcoming=true&limit=5` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c0e770875951f26", "name": "Dangling fetch: GET /api/tasks?filter=assigned_to_me&sortBy=due_date&sortOrder=asc&limit=10 (components/dashboard/widget", "shortDescription": {"text": "Dangling fetch: GET /api/tasks?filter=assigned_to_me&sortBy=due_date&sortOrder=asc&limit=10 (components/dashboard/widgets/OverdueTasksWidget.tsx:47)"}, "fullDescription": {"text": "`components/dashboard/widgets/OverdueTasksWidget.tsx:47` calls `GET /api/tasks?filter=assigned_to_me&sortBy=due_date&sortOrder=asc&limit=10` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tasks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7a7c9d80e2cce263", "name": "Dangling fetch: GET /api/feedback?limit=5 (components/dashboard/widgets/RecentFeedbackWidget.tsx:39)", "shortDescription": {"text": "Dangling fetch: GET /api/feedback?limit=5 (components/dashboard/widgets/RecentFeedbackWidget.tsx:39)"}, "fullDescription": {"text": "`components/dashboard/widgets/RecentFeedbackWidget.tsx:39` calls `GET /api/feedback?limit=5` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/feedback`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-28d14e4958a81b9c", "name": "Dangling fetch: GET /api/users/me/cohort-roster (components/dashboard/widgets/MyCohortWidget.tsx:40)", "shortDescription": {"text": "Dangling fetch: GET /api/users/me/cohort-roster (components/dashboard/widgets/MyCohortWidget.tsx:40)"}, "fullDescription": {"text": "`components/dashboard/widgets/MyCohortWidget.tsx:40` calls `GET /api/users/me/cohort-roster` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/users/me/cohort-roster`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-806e4cea368480ad", "name": "Dangling fetch: GET /api/lab-management/stations?open=true&upcoming=true (components/dashboard/widgets/OpenStationsWidge", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/stations?open=true&upcoming=true (components/dashboard/widgets/OpenStationsWidget.tsx:62)"}, "fullDescription": {"text": "`components/dashboard/widgets/OpenStationsWidget.tsx:62` calls `GET /api/lab-management/stations?open=true&upcoming=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8330391664863aea", "name": "Dangling fetch: PATCH /api/lab-management/stations/${stationId} (components/dashboard/widgets/OpenStationsWidget.tsx:81)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/stations/${stationId} (components/dashboard/widgets/OpenStationsWidget.tsx:81)"}, "fullDescription": {"text": "`components/dashboard/widgets/OpenStationsWidget.tsx:81` calls `PATCH /api/lab-management/stations/${stationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-de8eddbedc6475d0", "name": "Dangling fetch: GET /api/dashboard/cert-expiry (components/dashboard/widgets/CertExpiryWidget.tsx:70)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/cert-expiry (components/dashboard/widgets/CertExpiryWidget.tsx:70)"}, "fullDescription": {"text": "`components/dashboard/widgets/CertExpiryWidget.tsx:70` calls `GET /api/dashboard/cert-expiry` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/cert-expiry`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c3ad16f9b2f0a1ec", "name": "Dangling fetch: GET /api/dashboard/recent-activity?${params} (components/dashboard/widgets/RecentActivityWidget.tsx:242)", "shortDescription": {"text": "Dangling fetch: GET /api/dashboard/recent-activity?${params} (components/dashboard/widgets/RecentActivityWidget.tsx:242)"}, "fullDescription": {"text": "`components/dashboard/widgets/RecentActivityWidget.tsx:242` calls `GET /api/dashboard/recent-activity?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/dashboard/recent-activity`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f4b5d9daa2d3825c", "name": "Dangling fetch: POST /api/lvfr-aemt/calendar/swap (components/lvfr/WeekStripView.tsx:100)", "shortDescription": {"text": "Dangling fetch: POST /api/lvfr-aemt/calendar/swap (components/lvfr/WeekStripView.tsx:100)"}, "fullDescription": {"text": "`components/lvfr/WeekStripView.tsx:100` calls `POST /api/lvfr-aemt/calendar/swap` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/calendar/swap`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-93388ae3a8ca3561", "name": "Dangling fetch: PUT /api/lvfr-aemt/scheduling (components/lvfr/AssignmentModal.tsx:81)", "shortDescription": {"text": "Dangling fetch: PUT /api/lvfr-aemt/scheduling (components/lvfr/AssignmentModal.tsx:81)"}, "fullDescription": {"text": "`components/lvfr/AssignmentModal.tsx:81` calls `PUT /api/lvfr-aemt/scheduling` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lvfr-aemt/scheduling`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2ae766ed70052ad5", "name": "Dangling fetch: GET /api/lab-management/cohorts (components/reports/CohortFilter.tsx:26)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts (components/reports/CohortFilter.tsx:26)"}, "fullDescription": {"text": "`components/reports/CohortFilter.tsx:26` calls `GET /api/lab-management/cohorts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-76a92961c4a5302b", "name": "Dangling fetch: POST /api/students/${studentId}/graduate (components/students/GraduationModal.tsx:62)", "shortDescription": {"text": "Dangling fetch: POST /api/students/${studentId}/graduate (components/students/GraduationModal.tsx:62)"}, "fullDescription": {"text": "`components/students/GraduationModal.tsx:62` calls `POST /api/students/${studentId}/graduate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/students/<p>/graduate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a40f5dc505557232", "name": "Dangling fetch: GET /api/lab-management/cohorts?include_archived=true (components/students/TransferCohortModal.tsx:127)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?include_archived=true (components/students/TransferCohortModal.tsx:127)"}, "fullDescription": {"text": "`components/students/TransferCohortModal.tsx:127` calls `GET /api/lab-management/cohorts?include_archived=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c1d6f1a894dccae9", "name": "Dangling fetch: GET /api/students/${studentId}/transfer (components/students/CohortHistorySection.tsx:73)", "shortDescription": {"text": "Dangling fetch: GET /api/students/${studentId}/transfer (components/students/CohortHistorySection.tsx:73)"}, "fullDescription": {"text": "`components/students/CohortHistorySection.tsx:73` calls `GET /api/students/${studentId}/transfer` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/students/<p>/transfer`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-50eb084f2a16763d", "name": "Dangling fetch: GET /api/scheduling/planner/rooms (components/calendar/SlotFinderPanel.tsx:67)", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/rooms (components/calendar/SlotFinderPanel.tsx:67)"}, "fullDescription": {"text": "`components/calendar/SlotFinderPanel.tsx:67` calls `GET /api/scheduling/planner/rooms` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/rooms`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-61d827ede79f304c", "name": "Dangling fetch: POST /api/calendar/find-slots (components/calendar/SlotFinderPanel.tsx:112)", "shortDescription": {"text": "Dangling fetch: POST /api/calendar/find-slots (components/calendar/SlotFinderPanel.tsx:112)"}, "fullDescription": {"text": "`components/calendar/SlotFinderPanel.tsx:112` calls `POST /api/calendar/find-slots` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/find-slots`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8f39111cae3373c1", "name": "Dangling fetch: POST /api/calendar/find-conflicts (components/calendar/ConflictPanel.tsx:110)", "shortDescription": {"text": "Dangling fetch: POST /api/calendar/find-conflicts (components/calendar/ConflictPanel.tsx:110)"}, "fullDescription": {"text": "`components/calendar/ConflictPanel.tsx:110` calls `POST /api/calendar/find-conflicts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/find-conflicts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9349c936cf7e4295", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (components/calendar/EventDetailPanel.tsx:185)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (components/calendar/EventDetailPanel.tsx:185)"}, "fullDescription": {"text": "`components/calendar/EventDetailPanel.tsx:185` calls `GET /api/lab-management/lab-days/${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-33e06f5cbca68a55", "name": "Dangling fetch: GET /api/lab-management/skill-drills/${drillId} (components/lab-day/SkillDrillReference.tsx:91)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skill-drills/${drillId} (components/lab-day/SkillDrillReference.tsx:91)"}, "fullDescription": {"text": "`components/lab-day/SkillDrillReference.tsx:91` calls `GET /api/lab-management/skill-drills/${drillId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-drills/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d8d36579fb4ce226", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/roster?format=csv (components/lab-day/labDayExport.ts:84)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/roster?format=csv (components/lab-day/labDayExport.ts:84)"}, "fullDescription": {"text": "`components/lab-day/labDayExport.ts:84` calls `GET /api/lab-management/lab-days/${labDayId}/roster?format=csv` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/roster`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6971e9fbadd37adf", "name": "Dangling fetch: GET /api/lab-management/station-skills?stationId=${station.id} (components/lab-day/EditStationModal.tsx:", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/station-skills?stationId=${station.id} (components/lab-day/EditStationModal.tsx:145)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:145` calls `GET /api/lab-management/station-skills?stationId=${station.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/station-skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f2b6fefd071c486a", "name": "Dangling fetch: GET /api/lab-management/custom-skills?stationId=${station.id} (components/lab-day/EditStationModal.tsx:1", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/custom-skills?stationId=${station.id} (components/lab-day/EditStationModal.tsx:151)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:151` calls `GET /api/lab-management/custom-skills?stationId=${station.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/custom-skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ce0bc3037760907b", "name": "Dangling fetch: GET /api/lab-management/skill-drills (components/lab-day/EditStationModal.tsx:185)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skill-drills (components/lab-day/EditStationModal.tsx:185)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:185` calls `GET /api/lab-management/skill-drills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-drills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-121f02b3ee8ca405", "name": "Dangling fetch: GET /api/lab-management/station-instructors?stationId=${station.id} (components/lab-day/EditStationModal", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/station-instructors?stationId=${station.id} (components/lab-day/EditStationModal.tsx:197)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:197` calls `GET /api/lab-management/station-instructors?stationId=${station.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/station-instructors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-65abb2012a80fc5d", "name": "Dangling fetch: GET /api/lab-management/scenarios (components/lab-day/EditStationModal.tsx:249)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/scenarios (components/lab-day/EditStationModal.tsx:249)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:249` calls `GET /api/lab-management/scenarios` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/scenarios`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c2d1d5032a5bb34f", "name": "Dangling fetch: GET /api/lab-management/skills?includeDocuments=true (components/lab-day/EditStationModal.tsx:250)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skills?includeDocuments=true (components/lab-day/EditStationModal.tsx:250)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:250` calls `GET /api/lab-management/skills?includeDocuments=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8deb3c1c694dde54", "name": "Dangling fetch: GET /api/lab-management/stations/${station.id}/documents (components/lab-day/EditStationModal.tsx:267)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/stations/${station.id}/documents (components/lab-day/EditStationModal.tsx:267)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:267` calls `GET /api/lab-management/stations/${station.id}/documents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations/<p>/documents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-53c51c337cce8bfc", "name": "Dangling fetch: POST /api/lab-management/stations/${station.id}/documents (components/lab-day/EditStationModal.tsx:299)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/stations/${station.id}/documents (components/lab-day/EditStationModal.tsx:299)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:299` calls `POST /api/lab-management/stations/${station.id}/documents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations/<p>/documents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7ce06d322060b95d", "name": "Dangling fetch: POST /api/lab-management/stations/${station.id}/documents (components/lab-day/EditStationModal.tsx:304)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/stations/${station.id}/documents (components/lab-day/EditStationModal.tsx:304)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:304` calls `POST /api/lab-management/stations/${station.id}/documents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations/<p>/documents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-48ec57fea84761a8", "name": "Dangling fetch: DELETE /api/lab-management/stations/${station.id}/documents?documentId=${docId} (components/lab-day/Edit", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/stations/${station.id}/documents?documentId=${docId} (components/lab-day/EditStationModal.tsx:337)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:337` calls `DELETE /api/lab-management/stations/${station.id}/documents?documentId=${docId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations/<p>/documents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-367cf8ace5a65817", "name": "Dangling fetch: PATCH /api/lab-management/stations/${station.id} (components/lab-day/EditStationModal.tsx:462)", "shortDescription": {"text": "Dangling fetch: PATCH /api/lab-management/stations/${station.id} (components/lab-day/EditStationModal.tsx:462)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:462` calls `PATCH /api/lab-management/stations/${station.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a92e1b9fdbda35bb", "name": "Dangling fetch: DELETE /api/lab-management/station-skills?stationId=${station.id} (components/lab-day/EditStationModal.t", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/station-skills?stationId=${station.id} (components/lab-day/EditStationModal.tsx:492)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:492` calls `DELETE /api/lab-management/station-skills?stationId=${station.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/station-skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-76c75f0ad492fcec", "name": "Dangling fetch: POST /api/lab-management/station-skills (components/lab-day/EditStationModal.tsx:494)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/station-skills (components/lab-day/EditStationModal.tsx:494)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:494` calls `POST /api/lab-management/station-skills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/station-skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7a24b947ad5ef672", "name": "Dangling fetch: GET /api/lab-management/custom-skills?stationId=${station.id} (components/lab-day/EditStationModal.tsx:5", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/custom-skills?stationId=${station.id} (components/lab-day/EditStationModal.tsx:501)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:501` calls `GET /api/lab-management/custom-skills?stationId=${station.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/custom-skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8c0a519c60549f7a", "name": "Dangling fetch: DELETE /api/lab-management/custom-skills?id=${customSkill.id} (components/lab-day/EditStationModal.tsx:5", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/custom-skills?id=${customSkill.id} (components/lab-day/EditStationModal.tsx:505)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:505` calls `DELETE /api/lab-management/custom-skills?id=${customSkill.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/custom-skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b40e4d79b48af5a2", "name": "Dangling fetch: POST /api/lab-management/custom-skills (components/lab-day/EditStationModal.tsx:511)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/custom-skills (components/lab-day/EditStationModal.tsx:511)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:511` calls `POST /api/lab-management/custom-skills` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/custom-skills`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6456f3d62d0349b0", "name": "Dangling fetch: GET /api/lab-management/station-instructors?stationId=${station.id} (components/lab-day/EditStationModal", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/station-instructors?stationId=${station.id} (components/lab-day/EditStationModal.tsx:521)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:521` calls `GET /api/lab-management/station-instructors?stationId=${station.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/station-instructors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-40462a156c7a294c", "name": "Dangling fetch: DELETE /api/lab-management/station-instructors?stationId=${station.id}&userEmail=${encodeURIComponent(em", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/station-instructors?stationId=${station.id}&userEmail=${encodeURIComponent(email)} (components/lab-day/EditStationModal.tsx:527)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:527` calls `DELETE /api/lab-management/station-instructors?stationId=${station.id}&userEmail=${encodeURIComponent(email)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/station-instructors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-95d6312d8f60d1b0", "name": "Dangling fetch: POST /api/lab-management/station-instructors (components/lab-day/EditStationModal.tsx:532)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/station-instructors (components/lab-day/EditStationModal.tsx:532)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:532` calls `POST /api/lab-management/station-instructors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/station-instructors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b16e100e287848a9", "name": "Dangling fetch: DELETE /api/lab-management/stations/${station.id} (components/lab-day/EditStationModal.tsx:551)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/stations/${station.id} (components/lab-day/EditStationModal.tsx:551)"}, "fullDescription": {"text": "`components/lab-day/EditStationModal.tsx:551` calls `DELETE /api/lab-management/stations/${station.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bf5456fd9d28306c", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (components/lab-day/LabDayCoverageSection.tsx:47)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (components/lab-day/LabDayCoverageSection.tsx:47)"}, "fullDescription": {"text": "`components/lab-day/LabDayCoverageSection.tsx:47` calls `GET /api/lab-management/lab-days/${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cb34210132bca16f", "name": "Dangling fetch: GET /api/scheduling/shifts?start_date=${labDate}&end_date=${labDate}&include_filled=true (components/lab", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/shifts?start_date=${labDate}&end_date=${labDate}&include_filled=true (components/lab-day/LabDayCoverageSection.tsx:51)"}, "fullDescription": {"text": "`components/lab-day/LabDayCoverageSection.tsx:51` calls `GET /api/scheduling/shifts?start_date=${labDate}&end_date=${labDate}&include_filled=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/shifts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b1bd48ad589959b", "name": "Dangling fetch: POST /api/scheduling/shifts/${shiftId}/signup/${signupId} (components/lab-day/LabDayCoverageSection.tsx:", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/shifts/${shiftId}/signup/${signupId} (components/lab-day/LabDayCoverageSection.tsx:66)"}, "fullDescription": {"text": "`components/lab-day/LabDayCoverageSection.tsx:66` calls `POST /api/scheduling/shifts/${shiftId}/signup/${signupId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/shifts/<p>/signup/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c71ec37c66eb419a", "name": "Dangling fetch: POST /api/scheduling/shifts/${shiftId}/signup/${signupId} (components/lab-day/LabDayCoverageSection.tsx:", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/shifts/${shiftId}/signup/${signupId} (components/lab-day/LabDayCoverageSection.tsx:86)"}, "fullDescription": {"text": "`components/lab-day/LabDayCoverageSection.tsx:86` calls `POST /api/scheduling/shifts/${shiftId}/signup/${signupId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/shifts/<p>/signup/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-96f01c52a0029f13", "name": "Dangling fetch: GET /api/lab-management/skill-signoffs?lab_day_id=${labDayId} (components/lab-day/LabDaySkillSignoffs.ts", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/skill-signoffs?lab_day_id=${labDayId} (components/lab-day/LabDaySkillSignoffs.tsx:57)"}, "fullDescription": {"text": "`components/lab-day/LabDaySkillSignoffs.tsx:57` calls `GET /api/lab-management/skill-signoffs?lab_day_id=${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-signoffs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-988b0dfc1eeace4c", "name": "Dangling fetch: POST /api/lab-management/skill-signoffs (components/lab-day/LabDaySkillSignoffs.tsx:90)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/skill-signoffs (components/lab-day/LabDaySkillSignoffs.tsx:90)"}, "fullDescription": {"text": "`components/lab-day/LabDaySkillSignoffs.tsx:90` calls `POST /api/lab-management/skill-signoffs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-signoffs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3844049f9a0e71fb", "name": "Dangling fetch: POST /api/lab-management/skill-signoffs (components/lab-day/LabDaySkillSignoffs.tsx:131)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/skill-signoffs (components/lab-day/LabDaySkillSignoffs.tsx:131)"}, "fullDescription": {"text": "`components/lab-day/LabDaySkillSignoffs.tsx:131` calls `POST /api/lab-management/skill-signoffs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-signoffs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7baf06fb567b3c16", "name": "Dangling fetch: PUT /api/lab-management/skill-signoffs (components/lab-day/LabDaySkillSignoffs.tsx:168)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/skill-signoffs (components/lab-day/LabDaySkillSignoffs.tsx:168)"}, "fullDescription": {"text": "`components/lab-day/LabDaySkillSignoffs.tsx:168` calls `PUT /api/lab-management/skill-signoffs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/skill-signoffs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f887294568c92a8e", "name": "Dangling fetch: GET /api/instructor/me (components/lab-day/DebriefNotesSection.tsx:83)", "shortDescription": {"text": "Dangling fetch: GET /api/instructor/me (components/lab-day/DebriefNotesSection.tsx:83)"}, "fullDescription": {"text": "`components/lab-day/DebriefNotesSection.tsx:83` calls `GET /api/instructor/me` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instructor/me`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-94e76ae48bb22f9a", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/debrief-notes (components/lab-day/DebriefNotesSection.tsx:9", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/debrief-notes (components/lab-day/DebriefNotesSection.tsx:97)"}, "fullDescription": {"text": "`components/lab-day/DebriefNotesSection.tsx:97` calls `GET /api/lab-management/lab-days/${labDayId}/debrief-notes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/debrief-notes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d69df7453643dc06", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/debrief-notes (components/lab-day/DebriefNotesSection.tsx:", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/debrief-notes (components/lab-day/DebriefNotesSection.tsx:122)"}, "fullDescription": {"text": "`components/lab-day/DebriefNotesSection.tsx:122` calls `POST /api/lab-management/lab-days/${labDayId}/debrief-notes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/debrief-notes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2520e94f980e7e1f", "name": "Dangling fetch: PUT /api/lab-management/lab-days/${labDayId}/debrief-notes/${noteId} (components/lab-day/DebriefNotesSec", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/lab-days/${labDayId}/debrief-notes/${noteId} (components/lab-day/DebriefNotesSection.tsx:145)"}, "fullDescription": {"text": "`components/lab-day/DebriefNotesSection.tsx:145` calls `PUT /api/lab-management/lab-days/${labDayId}/debrief-notes/${noteId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/debrief-notes/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-98495e8d7129f6b8", "name": "Dangling fetch: DELETE /api/lab-management/lab-days/${labDayId}/debrief-notes/${noteId} (components/lab-day/DebriefNotes", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/lab-days/${labDayId}/debrief-notes/${noteId} (components/lab-day/DebriefNotesSection.tsx:165)"}, "fullDescription": {"text": "`components/lab-day/DebriefNotesSection.tsx:165` calls `DELETE /api/lab-management/lab-days/${labDayId}/debrief-notes/${noteId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/debrief-notes/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-31b03954e0911095", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/checklist (components/lab-day/ChecklistSection.tsx:33)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/checklist (components/lab-day/ChecklistSection.tsx:33)"}, "fullDescription": {"text": "`components/lab-day/ChecklistSection.tsx:33` calls `GET /api/lab-management/lab-days/${labDayId}/checklist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/checklist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-722b47b3eede3a0f", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/checklist (components/lab-day/ChecklistSection.tsx:40)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/checklist (components/lab-day/ChecklistSection.tsx:40)"}, "fullDescription": {"text": "`components/lab-day/ChecklistSection.tsx:40` calls `POST /api/lab-management/lab-days/${labDayId}/checklist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/checklist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d2df8fab9123af37", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/checklist (components/lab-day/ChecklistSection.tsx:47)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/checklist (components/lab-day/ChecklistSection.tsx:47)"}, "fullDescription": {"text": "`components/lab-day/ChecklistSection.tsx:47` calls `POST /api/lab-management/lab-days/${labDayId}/checklist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/checklist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3d40a773fa3802fb", "name": "Dangling fetch: PUT /api/lab-management/lab-days/${labDayId}/checklist (components/lab-day/ChecklistSection.tsx:55)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/lab-days/${labDayId}/checklist (components/lab-day/ChecklistSection.tsx:55)"}, "fullDescription": {"text": "`components/lab-day/ChecklistSection.tsx:55` calls `PUT /api/lab-management/lab-days/${labDayId}/checklist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/checklist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-44a0f638fcd23fd9", "name": "Dangling fetch: DELETE /api/lab-management/lab-days/${labDayId}/checklist?itemId=${itemId} (components/lab-day/Checklist", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/lab-days/${labDayId}/checklist?itemId=${itemId} (components/lab-day/ChecklistSection.tsx:61)"}, "fullDescription": {"text": "`components/lab-day/ChecklistSection.tsx:61` calls `DELETE /api/lab-management/lab-days/${labDayId}/checklist?itemId=${itemId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/checklist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6d8ce194402173a1", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/debrief (components/lab-day/DebriefSection.tsx:40)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/debrief (components/lab-day/DebriefSection.tsx:40)"}, "fullDescription": {"text": "`components/lab-day/DebriefSection.tsx:40` calls `GET /api/lab-management/lab-days/${labDayId}/debrief` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/debrief`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1a330bc74ca4a163", "name": "Dangling fetch: GET /api/skill-sheets/evaluations-by-lab-day?lab_day_id=${labDayId} (components/lab-day/DebriefSection.t", "shortDescription": {"text": "Dangling fetch: GET /api/skill-sheets/evaluations-by-lab-day?lab_day_id=${labDayId} (components/lab-day/DebriefSection.tsx:46)"}, "fullDescription": {"text": "`components/lab-day/DebriefSection.tsx:46` calls `GET /api/skill-sheets/evaluations-by-lab-day?lab_day_id=${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets/evaluations-by-lab-day`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2f2d92e8d5a511ab", "name": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId}/skill-coverage${tail} (components/lab-day/SkillCoveragePanel", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId}/skill-coverage${tail} (components/lab-day/SkillCoveragePanel.tsx:142)"}, "fullDescription": {"text": "`components/lab-day/SkillCoveragePanel.tsx:142` calls `GET /api/lab-management/cohorts/${cohortId}/skill-coverage${tail}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts/<p>/skill-coverage/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-44368c8d87ee85f1", "name": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId}/smc-completion${tail} (components/lab-day/SkillCoveragePanel", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId}/smc-completion${tail} (components/lab-day/SkillCoveragePanel.tsx:143)"}, "fullDescription": {"text": "`components/lab-day/SkillCoveragePanel.tsx:143` calls `GET /api/lab-management/cohorts/${cohortId}/smc-completion${tail}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts/<p>/smc-completion/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-82030b6dabaa706d", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/ratings (components/lab-day/StudentRatingsSection.tsx:41)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/ratings (components/lab-day/StudentRatingsSection.tsx:41)"}, "fullDescription": {"text": "`components/lab-day/StudentRatingsSection.tsx:41` calls `GET /api/lab-management/lab-days/${labDayId}/ratings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/ratings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-250be7e8ad73c3d3", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/ratings (components/lab-day/StudentRatingsSection.tsx:52)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/ratings (components/lab-day/StudentRatingsSection.tsx:52)"}, "fullDescription": {"text": "`components/lab-day/StudentRatingsSection.tsx:52` calls `POST /api/lab-management/lab-days/${labDayId}/ratings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/ratings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a488f37991fbcca7", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/ratings (components/lab-day/StudentRatingsSection.tsx:62)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/ratings (components/lab-day/StudentRatingsSection.tsx:62)"}, "fullDescription": {"text": "`components/lab-day/StudentRatingsSection.tsx:62` calls `POST /api/lab-management/lab-days/${labDayId}/ratings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/ratings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa40cf6353d882f9", "name": "Dangling fetch: POST /api/lab-management/lab-day-roles (components/lab-day/LabDayRolesSection.tsx:46)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-day-roles (components/lab-day/LabDayRolesSection.tsx:46)"}, "fullDescription": {"text": "`components/lab-day/LabDayRolesSection.tsx:46` calls `POST /api/lab-management/lab-day-roles` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-day-roles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a969281d9afd1244", "name": "Dangling fetch: DELETE /api/lab-management/lab-day-roles?id=${roleId} (components/lab-day/LabDayRolesSection.tsx:74)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/lab-day-roles?id=${roleId} (components/lab-day/LabDayRolesSection.tsx:74)"}, "fullDescription": {"text": "`components/lab-day/LabDayRolesSection.tsx:74` calls `DELETE /api/lab-management/lab-day-roles?id=${roleId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-day-roles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ca5d5e28dc2ffc11", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/equipment (components/lab-day/EquipmentSection.tsx:35)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/equipment (components/lab-day/EquipmentSection.tsx:35)"}, "fullDescription": {"text": "`components/lab-day/EquipmentSection.tsx:35` calls `GET /api/lab-management/lab-days/${labDayId}/equipment` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/equipment`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ec8f5bf4b8893782", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/equipment (components/lab-day/EquipmentSection.tsx:42)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/equipment (components/lab-day/EquipmentSection.tsx:42)"}, "fullDescription": {"text": "`components/lab-day/EquipmentSection.tsx:42` calls `POST /api/lab-management/lab-days/${labDayId}/equipment` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/equipment`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e8085fba7117cfc9", "name": "Dangling fetch: PUT /api/lab-management/lab-days/${labDayId}/equipment (components/lab-day/EquipmentSection.tsx:49)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/lab-days/${labDayId}/equipment (components/lab-day/EquipmentSection.tsx:49)"}, "fullDescription": {"text": "`components/lab-day/EquipmentSection.tsx:49` calls `PUT /api/lab-management/lab-days/${labDayId}/equipment` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/equipment`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7eb3866787eb0bfd", "name": "Dangling fetch: DELETE /api/lab-management/lab-days/${labDayId}/equipment?itemId=${itemId} (components/lab-day/Equipment", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/lab-days/${labDayId}/equipment?itemId=${itemId} (components/lab-day/EquipmentSection.tsx:55)"}, "fullDescription": {"text": "`components/lab-day/EquipmentSection.tsx:55` calls `DELETE /api/lab-management/lab-days/${labDayId}/equipment?itemId=${itemId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/equipment`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dec61fee2f203151", "name": "Dangling fetch: GET /api/volunteer/lab-tokens?lab_day_id=${labDayId} (components/lab-day/LabDayVolunteers.tsx:108)", "shortDescription": {"text": "Dangling fetch: GET /api/volunteer/lab-tokens?lab_day_id=${labDayId} (components/lab-day/LabDayVolunteers.tsx:108)"}, "fullDescription": {"text": "`components/lab-day/LabDayVolunteers.tsx:108` calls `GET /api/volunteer/lab-tokens?lab_day_id=${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/lab-tokens`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a036464206857a3e", "name": "Dangling fetch: POST /api/volunteer/lab-tokens (components/lab-day/LabDayVolunteers.tsx:129)", "shortDescription": {"text": "Dangling fetch: POST /api/volunteer/lab-tokens (components/lab-day/LabDayVolunteers.tsx:129)"}, "fullDescription": {"text": "`components/lab-day/LabDayVolunteers.tsx:129` calls `POST /api/volunteer/lab-tokens` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/volunteer/lab-tokens`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1354f74523ee92f9", "name": "Dangling fetch: GET /api/nremt-scenarios?skill_code=${skillCode} (components/lab-day/ScenarioPickerModal.tsx:71)", "shortDescription": {"text": "Dangling fetch: GET /api/nremt-scenarios?skill_code=${skillCode} (components/lab-day/ScenarioPickerModal.tsx:71)"}, "fullDescription": {"text": "`components/lab-day/ScenarioPickerModal.tsx:71` calls `GET /api/nremt-scenarios?skill_code=${skillCode}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/nremt-scenarios`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7f8a94d0eb3295a2", "name": "Dangling fetch: POST /api/lab-management/stations/${station.id}/scenario (components/lab-day/ScenarioPickerModal.tsx:122", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/stations/${station.id}/scenario (components/lab-day/ScenarioPickerModal.tsx:122)"}, "fullDescription": {"text": "`components/lab-day/ScenarioPickerModal.tsx:122` calls `POST /api/lab-management/stations/${station.id}/scenario` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/stations/<p>/scenario`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eb41735d2e078bc2", "name": "Dangling fetch: GET /api/lab-management/costs?lab_day_id=${labDayId} (components/lab-day/CostsSection.tsx:39)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/costs?lab_day_id=${labDayId} (components/lab-day/CostsSection.tsx:39)"}, "fullDescription": {"text": "`components/lab-day/CostsSection.tsx:39` calls `GET /api/lab-management/costs?lab_day_id=${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/costs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-630e4c4e13f4aed5", "name": "Dangling fetch: POST /api/lab-management/costs (components/lab-day/CostsSection.tsx:46)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/costs (components/lab-day/CostsSection.tsx:46)"}, "fullDescription": {"text": "`components/lab-day/CostsSection.tsx:46` calls `POST /api/lab-management/costs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/costs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c6cd8725f09a709e", "name": "Dangling fetch: PUT /api/lab-management/costs/${itemId} (components/lab-day/CostsSection.tsx:54)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/costs/${itemId} (components/lab-day/CostsSection.tsx:54)"}, "fullDescription": {"text": "`components/lab-day/CostsSection.tsx:54` calls `PUT /api/lab-management/costs/${itemId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/costs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d115fb9d79d830b1", "name": "Dangling fetch: DELETE /api/lab-management/costs/${itemId} (components/lab-day/CostsSection.tsx:60)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/costs/${itemId} (components/lab-day/CostsSection.tsx:60)"}, "fullDescription": {"text": "`components/lab-day/CostsSection.tsx:60` calls `DELETE /api/lab-management/costs/${itemId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/costs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-af309c45b3d3be0d", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/checklist (components/lab-day/LabDayPrintView.tsx:52)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/checklist (components/lab-day/LabDayPrintView.tsx:52)"}, "fullDescription": {"text": "`components/lab-day/LabDayPrintView.tsx:52` calls `GET /api/lab-management/lab-days/${labDayId}/checklist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/checklist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-236ca7aefaf4989a", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (components/lab-day/LabDayPrintView.tsx:58)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (components/lab-day/LabDayPrintView.tsx:58)"}, "fullDescription": {"text": "`components/lab-day/LabDayPrintView.tsx:58` calls `GET /api/lab-management/lab-days/${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c268a89706bc10aa", "name": "Dangling fetch: GET /api/scheduling/shifts?start_date=${labDate}&end_date=${labDate}&include_filled=true (components/lab", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/shifts?start_date=${labDate}&end_date=${labDate}&include_filled=true (components/lab-day/LabDayPrintView.tsx:62)"}, "fullDescription": {"text": "`components/lab-day/LabDayPrintView.tsx:62` calls `GET /api/scheduling/shifts?start_date=${labDate}&end_date=${labDate}&include_filled=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/shifts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-86abe608e9dfda2c", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/duplicate (components/lab-day/DuplicateModals.tsx:78)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/duplicate (components/lab-day/DuplicateModals.tsx:78)"}, "fullDescription": {"text": "`components/lab-day/DuplicateModals.tsx:78` calls `POST /api/lab-management/lab-days/${labDayId}/duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/duplicate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-81c1b1160448004b", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/duplicate (components/lab-day/DuplicateModals.tsx:102)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/duplicate (components/lab-day/DuplicateModals.tsx:102)"}, "fullDescription": {"text": "`components/lab-day/DuplicateModals.tsx:102` calls `POST /api/lab-management/lab-days/${labDayId}/duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/duplicate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b80aadef1d71f2f9", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/duplicate-bulk (components/lab-day/DuplicateModals.tsx:204", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/duplicate-bulk (components/lab-day/DuplicateModals.tsx:204)"}, "fullDescription": {"text": "`components/lab-day/DuplicateModals.tsx:204` calls `POST /api/lab-management/lab-days/${labDayId}/duplicate-bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/duplicate-bulk`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4bbdd323a4e9e068", "name": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/messages?limit=50 (components/lab-day/LabDayChatInner.tsx:1", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/messages?limit=50 (components/lab-day/LabDayChatInner.tsx:170)"}, "fullDescription": {"text": "`components/lab-day/LabDayChatInner.tsx:170` calls `GET /api/lab-management/lab-days/${labDayId}/messages?limit=50` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b5a6beafdb70b5d", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/messages (components/lab-day/LabDayChatInner.tsx:424)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/messages (components/lab-day/LabDayChatInner.tsx:424)"}, "fullDescription": {"text": "`components/lab-day/LabDayChatInner.tsx:424` calls `POST /api/lab-management/lab-days/${labDayId}/messages` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9423e0465d82cdf5", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/assistance-alerts (components/lab-day/LabDayChatInner.tsx:", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/assistance-alerts (components/lab-day/LabDayChatInner.tsx:446)"}, "fullDescription": {"text": "`components/lab-day/LabDayChatInner.tsx:446` calls `POST /api/lab-management/lab-days/${labDayId}/assistance-alerts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/assistance-alerts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6d882fa7cbde98f9", "name": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/checkin-token (components/lab-day/LabDayCheckInSection.tsx", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/checkin-token (components/lab-day/LabDayCheckInSection.tsx:27)"}, "fullDescription": {"text": "`components/lab-day/LabDayCheckInSection.tsx:27` calls `POST /api/lab-management/lab-days/${labDayId}/checkin-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/checkin-token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8d56945fdf965e42", "name": "Dangling fetch: DELETE /api/lab-management/lab-days/${labDayId}/checkin-token (components/lab-day/LabDayCheckInSection.t", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/lab-days/${labDayId}/checkin-token (components/lab-day/LabDayCheckInSection.tsx:34)"}, "fullDescription": {"text": "`components/lab-day/LabDayCheckInSection.tsx:34` calls `DELETE /api/lab-management/lab-days/${labDayId}/checkin-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/lab-days/<p>/checkin-token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e756cb926b8ec351", "name": "Dangling fetch: POST /api/tracking/scenarios (components/lab-day/ScenarioRoleModal.tsx:59)", "shortDescription": {"text": "Dangling fetch: POST /api/tracking/scenarios (components/lab-day/ScenarioRoleModal.tsx:59)"}, "fullDescription": {"text": "`components/lab-day/ScenarioRoleModal.tsx:59` calls `POST /api/tracking/scenarios` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/tracking/scenarios`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-09c7eb2c3bd80514", "name": "Dangling fetch: GET /api/lab-management/student-queue?lab_day_id=${labDayId} (components/lab-day/IndividualTestingGrid.t", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/student-queue?lab_day_id=${labDayId} (components/lab-day/IndividualTestingGrid.tsx:106)"}, "fullDescription": {"text": "`components/lab-day/IndividualTestingGrid.tsx:106` calls `GET /api/lab-management/student-queue?lab_day_id=${labDayId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/student-queue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1a701059dc7524c4", "name": "Dangling fetch: PUT /api/lab-management/student-queue (components/lab-day/IndividualTestingGrid.tsx:163)", "shortDescription": {"text": "Dangling fetch: PUT /api/lab-management/student-queue (components/lab-day/IndividualTestingGrid.tsx:163)"}, "fullDescription": {"text": "`components/lab-day/IndividualTestingGrid.tsx:163` calls `PUT /api/lab-management/student-queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/student-queue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-53739b7b3a8909cf", "name": "Dangling fetch: POST /api/lab-management/student-queue (components/lab-day/IndividualTestingGrid.tsx:193)", "shortDescription": {"text": "Dangling fetch: POST /api/lab-management/student-queue (components/lab-day/IndividualTestingGrid.tsx:193)"}, "fullDescription": {"text": "`components/lab-day/IndividualTestingGrid.tsx:193` calls `POST /api/lab-management/student-queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/student-queue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-187b190588c86d37", "name": "Dangling fetch: DELETE /api/skill-sheets/${skillSheetId}/evaluations?evaluation_id=${cell.evaluationId} (components/lab-", "shortDescription": {"text": "Dangling fetch: DELETE /api/skill-sheets/${skillSheetId}/evaluations?evaluation_id=${cell.evaluationId} (components/lab-day/IndividualTestingGrid.tsx:236)"}, "fullDescription": {"text": "`components/lab-day/IndividualTestingGrid.tsx:236` calls `DELETE /api/skill-sheets/${skillSheetId}/evaluations?evaluation_id=${cell.evaluationId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/skill-sheets/<p>/evaluations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9458ff2bdcc195f3", "name": "Dangling fetch: DELETE /api/lab-management/student-queue (components/lab-day/IndividualTestingGrid.tsx:244)", "shortDescription": {"text": "Dangling fetch: DELETE /api/lab-management/student-queue (components/lab-day/IndividualTestingGrid.tsx:244)"}, "fullDescription": {"text": "`components/lab-day/IndividualTestingGrid.tsx:244` calls `DELETE /api/lab-management/student-queue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/student-queue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-09805e504460a266", "name": "Dangling fetch: GET /api/system-settings/feature.lab_day_chat (components/lab-day/LabDayChat.tsx:48)", "shortDescription": {"text": "Dangling fetch: GET /api/system-settings/feature.lab_day_chat (components/lab-day/LabDayChat.tsx:48)"}, "fullDescription": {"text": "`components/lab-day/LabDayChat.tsx:48` calls `GET /api/system-settings/feature.lab_day_chat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/system-settings/feature.lab_day_chat`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9897db52e61d385e", "name": "Dangling fetch: GET /api/lab-management/instructors?activeOnly=true (components/scheduling/LogMyShiftModal.tsx:87)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/instructors?activeOnly=true (components/scheduling/LogMyShiftModal.tsx:87)"}, "fullDescription": {"text": "`components/scheduling/LogMyShiftModal.tsx:87` calls `GET /api/lab-management/instructors?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/instructors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f861d7a2ec32e50d", "name": "Dangling fetch: POST /api/scheduling/log-shift (components/scheduling/LogMyShiftModal.tsx:123)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/log-shift (components/scheduling/LogMyShiftModal.tsx:123)"}, "fullDescription": {"text": "`components/scheduling/LogMyShiftModal.tsx:123` calls `POST /api/scheduling/log-shift` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/log-shift`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-502ec3b5c41c7c9f", "name": "Dangling fetch: POST /api/scheduling/coverage-requests (components/scheduling/RequestCoverageModal.tsx:131)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/coverage-requests (components/scheduling/RequestCoverageModal.tsx:131)"}, "fullDescription": {"text": "`components/scheduling/RequestCoverageModal.tsx:131` calls `POST /api/scheduling/coverage-requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/coverage-requests`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4e2b649f96c3818f", "name": "Dangling fetch: GET /api/scheduling/coordinator-calendar?start_date=${startDate}&end_date=${endDate}${personalQ} (compon", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/coordinator-calendar?start_date=${startDate}&end_date=${endDate}${personalQ} (components/scheduling/CoordinatorCalendarView.tsx:200)"}, "fullDescription": {"text": "`components/scheduling/CoordinatorCalendarView.tsx:200` calls `GET /api/scheduling/coordinator-calendar?start_date=${startDate}&end_date=${endDate}${personalQ}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/coordinator-calendar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e6d7243782372f4", "name": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=true (components/scheduling/CoordinatorCalendarView.ts", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=true (components/scheduling/CoordinatorCalendarView.tsx:235)"}, "fullDescription": {"text": "`components/scheduling/CoordinatorCalendarView.tsx:235` calls `GET /api/scheduling/planner/semesters?active_only=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/planner/semesters`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-07ee9ba370880ec7", "name": "Dangling fetch: GET /api/scheduling/coordinator-calendar?start_date=${start}&end_date=${end}${personalQ} (components/sch", "shortDescription": {"text": "Dangling fetch: GET /api/scheduling/coordinator-calendar?start_date=${start}&end_date=${end}${personalQ} (components/scheduling/CoordinatorCalendarView.tsx:271)"}, "fullDescription": {"text": "`components/scheduling/CoordinatorCalendarView.tsx:271` calls `GET /api/scheduling/coordinator-calendar?start_date=${start}&end_date=${end}${personalQ}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/coordinator-calendar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6f37cab976e58a9c", "name": "Dangling fetch: POST /api/scheduling/recurring-availability (components/scheduling/RecurringAvailabilityModal.tsx:94)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/recurring-availability (components/scheduling/RecurringAvailabilityModal.tsx:94)"}, "fullDescription": {"text": "`components/scheduling/RecurringAvailabilityModal.tsx:94` calls `POST /api/scheduling/recurring-availability` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/recurring-availability`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2402819c2976e626", "name": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (components/scheduling/GenerateLabShiftsModal.tsx:93)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (components/scheduling/GenerateLabShiftsModal.tsx:93)"}, "fullDescription": {"text": "`components/scheduling/GenerateLabShiftsModal.tsx:93` calls `GET /api/lab-management/cohorts?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5464d7156d061e5c", "name": "Dangling fetch: POST /api/scheduling/shifts/generate-from-labs (components/scheduling/GenerateLabShiftsModal.tsx:109)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/shifts/generate-from-labs (components/scheduling/GenerateLabShiftsModal.tsx:109)"}, "fullDescription": {"text": "`components/scheduling/GenerateLabShiftsModal.tsx:109` calls `POST /api/scheduling/shifts/generate-from-labs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/shifts/generate-from-labs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2094c9c020b87d1a", "name": "Dangling fetch: POST /api/scheduling/shifts/generate-from-labs (components/scheduling/GenerateLabShiftsModal.tsx:136)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/shifts/generate-from-labs (components/scheduling/GenerateLabShiftsModal.tsx:136)"}, "fullDescription": {"text": "`components/scheduling/GenerateLabShiftsModal.tsx:136` calls `POST /api/scheduling/shifts/generate-from-labs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/shifts/generate-from-labs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2d3b235359b979d4", "name": "Dangling fetch: GET /api/lab-management/cohorts?include_archived=false (components/scheduling/LogHoursModal.tsx:114)", "shortDescription": {"text": "Dangling fetch: GET /api/lab-management/cohorts?include_archived=false (components/scheduling/LogHoursModal.tsx:114)"}, "fullDescription": {"text": "`components/scheduling/LogHoursModal.tsx:114` calls `GET /api/lab-management/cohorts?include_archived=false` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/lab-management/cohorts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1caf08114a610fbf", "name": "Dangling fetch: POST /api/scheduling/manual-hours (components/scheduling/LogHoursModal.tsx:236)", "shortDescription": {"text": "Dangling fetch: POST /api/scheduling/manual-hours (components/scheduling/LogHoursModal.tsx:236)"}, "fullDescription": {"text": "`components/scheduling/LogHoursModal.tsx:236` calls `POST /api/scheduling/manual-hours` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scheduling/manual-hours`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b323ab1deacaa66", "name": "Dangling fetch: PUT /api/cases/${existingCase.id} (components/cases/CaseEditor.tsx:375)", "shortDescription": {"text": "Dangling fetch: PUT /api/cases/${existingCase.id} (components/cases/CaseEditor.tsx:375)"}, "fullDescription": {"text": "`components/cases/CaseEditor.tsx:375` calls `PUT /api/cases/${existingCase.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cases/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6aed378e5b7aef06", "name": "Dangling fetch: POST /api/cases (components/cases/CaseEditor.tsx:381)", "shortDescription": {"text": "Dangling fetch: POST /api/cases (components/cases/CaseEditor.tsx:381)"}, "fullDescription": {"text": "`components/cases/CaseEditor.tsx:381` calls `POST /api/cases` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cases`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5935d033bf397bf6", "name": "Dangling fetch: GET /api/cases/leaderboard/${cohortId}?${params.toString()} (components/cases/Leaderboard.tsx:57)", "shortDescription": {"text": "Dangling fetch: GET /api/cases/leaderboard/${cohortId}?${params.toString()} (components/cases/Leaderboard.tsx:57)"}, "fullDescription": {"text": "`components/cases/Leaderboard.tsx:57` calls `GET /api/cases/leaderboard/${cohortId}?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/cases/leaderboard/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d29d5557e29012ff", "name": "Dangling fetch: GET /api/clinical/summative-evaluations?studentId=${studentId} (components/clinical/SummativeEvaluations", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/summative-evaluations?studentId=${studentId} (components/clinical/SummativeEvaluationsSection.tsx:106)"}, "fullDescription": {"text": "`components/clinical/SummativeEvaluationsSection.tsx:106` calls `GET /api/clinical/summative-evaluations?studentId=${studentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/summative-evaluations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-64e14d84d8bf6b3b", "name": "Dangling fetch: GET /api/clinical/summative-scenarios (components/clinical/SummativeEvaluationsSection.tsx:113)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/summative-scenarios (components/clinical/SummativeEvaluationsSection.tsx:113)"}, "fullDescription": {"text": "`components/clinical/SummativeEvaluationsSection.tsx:113` calls `GET /api/clinical/summative-scenarios` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/summative-scenarios`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-13c6bfc733a6dcee", "name": "Dangling fetch: GET /api/students?cohortId=${cohortId} (components/clinical/SummativeEvaluationsSection.tsx:121)", "shortDescription": {"text": "Dangling fetch: GET /api/students?cohortId=${cohortId} (components/clinical/SummativeEvaluationsSection.tsx:121)"}, "fullDescription": {"text": "`components/clinical/SummativeEvaluationsSection.tsx:121` calls `GET /api/students?cohortId=${cohortId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/students`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d6d6dc807f4bf3e3", "name": "Dangling fetch: POST /api/clinical/summative-evaluations (components/clinical/SummativeEvaluationsSection.tsx:155)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/summative-evaluations (components/clinical/SummativeEvaluationsSection.tsx:155)"}, "fullDescription": {"text": "`components/clinical/SummativeEvaluationsSection.tsx:155` calls `POST /api/clinical/summative-evaluations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/summative-evaluations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9edafe45ee22ec40", "name": "Dangling fetch: GET /api/clinical/internships/${internshipId}/preceptors (components/clinical/PreceptorsSection.tsx:151)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId}/preceptors (components/clinical/PreceptorsSection.tsx:151)"}, "fullDescription": {"text": "`components/clinical/PreceptorsSection.tsx:151` calls `GET /api/clinical/internships/${internshipId}/preceptors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>/preceptors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-70efc5c90eb0fddd", "name": "Dangling fetch: GET /api/clinical/preceptors?activeOnly=true (components/clinical/PreceptorsSection.tsx:165)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/preceptors?activeOnly=true (components/clinical/PreceptorsSection.tsx:165)"}, "fullDescription": {"text": "`components/clinical/PreceptorsSection.tsx:165` calls `GET /api/clinical/preceptors?activeOnly=true` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/preceptors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2673eae3e1978b24", "name": "Dangling fetch: POST /api/clinical/internships/${internshipId}/preceptors (components/clinical/PreceptorsSection.tsx:189", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/internships/${internshipId}/preceptors (components/clinical/PreceptorsSection.tsx:189)"}, "fullDescription": {"text": "`components/clinical/PreceptorsSection.tsx:189` calls `POST /api/clinical/internships/${internshipId}/preceptors` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>/preceptors`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d4aea70f56147bee", "name": "Dangling fetch: DELETE /api/clinical/internships/${internshipId}/preceptors/${assignmentId} (components/clinical/Precept", "shortDescription": {"text": "Dangling fetch: DELETE /api/clinical/internships/${internshipId}/preceptors/${assignmentId} (components/clinical/PreceptorsSection.tsx:231)"}, "fullDescription": {"text": "`components/clinical/PreceptorsSection.tsx:231` calls `DELETE /api/clinical/internships/${internshipId}/preceptors/${assignmentId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>/preceptors/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dea001cc56d96e2c", "name": "Dangling fetch: GET /api/clinical/internships/${internshipId}/closeout/employment (components/clinical/EmploymentVerific", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId}/closeout/employment (components/clinical/EmploymentVerificationModal.tsx:178)"}, "fullDescription": {"text": "`components/clinical/EmploymentVerificationModal.tsx:178` calls `GET /api/clinical/internships/${internshipId}/closeout/employment` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>/closeout/employment`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a645d962d35bfb84", "name": "Dangling fetch: GET /api/clinical/preceptor-eval/tokens?internship_id=${internshipId} (components/clinical/PreceptorEval", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/preceptor-eval/tokens?internship_id=${internshipId} (components/clinical/PreceptorEvalModal.tsx:46)"}, "fullDescription": {"text": "`components/clinical/PreceptorEvalModal.tsx:46` calls `GET /api/clinical/preceptor-eval/tokens?internship_id=${internshipId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/preceptor-eval/tokens`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3ee802b83ba66a89", "name": "Dangling fetch: POST /api/clinical/preceptor-eval/send (components/clinical/PreceptorEvalModal.tsx:68)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/preceptor-eval/send (components/clinical/PreceptorEvalModal.tsx:68)"}, "fullDescription": {"text": "`components/clinical/PreceptorEvalModal.tsx:68` calls `POST /api/clinical/preceptor-eval/send` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/preceptor-eval/send`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-23f7aa5c8ebad44d", "name": "Dangling fetch: GET /api/clinical/internships/${internshipId}/closeout (components/clinical/CloseoutSection.tsx:161)", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId}/closeout (components/clinical/CloseoutSection.tsx:161)"}, "fullDescription": {"text": "`components/clinical/CloseoutSection.tsx:161` calls `GET /api/clinical/internships/${internshipId}/closeout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>/closeout`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0d7b89dcbacac2a9", "name": "Dangling fetch: GET /api/clinical/internships/${internshipId}/closeout/employment (components/clinical/CloseoutSection.t", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId}/closeout/employment (components/clinical/CloseoutSection.tsx:178)"}, "fullDescription": {"text": "`components/clinical/CloseoutSection.tsx:178` calls `GET /api/clinical/internships/${internshipId}/closeout/employment` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>/closeout/employment`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a575de65e3a50885", "name": "Dangling fetch: GET /api/clinical/internships/${internshipId}/closeout/checklist (components/clinical/CloseoutSection.ts", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId}/closeout/checklist (components/clinical/CloseoutSection.tsx:191)"}, "fullDescription": {"text": "`components/clinical/CloseoutSection.tsx:191` calls `GET /api/clinical/internships/${internshipId}/closeout/checklist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>/closeout/checklist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-73f49f1499c9d63e", "name": "Dangling fetch: PUT /api/clinical/internships/${internshipId}/closeout/checklist (components/clinical/CloseoutSection.ts", "shortDescription": {"text": "Dangling fetch: PUT /api/clinical/internships/${internshipId}/closeout/checklist (components/clinical/CloseoutSection.tsx:215)"}, "fullDescription": {"text": "`components/clinical/CloseoutSection.tsx:215` calls `PUT /api/clinical/internships/${internshipId}/closeout/checklist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>/closeout/checklist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b033983bfc9f110", "name": "Dangling fetch: PATCH /api/clinical/internships/${internshipId}/closeout (components/clinical/CloseoutSection.tsx:276)", "shortDescription": {"text": "Dangling fetch: PATCH /api/clinical/internships/${internshipId}/closeout (components/clinical/CloseoutSection.tsx:276)"}, "fullDescription": {"text": "`components/clinical/CloseoutSection.tsx:276` calls `PATCH /api/clinical/internships/${internshipId}/closeout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>/closeout`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c966e9ef965bc2f0", "name": "Dangling fetch: POST /api/clinical/internships/${internshipId}/closeout/documents (components/clinical/CloseoutSection.t", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/internships/${internshipId}/closeout/documents (components/clinical/CloseoutSection.tsx:317)"}, "fullDescription": {"text": "`components/clinical/CloseoutSection.tsx:317` calls `POST /api/clinical/internships/${internshipId}/closeout/documents` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>/closeout/documents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e0f35a049c28f40", "name": "Dangling fetch: DELETE /api/clinical/internships/${internshipId}/closeout/documents?docId=${docId} (components/clinical/", "shortDescription": {"text": "Dangling fetch: DELETE /api/clinical/internships/${internshipId}/closeout/documents?docId=${docId} (components/clinical/CloseoutSection.tsx:351)"}, "fullDescription": {"text": "`components/clinical/CloseoutSection.tsx:351` calls `DELETE /api/clinical/internships/${internshipId}/closeout/documents?docId=${docId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>/closeout/documents`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3b4b1046c716d10f", "name": "Dangling fetch: POST /api/clinical/internships/${internshipId}/closeout (components/clinical/CloseoutSection.tsx:373)", "shortDescription": {"text": "Dangling fetch: POST /api/clinical/internships/${internshipId}/closeout (components/clinical/CloseoutSection.tsx:373)"}, "fullDescription": {"text": "`components/clinical/CloseoutSection.tsx:373` calls `POST /api/clinical/internships/${internshipId}/closeout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>/closeout`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-92f57ad5d4644432", "name": "Dangling fetch: GET /api/clinical/internships/${internshipId}/closeout/summary (components/clinical/CloseoutSection.tsx:", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId}/closeout/summary (components/clinical/CloseoutSection.tsx:720)"}, "fullDescription": {"text": "`components/clinical/CloseoutSection.tsx:720` calls `GET /api/clinical/internships/${internshipId}/closeout/summary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>/closeout/summary`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ca096fbc0bb2d1a8", "name": "Dangling fetch: GET /api/clinical/internships/${internshipId}/closeout/packet (components/clinical/CloseoutSection.tsx:1", "shortDescription": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId}/closeout/packet (components/clinical/CloseoutSection.tsx:1324)"}, "fullDescription": {"text": "`components/clinical/CloseoutSection.tsx:1324` calls `GET /api/clinical/internships/${internshipId}/closeout/packet` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/clinical/internships/<p>/closeout/packet`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f844c97ddc94b679", "name": "Dangling fetch: GET /api/submissions?pollId=${pollData.id} (components/scheduler/SchedulerAdmin.tsx:84)", "shortDescription": {"text": "Dangling fetch: GET /api/submissions?pollId=${pollData.id} (components/scheduler/SchedulerAdmin.tsx:84)"}, "fullDescription": {"text": "`components/scheduler/SchedulerAdmin.tsx:84` calls `GET /api/submissions?pollId=${pollData.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/submissions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-96056abd00c5a441", "name": "Dangling fetch: GET /api/calendar/status (components/scheduler/SchedulerAdmin.tsx:177)", "shortDescription": {"text": "Dangling fetch: GET /api/calendar/status (components/scheduler/SchedulerAdmin.tsx:177)"}, "fullDescription": {"text": "`components/scheduler/SchedulerAdmin.tsx:177` calls `GET /api/calendar/status` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/status`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7e8abb8dc86d894f", "name": "Dangling fetch: POST /api/calendar/create-event (components/scheduler/SchedulerAdmin.tsx:226)", "shortDescription": {"text": "Dangling fetch: POST /api/calendar/create-event (components/scheduler/SchedulerAdmin.tsx:226)"}, "fullDescription": {"text": "`components/scheduler/SchedulerAdmin.tsx:226` calls `POST /api/calendar/create-event` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/calendar/create-event`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e25915f5b8f5d8a", "name": "Dangling fetch: POST /api/notifications/send-email (components/scheduler/SchedulerAdmin.tsx:304)", "shortDescription": {"text": "Dangling fetch: POST /api/notifications/send-email (components/scheduler/SchedulerAdmin.tsx:304)"}, "fullDescription": {"text": "`components/scheduler/SchedulerAdmin.tsx:304` calls `POST /api/notifications/send-email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notifications/send-email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d10a2d4375fb17e4", "name": "Dangling fetch: POST /api/submissions (components/scheduler/SchedulerParticipant.tsx:111)", "shortDescription": {"text": "Dangling fetch: POST /api/submissions (components/scheduler/SchedulerParticipant.tsx:111)"}, "fullDescription": {"text": "`components/scheduler/SchedulerParticipant.tsx:111` calls `POST /api/submissions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/submissions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d6a66ddeb25e1578", "name": "Dangling fetch: POST /api/errors/log (components/ui/ErrorBoundary.tsx:48)", "shortDescription": {"text": "Dangling fetch: POST /api/errors/log (components/ui/ErrorBoundary.tsx:48)"}, "fullDescription": {"text": "`components/ui/ErrorBoundary.tsx:48` calls `POST /api/errors/log` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/errors/log`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7aee0759eee7fb16", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (lib/calendar-availability.ts:17)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (lib/calendar-availability.ts:17)"}, "fullDescription": {"text": "`lib/calendar-availability.ts:17` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c85fc1e3107ecc24", "name": "Dangling fetch: POST https://www.googleapis.com/calendar/v3/freeBusy (lib/calendar-availability.ts:65)", "shortDescription": {"text": "Dangling fetch: POST https://www.googleapis.com/calendar/v3/freeBusy (lib/calendar-availability.ts:65)"}, "fullDescription": {"text": "`lib/calendar-availability.ts:65` calls `POST https://www.googleapis.com/calendar/v3/freeBusy` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.googleapis.com/calendar/v3/freebusy`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0ae38010c60493f1", "name": "Unused endpoint: POST /webhook", "shortDescription": {"text": "Unused endpoint: POST /webhook"}, "fullDescription": {"text": "`app/admin/webhooks/page.tsx` declares `POST /webhook` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/24577"}, "properties": {"repository": "bhartnell/pmi-scheduler", "repoUrl": "https://github.com/bhartnell/pmi-scheduler", "branch": "main"}, "results": [{"ruleId": "scanner-3c29a4be888b1ff0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/site-visit-reminders/route.ts:94"}, "properties": {"repobilityId": "ecf2a217e73ff6ff", "scanner": "scanner-primary", "fingerprint": "3c29a4be888b1ff0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7223035f7dbc5e0b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/affiliation-expiry/route.ts:69"}, "properties": {"repobilityId": "a353a63f32f5fdb5", "scanner": "scanner-primary", "fingerprint": "7223035f7dbc5e0b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-18f72ed37c78334b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/debrief-reminder/route.ts:59"}, "properties": {"repobilityId": "851269bdb0ba21c7", "scanner": "scanner-primary", "fingerprint": "18f72ed37c78334b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-339118c328abfa00", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/availability-reminders/route.ts:242"}, "properties": {"repobilityId": "1683a73a9768c50d", "scanner": "scanner-primary", "fingerprint": "339118c328abfa00", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e1a3510e418ea3f2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/compliance-expiry/route.ts:89"}, "properties": {"repobilityId": "3f11679ec5b31d9d", "scanner": "scanner-primary", "fingerprint": "e1a3510e418ea3f2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a2bb85c9d7601cb0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/data-export/route.ts:143"}, "properties": {"repobilityId": "31eca368cd125ea0", "scanner": "scanner-primary", "fingerprint": "a2bb85c9d7601cb0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5a9fa6c053310fd1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/cert-expiry/route.ts:88"}, "properties": {"repobilityId": "b2cdb5b88cf0bbf5", "scanner": "scanner-primary", "fingerprint": "5a9fa6c053310fd1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-12d74e34ebe10be0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/lvfr-weekly-report/route.ts:27"}, "properties": {"repobilityId": "6fbb1d6d70ace067", "scanner": "scanner-primary", "fingerprint": "12d74e34ebe10be0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9370856f01a4f3fe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/lab-reminder/route.ts:82"}, "properties": {"repobilityId": "eba2280468277eeb", "scanner": "scanner-primary", "fingerprint": "9370856f01a4f3fe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-217646e3ef0bc97c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/internship-milestones/route.ts:79"}, "properties": {"repobilityId": "26ddd05c8d8769ed", "scanner": "scanner-primary", "fingerprint": "217646e3ef0bc97c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-95f7a557491d0e45", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/daily-digest/route.ts:381"}, "properties": {"repobilityId": "13c21b778fb5671f", "scanner": "scanner-primary", "fingerprint": "95f7a557491d0e45", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6a9163fc08e84532", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/clinical-hours-reminder/route.ts:74"}, "properties": {"repobilityId": "bb0e3ea1313b8958", "scanner": "scanner-primary", "fingerprint": "6a9163fc08e84532", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7d87d6038853517f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/system-health/route.ts:305"}, "properties": {"repobilityId": "71c64b991bdb6da2", "scanner": "scanner-primary", "fingerprint": "7d87d6038853517f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8af7b35e90cf685e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/attendance-alerts/route.ts:66"}, "properties": {"repobilityId": "87cc403b388b0bba", "scanner": "scanner-primary", "fingerprint": "8af7b35e90cf685e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a4e1fc648b21feab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/scheduled-exports/route.ts:465"}, "properties": {"repobilityId": "c369f793e3630901", "scanner": "scanner-primary", "fingerprint": "a4e1fc648b21feab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2a51ec9bce4c6f40", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/cron/cert-expiry-notifications/route.ts:95"}, "properties": {"repobilityId": "dbc1da02ece6f45b", "scanner": "scanner-primary", "fingerprint": "2a51ec9bce4c6f40", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4d22a87f411a149b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 app/api/lvfr-aemt/dashboard/route.ts:168"}, "properties": {"repobilityId": "37e6330c42e2d6a5", "scanner": "scanner-primary", "fingerprint": "4d22a87f411a149b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-291d3b14b747614b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/lab-management/lab-days/[id]/pdf-packet/route.ts:262"}, "properties": {"repobilityId": "dd1c1a2e78ceae90", "scanner": "scanner-primary", "fingerprint": "291d3b14b747614b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-07f477538c710e25", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/skill-sheets/[id]/evaluate/route.ts:239"}, "properties": {"repobilityId": "cb833a95135b285b", "scanner": "scanner-primary", "fingerprint": "07f477538c710e25", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c282ab77a91bdf5d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/api/scheduling/planner/blocks/[id]/route.ts:77"}, "properties": {"repobilityId": "f9657570681cc816", "scanner": "scanner-primary", "fingerprint": "c282ab77a91bdf5d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c878e4698a0a2b2a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/scenario-library/page.tsx:565"}, "properties": {"repobilityId": "339ff2a96a386c4a", "scanner": "scanner-primary", "fingerprint": "c878e4698a0a2b2a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ed616246d752f3b4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/groups/page.tsx:985"}, "properties": {"repobilityId": "41f02d91884af644", "scanner": "scanner-primary", "fingerprint": "ed616246d752f3b4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3a69adb8f910dbbc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/templates/page.tsx:412"}, "properties": {"repobilityId": "308c16026fa294a7", "scanner": "scanner-primary", "fingerprint": "3a69adb8f910dbbc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-833ae3d1c6109d15", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/templates/review/[id]/page.tsx:224"}, "properties": {"repobilityId": "f2e56205facc7eb1", "scanner": "scanner-primary", "fingerprint": "833ae3d1c6109d15", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dafcddf88cb6374c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/templates/review/[id]/item/[itemId]/page.tsx:352"}, "properties": {"repobilityId": "6ac356df0e7713d8", "scanner": "scanner-primary", "fingerprint": "dafcddf88cb6374c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-58fb07f4a4b35968", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/stations/log/page.tsx:442"}, "properties": {"repobilityId": "26fe833e371cb51d", "scanner": "scanner-primary", "fingerprint": "58fb07f4a4b35968", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7aafab6732869c68", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/scenarios/page.tsx:631"}, "properties": {"repobilityId": "b0f6a29e94760f61", "scanner": "scanner-primary", "fingerprint": "7aafab6732869c68", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-be752077097b18af", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/skill-drills/page.tsx:1066"}, "properties": {"repobilityId": "1bd1f65a482c2079", "scanner": "scanner-primary", "fingerprint": "be752077097b18af", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-055aea8fbddc7f5b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/skill-sheets/page.tsx:400"}, "properties": {"repobilityId": "192129a20afd808b", "scanner": "scanner-primary", "fingerprint": "055aea8fbddc7f5b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a05ec19f059944de", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/schedule/page.tsx:1198"}, "properties": {"repobilityId": "d86c657712d87904", "scanner": "scanner-primary", "fingerprint": "a05ec19f059944de", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-184a796bea8f8684", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/schedule/[id]/checkoff/page.tsx:359"}, "properties": {"repobilityId": "378e1662184872f2", "scanner": "scanner-primary", "fingerprint": "184a796bea8f8684", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9be0fca52aea988a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/schedule/[id]/assignments/page.tsx:369"}, "properties": {"repobilityId": "25d75f0fbed1b508", "scanner": "scanner-primary", "fingerprint": "9be0fca52aea988a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e0a9f533bead9270", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 app/labs/schedule/[id]/assignments/page.tsx:264"}, "properties": {"repobilityId": "f047a60ab9b59806", "scanner": "scanner-primary", "fingerprint": "e0a9f533bead9270", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-49b9895c577b99d8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/schedule/[id]/coordinator/page.tsx:1513"}, "properties": {"repobilityId": "182943493818bbe7", "scanner": "scanner-primary", "fingerprint": "49b9895c577b99d8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8ef9ff308c3d99d5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/schedule/[id]/edit/page.tsx:1312"}, "properties": {"repobilityId": "f59f5f3214a6902a", "scanner": "scanner-primary", "fingerprint": "8ef9ff308c3d99d5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-517331784291444b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/schedule/new/page.tsx:1692"}, "properties": {"repobilityId": "c58c2d1a26c2141f", "scanner": "scanner-primary", "fingerprint": "517331784291444b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3f7761fd5c2cfeb7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/labs/seating/charts/[id]/page.tsx:716"}, "properties": {"repobilityId": "575d310a8ed7cd43", "scanner": "scanner-primary", "fingerprint": "3f7761fd5c2cfeb7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1dc4e8f464e0aec5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/lvfr-aemt/page.tsx:338"}, "properties": {"repobilityId": "80f0ba9ce7b1ca1d", "scanner": "scanner-primary", "fingerprint": "1dc4e8f464e0aec5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0340d27f704a618d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/lvfr-aemt/files/page.tsx:363"}, "properties": {"repobilityId": "1dfcf6de0b6f8d82", "scanner": "scanner-primary", "fingerprint": "0340d27f704a618d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d04afdd5e6c456e9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/lvfr-aemt/grades/page.tsx:294"}, "properties": {"repobilityId": "36c6ce4ec63532cf", "scanner": "scanner-primary", "fingerprint": "d04afdd5e6c456e9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7bea7f0e025030a7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/lvfr-aemt/planner/page.tsx:482"}, "properties": {"repobilityId": "abe2979d61b2838b", "scanner": "scanner-primary", "fingerprint": "7bea7f0e025030a7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-27f41ddd164d066d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/lvfr-aemt/scheduling/page.tsx:217"}, "properties": {"repobilityId": "e6a5e097590a75d7", "scanner": "scanner-primary", "fingerprint": "27f41ddd164d066d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f943f650fd72523f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/lvfr-aemt/skills/page.tsx:605"}, "properties": {"repobilityId": "aaa2dda65859a670", "scanner": "scanner-primary", "fingerprint": "f943f650fd72523f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0e4a2010a4ced8a0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/page.tsx:626"}, "properties": {"repobilityId": "9c2c16c32be292da", "scanner": "scanner-primary", "fingerprint": "0e4a2010a4ced8a0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-21d1885ad60a977a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/dashboard-defaults/page.tsx:397"}, "properties": {"repobilityId": "b3d62b9710efcd88", "scanner": "scanner-primary", "fingerprint": "21d1885ad60a977a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6b66495213fbddd0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/bulk-operations/page.tsx:851"}, "properties": {"repobilityId": "98288da5432e3ff6", "scanner": "scanner-primary", "fingerprint": "6b66495213fbddd0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c02b60ffb997ef26", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/equipment/page.tsx:579"}, "properties": {"repobilityId": "4de62b2e011793ac", "scanner": "scanner-primary", "fingerprint": "c02b60ffb997ef26", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f5d5fe29025fc3a2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/equipment/maintenance/page.tsx:661"}, "properties": {"repobilityId": "f7e9c4bc7db1f00e", "scanner": "scanner-primary", "fingerprint": "f5d5fe29025fc3a2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bc3ee75aae32ae1b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/user-activity/page.tsx:112"}, "properties": {"repobilityId": "acc540b7653ccdf7", "scanner": "scanner-primary", "fingerprint": "bc3ee75aae32ae1b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-efa79a286b0c7a72", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/osce-events/page.tsx:505"}, "properties": {"repobilityId": "3e0631bdd9e076ba", "scanner": "scanner-primary", "fingerprint": "efa79a286b0c7a72", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b21630776cce5b31", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/access-requests/page.tsx:209"}, "properties": {"repobilityId": "2c73926bc12c8b4f", "scanner": "scanner-primary", "fingerprint": "b21630776cce5b31", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-595bf4ed360ab8d9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/feedback/page.tsx:711"}, "properties": {"repobilityId": "d47ca9ad081eb5be", "scanner": "scanner-primary", "fingerprint": "595bf4ed360ab8d9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2f5a62005fe88147", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/alumni/page.tsx:1343"}, "properties": {"repobilityId": "bc6a7f5c7ee3cbcf", "scanner": "scanner-primary", "fingerprint": "2f5a62005fe88147", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-51ebbb614c2665c1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/scenarios/audit/page.tsx:1117"}, "properties": {"repobilityId": "77eed7f9a22e95d2", "scanner": "scanner-primary", "fingerprint": "51ebbb614c2665c1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dc9fc97756652d3a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/scenarios/transform/page.tsx:404"}, "properties": {"repobilityId": "e2ffd6c018b98432", "scanner": "scanner-primary", "fingerprint": "dc9fc97756652d3a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-041a6538a2a16c70", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/scenarios/bulk-import/page.tsx:912"}, "properties": {"repobilityId": "98b2b2f3c3cddcdb", "scanner": "scanner-primary", "fingerprint": "041a6538a2a16c70", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e205b7b53ed97d9e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/scenarios/cleanup/page.tsx:358"}, "properties": {"repobilityId": "951175c61d364cca", "scanner": "scanner-primary", "fingerprint": "e205b7b53ed97d9e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-572f1ebb9ae736b6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/volunteer-events/page.tsx:874"}, "properties": {"repobilityId": "4f18a07d6fdd7193", "scanner": "scanner-primary", "fingerprint": "572f1ebb9ae736b6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6607bfe115c479c0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/broadcast/page.tsx:179"}, "properties": {"repobilityId": "4211cbe1f20e1cd4", "scanner": "scanner-primary", "fingerprint": "6607bfe115c479c0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b962af3867ef8699", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/open-labs/page.tsx:472"}, "properties": {"repobilityId": "d6d3191f87d669e4", "scanner": "scanner-primary", "fingerprint": "b962af3867ef8699", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1271344f0d992d21", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/webhooks/page.tsx:1027"}, "properties": {"repobilityId": "1b954923d1edbb02", "scanner": "scanner-primary", "fingerprint": "1271344f0d992d21", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ab5991f49009a52f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/poll/[id]/page.tsx:88"}, "properties": {"repobilityId": "d5b54b2ee1aba84a", "scanner": "scanner-primary", "fingerprint": "ab5991f49009a52f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bf12c246cbdd3669", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/certifications/page.tsx:723"}, "properties": {"repobilityId": "d43a9bd39d7aaf41", "scanner": "scanner-primary", "fingerprint": "bf12c246cbdd3669", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-38f815766b8f52d2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/semesters/page.tsx:443"}, "properties": {"repobilityId": "9ac72ce7fa48914e", "scanner": "scanner-primary", "fingerprint": "38f815766b8f52d2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ce6355714eabae5b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/lab-templates/page.tsx:836"}, "properties": {"repobilityId": "eaad3141975de67e", "scanner": "scanner-primary", "fingerprint": "ce6355714eabae5b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c25a3a5d0a063482", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/lab-templates/import/page.tsx:718"}, "properties": {"repobilityId": "8d5af72827c64060", "scanner": "scanner-primary", "fingerprint": "c25a3a5d0a063482", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-63ca43785cde033b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/osce-tokens/page.tsx:202"}, "properties": {"repobilityId": "f92b728e625d1b9c", "scanner": "scanner-primary", "fingerprint": "63ca43785cde033b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2c42298fe9610c58", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/compliance/page.tsx:385"}, "properties": {"repobilityId": "65be3adac6b08427", "scanner": "scanner-primary", "fingerprint": "2c42298fe9610c58", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fe1fdac26d3419e1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/system-alerts/page.tsx:424"}, "properties": {"repobilityId": "1d64842fdf44ab07", "scanner": "scanner-primary", "fingerprint": "fe1fdac26d3419e1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fc8631be2fb9c114", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/announcements/page.tsx:595"}, "properties": {"repobilityId": "b882708f11d2fcfb", "scanner": "scanner-primary", "fingerprint": "fc8631be2fb9c114", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-18fb895057ed3cc9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/email-templates/page.tsx:408"}, "properties": {"repobilityId": "8e0af2fc05723d9a", "scanner": "scanner-primary", "fingerprint": "18fb895057ed3cc9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4e66706180736736", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/system-health/page.tsx:628"}, "properties": {"repobilityId": "1cfba0fbae8437ad", "scanner": "scanner-primary", "fingerprint": "4e66706180736736", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-56a6e018e2e41985", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/time-clock/page.tsx:499"}, "properties": {"repobilityId": "69f362997e2fdcc4", "scanner": "scanner-primary", "fingerprint": "56a6e018e2e41985", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-55ada01fd4379c6d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/cases/generate/page.tsx:853"}, "properties": {"repobilityId": "d2cee64b4fd79cd8", "scanner": "scanner-primary", "fingerprint": "55ada01fd4379c6d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cd66e27c212790f3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/calendar-sync/page.tsx:987"}, "properties": {"repobilityId": "6d81d2124e67a601", "scanner": "scanner-primary", "fingerprint": "cd66e27c212790f3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-75ad0bcd3c29b76b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/admin/audit-log/page.tsx:140"}, "properties": {"repobilityId": "41157ed9444bc1d5", "scanner": "scanner-primary", "fingerprint": "75ad0bcd3c29b76b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9902cc8352ba86d7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/feedback/my-submissions/page.tsx:295"}, "properties": {"repobilityId": "f486f2e63c12304a", "scanner": "scanner-primary", "fingerprint": "9902cc8352ba86d7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b8b7a32c4e812c53", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/reports/onboarding-status/page.tsx:290"}, "properties": {"repobilityId": "38535afd7d59858e", "scanner": "scanner-primary", "fingerprint": "b8b7a32c4e812c53", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-82f19436c8101d5b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/reports/scenario-usage/page.tsx:411"}, "properties": {"repobilityId": "161bb42fc2f1afbc", "scanner": "scanner-primary", "fingerprint": "82f19436c8101d5b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-960704e82fef9850", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/reports/builder/page.tsx:1130"}, "properties": {"repobilityId": "380d458430fee06b", "scanner": "scanner-primary", "fingerprint": "960704e82fef9850", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f95d0f94d4cf8eaf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/reports/instructor-workload/page.tsx:431"}, "properties": {"repobilityId": "54849741f790d7b8", "scanner": "scanner-primary", "fingerprint": "f95d0f94d4cf8eaf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-def0e6a8d5d85c6e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/reports/cohort-comparison/page.tsx:120"}, "properties": {"repobilityId": "0fc26d3a6c0bc756", "scanner": "scanner-primary", "fingerprint": "def0e6a8d5d85c6e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dba6fedcf976a95e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/reports/program-outcomes/page.tsx:1029"}, "properties": {"repobilityId": "03bbc4c62ec68516", "scanner": "scanner-primary", "fingerprint": "dba6fedcf976a95e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-79b2d77f0568e175", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/reports/gradebook/page.tsx:697"}, "properties": {"repobilityId": "e0e2c4fdb483ae77", "scanner": "scanner-primary", "fingerprint": "79b2d77f0568e175", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b0c74eff3a5a9f4a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/resources/page.tsx:485"}, "properties": {"repobilityId": "cc68f9aa19c993d1", "scanner": "scanner-primary", "fingerprint": "b0c74eff3a5a9f4a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7bbcd7a242d9cc86", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/poll/[id]/page.tsx:96"}, "properties": {"repobilityId": "ae1634a06fa369cb", "scanner": "scanner-primary", "fingerprint": "7bbcd7a242d9cc86", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-587975fb123c45cb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/students/[id]/progress/page.tsx:956"}, "properties": {"repobilityId": "597e76aaf8931f69", "scanner": "scanner-primary", "fingerprint": "587975fb123c45cb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c5c1acb237822728", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/skill-sheets/page.tsx:309"}, "properties": {"repobilityId": "8111768ade5340dd", "scanner": "scanner-primary", "fingerprint": "c5c1acb237822728", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-854ddd4ffbb43ce6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/skill-sheets/[id]/page.tsx:698"}, "properties": {"repobilityId": "ff4e8c94d966ea47", "scanner": "scanner-primary", "fingerprint": "854ddd4ffbb43ce6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9032e52377441464", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/settings/page.tsx:377"}, "properties": {"repobilityId": "a007395f5fe452fc", "scanner": "scanner-primary", "fingerprint": "9032e52377441464", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b12da12522bb9ef3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/settings/sessions/page.tsx:122"}, "properties": {"repobilityId": "11b5480d159882e2", "scanner": "scanner-primary", "fingerprint": "b12da12522bb9ef3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7e86865a3d55e8f4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/instructor/email-history/page.tsx:279"}, "properties": {"repobilityId": "ad72681a332f056a", "scanner": "scanner-primary", "fingerprint": "7e86865a3d55e8f4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6f169d9ec844fd85", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 app/instructor/certifications/page.tsx:203"}, "properties": {"repobilityId": "909dc63284cce1a7", "scanner": "scanner-primary", "fingerprint": "6f169d9ec844fd85", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-b57a1e0721c58f6f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/student/page.tsx:531"}, "properties": {"repobilityId": "c1a5f983223356bf", "scanner": "scanner-primary", "fingerprint": "b57a1e0721c58f6f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ab503a241dc7f43c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/student/labs/page.tsx:460"}, "properties": {"repobilityId": "d1126acc4d38a9ca", "scanner": "scanner-primary", "fingerprint": "ab503a241dc7f43c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7d2fbe5d8bd8a157", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/student/my-progress/page.tsx:797"}, "properties": {"repobilityId": "869f307b408d64eb", "scanner": "scanner-primary", "fingerprint": "7d2fbe5d8bd8a157", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ef59e8dd2ef33c44", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/student/skill-evaluations/[id]/page.tsx:181"}, "properties": {"repobilityId": "41a3f2ea1d1ecbca", "scanner": "scanner-primary", "fingerprint": "ef59e8dd2ef33c44", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f98cf96b720a35ad", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/student/available-labs/page.tsx:737"}, "properties": {"repobilityId": "19cd288b76b88be5", "scanner": "scanner-primary", "fingerprint": "f98cf96b720a35ad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1cbf8c4ba44eb24e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/student/documents/page.tsx:675"}, "properties": {"repobilityId": "ddc0b0d4a3e96d3e", "scanner": "scanner-primary", "fingerprint": "1cbf8c4ba44eb24e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-57d9a4ac90d34ee3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/calendar/page.tsx:1604"}, "properties": {"repobilityId": "621a973e4f61084a", "scanner": "scanner-primary", "fingerprint": "57d9a4ac90d34ee3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-10d55527fa1b2bff", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/tasks/page.tsx:813"}, "properties": {"repobilityId": "432bf5e0765e82c1", "scanner": "scanner-primary", "fingerprint": "10d55527fa1b2bff", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-84a7dff52fbe93f8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/tasks/[id]/page.tsx:309"}, "properties": {"repobilityId": "c4de8039dacbf512", "scanner": "scanner-primary", "fingerprint": "84a7dff52fbe93f8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-169bba6a856764e5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 app/scheduling/page.tsx:1344"}, "properties": {"repobilityId": "de97bfb4f4d432f2", "scanner": "scanner-primary", "fingerprint": "169bba6a856764e5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-76f649b24a147b86", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/shifts/new/page.tsx:1048"}, "properties": {"repobilityId": "4c6813eb3e487a7e", "scanner": "scanner-primary", "fingerprint": "76f649b24a147b86", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9756d36a3584b9dd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/resource-bookings/page.tsx:615"}, "properties": {"repobilityId": "fbe478d256e98ecf", "scanner": "scanner-primary", "fingerprint": "9756d36a3584b9dd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e605927c245b33fb", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 app/scheduling/resource-bookings/page.tsx:904"}, "properties": {"repobilityId": "d615be1198ab2823", "scanner": "scanner-primary", "fingerprint": "e605927c245b33fb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-73f03de9c7859964", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/availability/page.tsx:688"}, "properties": {"repobilityId": "338c659caced2874", "scanner": "scanner-primary", "fingerprint": "73f03de9c7859964", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2f9279feec6de79c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/availability/all/page.tsx:460"}, "properties": {"repobilityId": "1325a2bba535b893", "scanner": "scanner-primary", "fingerprint": "2f9279feec6de79c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9c4287140ebf73e6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/team-availability/page.tsx:480"}, "properties": {"repobilityId": "3e87ad982e1d6cf7", "scanner": "scanner-primary", "fingerprint": "9c4287140ebf73e6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-162b4704d9bab10e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/planner/page.tsx:413"}, "properties": {"repobilityId": "8cd9687bd1c60aeb", "scanner": "scanner-primary", "fingerprint": "162b4704d9bab10e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c414af4ad7a02060", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/planner/workload/page.tsx:225"}, "properties": {"repobilityId": "70e0e54cec012591", "scanner": "scanner-primary", "fingerprint": "c414af4ad7a02060", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-029cda023a032722", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/scheduling/planner/templates/page.tsx:389"}, "properties": {"repobilityId": "5b2257361b105be4", "scanner": "scanner-primary", "fingerprint": "029cda023a032722", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ca99bc680eba4265", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/skill-evaluations/[id]/page.tsx:212"}, "properties": {"repobilityId": "8b1556b8b99f8dbe", "scanner": "scanner-primary", "fingerprint": "ca99bc680eba4265", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9acf8164edc1e554", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/admin/smc/page.tsx:1392"}, "properties": {"repobilityId": "17b6d436852a14df", "scanner": "scanner-primary", "fingerprint": "9acf8164edc1e554", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3ed34ed12767ce8e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/planner/page.tsx:414"}, "properties": {"repobilityId": "77426db3aa024e80", "scanner": "scanner-primary", "fingerprint": "3ed34ed12767ce8e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fe943ba207c0b913", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/planner/workload/page.tsx:225"}, "properties": {"repobilityId": "3844ef1a0d5c56d6", "scanner": "scanner-primary", "fingerprint": "fe943ba207c0b913", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-90b601d2717f38e8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/planner/templates/page.tsx:389"}, "properties": {"repobilityId": "5116c6c5e8be428e", "scanner": "scanner-primary", "fingerprint": "90b601d2717f38e8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-71fbaf6b44bfe3c4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/students/page.tsx:321"}, "properties": {"repobilityId": "8ffbdbed379e9b60", "scanner": "scanner-primary", "fingerprint": "71fbaf6b44bfe3c4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6f713dbd9c1401bb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/students/[id]/page.tsx:1978"}, "properties": {"repobilityId": "6e4231729609e82b", "scanner": "scanner-primary", "fingerprint": "6f713dbd9c1401bb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-24e77ed9eb7800e1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/students/[id]/portfolio/page.tsx:580"}, "properties": {"repobilityId": "abdcb45b591845b7", "scanner": "scanner-primary", "fingerprint": "24e77ed9eb7800e1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-95b89451ecdaf2f0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/students/import/page.tsx:321"}, "properties": {"repobilityId": "bd5b58e8247b9332", "scanner": "scanner-primary", "fingerprint": "95b89451ecdaf2f0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f67fabec1a3f3a0b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/skill-sheets/page.tsx:310"}, "properties": {"repobilityId": "3fef9d6a04211bac", "scanner": "scanner-primary", "fingerprint": "f67fabec1a3f3a0b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c06899224dfe038b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/skill-sheets/[id]/page.tsx:698"}, "properties": {"repobilityId": "b54c22b2806c91c3", "scanner": "scanner-primary", "fingerprint": "c06899224dfe038b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-14b347a043811753", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/cohorts/[id]/page.tsx:187"}, "properties": {"repobilityId": "a21a48242e802e38", "scanner": "scanner-primary", "fingerprint": "14b347a043811753", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-36c4996ef882c83e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/cohorts/[id]/groups/page.tsx:756"}, "properties": {"repobilityId": "e3d9a3e6e1b431d7", "scanner": "scanner-primary", "fingerprint": "36c4996ef882c83e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9596c6bf4f059257", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/cohorts/[id]/intake/page.tsx:218"}, "properties": {"repobilityId": "d5dfbf2857e22596", "scanner": "scanner-primary", "fingerprint": "9596c6bf4f059257", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-11cd035710fb0487", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/cohorts/[id]/smc/page.tsx:337"}, "properties": {"repobilityId": "27ab06a7f0a737cc", "scanner": "scanner-primary", "fingerprint": "11cd035710fb0487", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-96b9df1e93b52559", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/cohorts/[id]/semester-review/page.tsx:251"}, "properties": {"repobilityId": "97c8cb8372fb4be3", "scanner": "scanner-primary", "fingerprint": "96b9df1e93b52559", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3e3ad4c9e7e122bc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/academics/cohorts/[id]/calendar/page.tsx:197"}, "properties": {"repobilityId": "c44fb1adde613669", "scanner": "scanner-primary", "fingerprint": "3e3ad4c9e7e122bc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0fb70e0338ee9263", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/cases/session/[code]/instructor/page.tsx:464"}, "properties": {"repobilityId": "649e61c935c9bee9", "scanner": "scanner-primary", "fingerprint": "0fb70e0338ee9263", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a1f9017db35692b6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/cases/session/[code]/student/page.tsx:628"}, "properties": {"repobilityId": "334cde8b81e15dd1", "scanner": "scanner-primary", "fingerprint": "a1f9017db35692b6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a77f31ca152db2d7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/cases/session/[code]/tv/page.tsx:724"}, "properties": {"repobilityId": "b9b07e1fe2989d41", "scanner": "scanner-primary", "fingerprint": "a77f31ca152db2d7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-95530259299fa961", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/cases/session/[code]/join/page.tsx:213"}, "properties": {"repobilityId": "2f8cc37bd4752502", "scanner": "scanner-primary", "fingerprint": "95530259299fa961", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0bbb76ed8679f487", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/page.tsx:490"}, "properties": {"repobilityId": "cef1b50fd5f3ba32", "scanner": "scanner-primary", "fingerprint": "0bbb76ed8679f487", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-04d0115f793395cb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/internships/page.tsx:354"}, "properties": {"repobilityId": "9e3b0b12d926976f", "scanner": "scanner-primary", "fingerprint": "04d0115f793395cb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bb36031805f96a88", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/internships/[id]/page.tsx:1288"}, "properties": {"repobilityId": "4f1eb19adee472c9", "scanner": "scanner-primary", "fingerprint": "bb36031805f96a88", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0b158768d6fe0bdb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/internships/cohort/[id]/page.tsx:520"}, "properties": {"repobilityId": "10d9679c5b221689", "scanner": "scanner-primary", "fingerprint": "0b158768d6fe0bdb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6b89cf340e82cf90", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/ride-alongs/availability/page.tsx:313"}, "properties": {"repobilityId": "12d45d126686b934", "scanner": "scanner-primary", "fingerprint": "6b89cf340e82cf90", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b3989683f4ad4b3f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/ride-alongs/import/page.tsx:362"}, "properties": {"repobilityId": "a3ccccf5feaf91b8", "scanner": "scanner-primary", "fingerprint": "b3989683f4ad4b3f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-75782f53152a59eb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/agencies/page.tsx:460"}, "properties": {"repobilityId": "fe6e8cc6b090b25f", "scanner": "scanner-primary", "fingerprint": "75782f53152a59eb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a98891de9c4fc26e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/rotation-scheduler/page.tsx:828"}, "properties": {"repobilityId": "83bfefb91ef46349", "scanner": "scanner-primary", "fingerprint": "a98891de9c4fc26e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-44ce5bb53cb8c219", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/site-visit-settings/page.tsx:301"}, "properties": {"repobilityId": "c055a51406a3e50e", "scanner": "scanner-primary", "fingerprint": "44ce5bb53cb8c219", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4992ed402abc2c93", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/preceptors/page.tsx:587"}, "properties": {"repobilityId": "3882cdd9e3a7162a", "scanner": "scanner-primary", "fingerprint": "4992ed402abc2c93", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-86d2b543288ba7cc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/summative-evaluations/page.tsx:553"}, "properties": {"repobilityId": "1895492f9622c038", "scanner": "scanner-primary", "fingerprint": "86d2b543288ba7cc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-95fd6346fd9094b6", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/compliance-tracker/page.tsx:519"}, "properties": {"repobilityId": "68540772d457f884", "scanner": "scanner-primary", "fingerprint": "95fd6346fd9094b6", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-429c182325dfb3d9", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 app/clinical/mce/page.tsx:713"}, "properties": {"repobilityId": "2039a2771abf2f99", "scanner": "scanner-primary", "fingerprint": "429c182325dfb3d9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6cf99588d841b946", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/find-duplicate-skills.js:40"}, "properties": {"repobilityId": "565bdf192afd1c19", "scanner": "scanner-primary", "fingerprint": "6cf99588d841b946", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a3fb219bf4033830", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import-ride-alongs.js:302"}, "properties": {"repobilityId": "75fa7d24de465588", "scanner": "scanner-primary", "fingerprint": "a3fb219bf4033830", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ab327d5d7200ec9e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-cleanup-state.js:24"}, "properties": {"repobilityId": "bd8f7147622d1d85", "scanner": "scanner-primary", "fingerprint": "ab327d5d7200ec9e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-073feff008346858", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-nremt-skill-sheets.js:420"}, "properties": {"repobilityId": "84d042de8af61bc5", "scanner": "scanner-primary", "fingerprint": "073feff008346858", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d5280336c3da85a6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reset-pm-g14-s2-lab-stations.js:62"}, "properties": {"repobilityId": "1c5d6a7a165d72e6", "scanner": "scanner-primary", "fingerprint": "d5280336c3da85a6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7b60e99e776ddd9b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-station-constraints.js:34"}, "properties": {"repobilityId": "4a40437d63fb5ba0", "scanner": "scanner-primary", "fingerprint": "7b60e99e776ddd9b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b5c3e4a1b7cf3919", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-station-fks.js:33"}, "properties": {"repobilityId": "c6601efc70d41b22", "scanner": "scanner-primary", "fingerprint": "b5c3e4a1b7cf3919", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bad2f22e27fcb1ba", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reseed-lvfr-schedule.js:520"}, "properties": {"repobilityId": "c868ffaa2a6e6e4c", "scanner": "scanner-primary", "fingerprint": "bad2f22e27fcb1ba", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6671195cbed9e2d4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/dump-schema.js:66"}, "properties": {"repobilityId": "02b5db023e1be052", "scanner": "scanner-primary", "fingerprint": "6671195cbed9e2d4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-56000e3ab59d419f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-scenario-demographics.js:86"}, "properties": {"repobilityId": "4eb82951286670a2", "scanner": "scanner-primary", "fingerprint": "56000e3ab59d419f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-128e1295c96642d5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-smc-requirements.js:95"}, "properties": {"repobilityId": "dbd4bd6033d564fe", "scanner": "scanner-primary", "fingerprint": "128e1295c96642d5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-98c0d02c1d46f014", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-lab-label.js:28"}, "properties": {"repobilityId": "4f9fddd171e4d3c7", "scanner": "scanner-primary", "fingerprint": "98c0d02c1d46f014", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-27a7a86669ba3471", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/audit-lab-day-dow-mismatch.js:68"}, "properties": {"repobilityId": "1198e1f400f9cc81", "scanner": "scanner-primary", "fingerprint": "27a7a86669ba3471", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e57d3cfe1fbe6985", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-semester-planner.js:43"}, "properties": {"repobilityId": "b614807886c9c514", "scanner": "scanner-primary", "fingerprint": "e57d3cfe1fbe6985", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e37650c8129af732", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/verify-lvfr-aemt-runsheets.js:20"}, "properties": {"repobilityId": "49617b9c05f8461b", "scanner": "scanner-primary", "fingerprint": "e37650c8129af732", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-010850ddaae5e6c8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/bulk-assign-coordinator-dryrun.js:37"}, "properties": {"repobilityId": "ac7a4a2298a78132", "scanner": "scanner-primary", "fingerprint": "010850ddaae5e6c8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9067d8a2a9b8a598", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-osce-scenarios.js:279"}, "properties": {"repobilityId": "3c59d9f882a1917b", "scanner": "scanner-primary", "fingerprint": "9067d8a2a9b8a598", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7493fd8da8932f8d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/unwrap-scenario-critical-actions.js:60"}, "properties": {"repobilityId": "9590781bd331aaaa", "scanner": "scanner-primary", "fingerprint": "7493fd8da8932f8d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a5f67b2948a22d9e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-lab-day-role-calendar.js:95"}, "properties": {"repobilityId": "c65872bf5a1bc65c", "scanner": "scanner-primary", "fingerprint": "a5f67b2948a22d9e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-460387bb035ca15a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-lab-day-role-sync.js:21"}, "properties": {"repobilityId": "445f23f266f8a24d", "scanner": "scanner-primary", "fingerprint": "460387bb035ca15a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bb1f9e9dbb2f023e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-lab-blocks-and-emt-g5-labs.js:100"}, "properties": {"repobilityId": "6418d68cd5eb41a5", "scanner": "scanner-primary", "fingerprint": "bb1f9e9dbb2f023e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b4651bd83ebe1a96", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/smc-dedup-audit.js:50"}, "properties": {"repobilityId": "1ba9af3d1dff4e37", "scanner": "scanner-primary", "fingerprint": "b4651bd83ebe1a96", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0b6b033838226a64", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reseed-group14-s1.js:31"}, "properties": {"repobilityId": "079990d3709db43c", "scanner": "scanner-primary", "fingerprint": "0b6b033838226a64", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6d5c8814186e9c1a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-lvfr-aemt-state.js:35"}, "properties": {"repobilityId": "4992c69c5d1ccfe2", "scanner": "scanner-primary", "fingerprint": "6d5c8814186e9c1a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bf42995e64f99a29", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/identify-extra-blocks.js:87"}, "properties": {"repobilityId": "208dd4cc599c68f8", "scanner": "scanner-primary", "fingerprint": "bf42995e64f99a29", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-639246563ca2b42a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/backfill-station-instructor-user-ids.js:46"}, "properties": {"repobilityId": "2117e4e6597105ee", "scanner": "scanner-primary", "fingerprint": "639246563ca2b42a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4a10e6e9d490470c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/compare-emt-s1-templates.js:90"}, "properties": {"repobilityId": "2fef4a8638363204", "scanner": "scanner-primary", "fingerprint": "4a10e6e9d490470c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-89dfcfbead83ae95", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-feedback-tables.js:37"}, "properties": {"repobilityId": "ba5e796636d642cd", "scanner": "scanner-primary", "fingerprint": "89dfcfbead83ae95", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f71321a318904e90", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reimport-paramedic-s2-v4-and-propagate.js:100"}, "properties": {"repobilityId": "69cbed389eb1b82d", "scanner": "scanner-primary", "fingerprint": "f71321a318904e90", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9c5bc429c2592b9e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reimport-paramedic-s2-labs.js:54"}, "properties": {"repobilityId": "55e97d95609d4d7d", "scanner": "scanner-primary", "fingerprint": "9c5bc429c2592b9e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8f4f62061a088e4b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-group14-s1.js:36"}, "properties": {"repobilityId": "1134f1c20a21afb0", "scanner": "scanner-primary", "fingerprint": "8f4f62061a088e4b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-842c9a30211633b7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/bulk-update-feedback-status.js:75"}, "properties": {"repobilityId": "ca699550ff033836", "scanner": "scanner-primary", "fingerprint": "842c9a30211633b7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-11f93e008229d70d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-course-planner.js:76"}, "properties": {"repobilityId": "be4ed603cb4f2c92", "scanner": "scanner-primary", "fingerprint": "11f93e008229d70d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1af2bd9d8ea5834e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/resolve-feedback-batch.js:50"}, "properties": {"repobilityId": "b97d9838abf92a9e", "scanner": "scanner-primary", "fingerprint": "1af2bd9d8ea5834e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b7b58f14e65c3b49", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/phase2-dedup.js:49"}, "properties": {"repobilityId": "19b59c4f5e089dd5", "scanner": "scanner-primary", "fingerprint": "b7b58f14e65c3b49", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d2636815ed7247b6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/cleanup_dry_run.js:38"}, "properties": {"repobilityId": "c42394970de4e0d4", "scanner": "scanner-primary", "fingerprint": "d2636815ed7247b6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-affd4aa18ca908a1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/resolve_feedback.js:34"}, "properties": {"repobilityId": "5070d1af00dbb16c", "scanner": "scanner-primary", "fingerprint": "affd4aa18ca908a1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-72057c575650e04b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/populate-lvfr-aemt-runsheets.js:214"}, "properties": {"repobilityId": "1d2f342c8168e9bb", "scanner": "scanner-primary", "fingerprint": "72057c575650e04b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bb04cd16fa43108f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-availability-direct.js:52"}, "properties": {"repobilityId": "4b15cdbb7b05805b", "scanner": "scanner-primary", "fingerprint": "bb04cd16fa43108f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-765ac19e51c4e883", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect_trigger.js:16"}, "properties": {"repobilityId": "d129e2309ebdcfce", "scanner": "scanner-primary", "fingerprint": "765ac19e51c4e883", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-76a3f820c8999720", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/delete-pm-g15-memorial-day.js:54"}, "properties": {"repobilityId": "b07c8a28f5b6e5a8", "scanner": "scanner-primary", "fingerprint": "76a3f820c8999720", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ba36cfc3a384bd6f", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run-scenario-transform.js:254"}, "properties": {"repobilityId": "bedd67869f482e9e", "scanner": "scanner-primary", "fingerprint": "ba36cfc3a384bd6f", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d64e30c3b4d3fd1a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/run-migration.js:78"}, "properties": {"repobilityId": "6c9e04f69551e337", "scanner": "scanner-primary", "fingerprint": "d64e30c3b4d3fd1a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f31dd3f351430a08", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-emt-g5-labs.js:28"}, "properties": {"repobilityId": "990d85639deeb1ab", "scanner": "scanner-primary", "fingerprint": "f31dd3f351430a08", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a0ef4f1a8e3aa0ac", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-lvfr.js:71"}, "properties": {"repobilityId": "01a068b4b57e66ac", "scanner": "scanner-primary", "fingerprint": "a0ef4f1a8e3aa0ac", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2585e1a513a62c89", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/extract-scenario-demographics-regex.js:179"}, "properties": {"repobilityId": "1cc2103de7eba400", "scanner": "scanner-primary", "fingerprint": "2585e1a513a62c89", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b5bd23e9c9fd62f6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/debug-josh-sync.js:44"}, "properties": {"repobilityId": "7fa35d8b37b94c9b", "scanner": "scanner-primary", "fingerprint": "b5bd23e9c9fd62f6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bc84abc3e606ba81", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/reseed-osce-adf.js:269"}, "properties": {"repobilityId": "a4c27f35145cf95a", "scanner": "scanner-primary", "fingerprint": "bc84abc3e606ba81", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8a354a1fe4fed6dc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/fix-pm-g14-g15-missing-blocks.js:165"}, "properties": {"repobilityId": "fe60bd6ad4db0853", "scanner": "scanner-primary", "fingerprint": "8a354a1fe4fed6dc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c29e58a50572f5f5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/check-fk-ambiguity.js:392"}, "properties": {"repobilityId": "f99882b67cca2ad1", "scanner": "scanner-primary", "fingerprint": "c29e58a50572f5f5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7f8470371e015671", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-pm-smc.js:133"}, "properties": {"repobilityId": "14cfdc913a2d771c", "scanner": "scanner-primary", "fingerprint": "7f8470371e015671", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a2beed858d8af5dd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-pm-g14-s2-issues.js:49"}, "properties": {"repobilityId": "c90e240545a09f1b", "scanner": "scanner-primary", "fingerprint": "a2beed858d8af5dd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b3599e8b93c43f16", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-emt-aemt-smc.js:193"}, "properties": {"repobilityId": "94d453d68a3c35c8", "scanner": "scanner-primary", "fingerprint": "b3599e8b93c43f16", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ea6064d17b0d2749", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/inspect-jlomonaco-account.js:24"}, "properties": {"repobilityId": "39e303c028955010", "scanner": "scanner-primary", "fingerprint": "ea6064d17b0d2749", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4d9941ac59f6cf3c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/LabCalendarPanel.tsx:307"}, "properties": {"repobilityId": "e58cb0cc4cd25a8d", "scanner": "scanner-primary", "fingerprint": "4d9941ac59f6cf3c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4c57d587608d84ad", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/ScenarioVersionHistory.tsx:437"}, "properties": {"repobilityId": "ece86b6901bb33df", "scanner": "scanner-primary", "fingerprint": "4c57d587608d84ad", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-68015cfd2fbc40a0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/NotificationBell.tsx:564"}, "properties": {"repobilityId": "c0629acd9f83a6f8", "scanner": "scanner-primary", "fingerprint": "68015cfd2fbc40a0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a31e44e97f58c75d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/ChecklistAttendance.tsx:265"}, "properties": {"repobilityId": "d4de144aeb127175", "scanner": "scanner-primary", "fingerprint": "a31e44e97f58c75d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-251aee7540227333", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 components/LabTimer.tsx:319"}, "properties": {"repobilityId": "6f1fc530ab750f14", "scanner": "scanner-primary", "fingerprint": "251aee7540227333", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a1a51491afb6c1e3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/BulkPhotoUpload.tsx:316"}, "properties": {"repobilityId": "26f9f7e7a1341faa", "scanner": "scanner-primary", "fingerprint": "a1a51491afb6c1e3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-469bcffc2951bf1f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/CommandPalette.tsx:888"}, "properties": {"repobilityId": "2762e53bf39d7009", "scanner": "scanner-primary", "fingerprint": "469bcffc2951bf1f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bef74c4bc2ee4610", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/AttendanceSection.tsx:468"}, "properties": {"repobilityId": "ea8a11c6fb8b588c", "scanner": "scanner-primary", "fingerprint": "bef74c4bc2ee4610", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d87e9e94e05b581f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/StudentPicker.tsx:108"}, "properties": {"repobilityId": "ae90c1d45f8c77f9", "scanner": "scanner-primary", "fingerprint": "d87e9e94e05b581f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7e21e843d87838c3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/NremtTimer.tsx:345"}, "properties": {"repobilityId": "79f4fd1c0a0aae0f", "scanner": "scanner-primary", "fingerprint": "7e21e843d87838c3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8e0f68efe4881efb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/UserMenu.tsx:161"}, "properties": {"repobilityId": "953f90dbddbc2676", "scanner": "scanner-primary", "fingerprint": "8e0f68efe4881efb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2375204f4cc87a11", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/GlobalTimerBanner.tsx:248"}, "properties": {"repobilityId": "f4b1e09ebfee414e", "scanner": "scanner-primary", "fingerprint": "2375204f4cc87a11", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-143ac7a62bc353a5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/TemplateDiffModal.tsx:227"}, "properties": {"repobilityId": "6bb3af188d08b867", "scanner": "scanner-primary", "fingerprint": "143ac7a62bc353a5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bd9f3fb05b96832c", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 components/QRCodeDisplay.tsx:101"}, "properties": {"repobilityId": "391d9809d1357fc1", "scanner": "scanner-primary", "fingerprint": "bd9f3fb05b96832c", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-7e5ce7f2cf38b8ac", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/SkillSheetPanel.tsx:1622"}, "properties": {"repobilityId": "c9353750eb748c97", "scanner": "scanner-primary", "fingerprint": "7e5ce7f2cf38b8ac", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2ff583f9b5b30a10", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/FeedbackButton.tsx:361"}, "properties": {"repobilityId": "010d11cc3ce8a023", "scanner": "scanner-primary", "fingerprint": "2ff583f9b5b30a10", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7dae0d4c94a0d41e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/LearningStyleDistribution.tsx:256"}, "properties": {"repobilityId": "3504697772532525", "scanner": "scanner-primary", "fingerprint": "7dae0d4c94a0d41e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cb2055a321508c77", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/DraggableWidgetGrid.tsx:157"}, "properties": {"repobilityId": "e7a31402e983b055", "scanner": "scanner-primary", "fingerprint": "cb2055a321508c77", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c81735dd33e14525", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/AtRiskStudentsWidget.tsx:110"}, "properties": {"repobilityId": "1bec212107b500c6", "scanner": "scanner-primary", "fingerprint": "c81735dd33e14525", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5ee204cd7ae990e4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/ProgramSnapshotWidget.tsx:96"}, "properties": {"repobilityId": "fa6996ea342be8de", "scanner": "scanner-primary", "fingerprint": "5ee204cd7ae990e4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-753ae9645f122d88", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/MyTasksWidget.tsx:200"}, "properties": {"repobilityId": "bc99fe9232291ddd", "scanner": "scanner-primary", "fingerprint": "753ae9645f122d88", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-70fcfec7e78328fc", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/MyLabsWidget.tsx:135"}, "properties": {"repobilityId": "9c809782f96bc9ba", "scanner": "scanner-primary", "fingerprint": "70fcfec7e78328fc", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-015baea94d603290", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/OverdueTasksWidget.tsx:102"}, "properties": {"repobilityId": "29a7fdadf3c139e0", "scanner": "scanner-primary", "fingerprint": "015baea94d603290", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1b844995fc92dd46", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/RecentFeedbackWidget.tsx:77"}, "properties": {"repobilityId": "b1b53b070d8ae59b", "scanner": "scanner-primary", "fingerprint": "1b844995fc92dd46", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dbd89bd5ad7c0bdf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/OpenStationsWidget.tsx:136"}, "properties": {"repobilityId": "f3eb789047d03803", "scanner": "scanner-primary", "fingerprint": "dbd89bd5ad7c0bdf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e843d12b9065c8ba", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/CertExpiryWidget.tsx:120"}, "properties": {"repobilityId": "f8e25e7ea1afdbea", "scanner": "scanner-primary", "fingerprint": "e843d12b9065c8ba", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bf66157fb2c221e7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/dashboard/widgets/RecentActivityWidget.tsx:192"}, "properties": {"repobilityId": "00d32ec92860f3aa", "scanner": "scanner-primary", "fingerprint": "bf66157fb2c221e7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-2d6b12b123e545d0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/lvfr/WeekStripView.tsx:474"}, "properties": {"repobilityId": "fd89d20f04dd922f", "scanner": "scanner-primary", "fingerprint": "2d6b12b123e545d0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-df4b0f61346c65ee", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/grading/ScenarioReferencePanel.tsx:323"}, "properties": {"repobilityId": "75dc1721887ccf02", "scanner": "scanner-primary", "fingerprint": "df4b0f61346c65ee", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a02f586834ec22b1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/calendar/EventDetailPanel.tsx:231"}, "properties": {"repobilityId": "8da1ada6dc0b141d", "scanner": "scanner-primary", "fingerprint": "a02f586834ec22b1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0605921ef83357b7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/EditStationModal.tsx:825"}, "properties": {"repobilityId": "16d092f0b6db762a", "scanner": "scanner-primary", "fingerprint": "0605921ef83357b7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ae7e40096b1ed44c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/LabDaySkillSignoffs.tsx:208"}, "properties": {"repobilityId": "1096f1e4690baf6e", "scanner": "scanner-primary", "fingerprint": "ae7e40096b1ed44c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3f5a437f3a371c17", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/SkillCoveragePanel.tsx:538"}, "properties": {"repobilityId": "199c8aef4a4c62d8", "scanner": "scanner-primary", "fingerprint": "3f5a437f3a371c17", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ad3e0cac6ce5c3d7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/StudentRatingsSection.tsx:148"}, "properties": {"repobilityId": "128cb4afef8e3130", "scanner": "scanner-primary", "fingerprint": "ad3e0cac6ce5c3d7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3c259b9810c90430", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/StationCards.tsx:265"}, "properties": {"repobilityId": "18e8b5f31702b8d7", "scanner": "scanner-primary", "fingerprint": "3c259b9810c90430", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-713358d2bd001f04", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/ScenarioPickerModal.tsx:154"}, "properties": {"repobilityId": "789dd6b3f40bacc3", "scanner": "scanner-primary", "fingerprint": "713358d2bd001f04", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-63463c28b2265a9c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/CostsSection.tsx:216"}, "properties": {"repobilityId": "b426ec1f5ef8519d", "scanner": "scanner-primary", "fingerprint": "63463c28b2265a9c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a4d33a51b96519fc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 components/lab-day/LabDayChatInner.tsx:291"}, "properties": {"repobilityId": "e5ddb858e5bd215d", "scanner": "scanner-primary", "fingerprint": "a4d33a51b96519fc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6f4d32aab4a80be3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/lab-day/LabDayCheckInSection.tsx:70"}, "properties": {"repobilityId": "93be7984fd8dc1f5", "scanner": "scanner-primary", "fingerprint": "6f4d32aab4a80be3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c9892b377e39eec5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/scheduling/CoordinatorCalendarView.tsx:779"}, "properties": {"repobilityId": "eb9efabd053c4616", "scanner": "scanner-primary", "fingerprint": "c9892b377e39eec5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-248af46106c5f326", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/scheduling/GenerateLabShiftsModal.tsx:321"}, "properties": {"repobilityId": "83317915ff0f5983", "scanner": "scanner-primary", "fingerprint": "248af46106c5f326", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-03fe76c7e9636a3e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/seating/Suite1Layout.tsx:296"}, "properties": {"repobilityId": "0a4c7a0f80615e46", "scanner": "scanner-primary", "fingerprint": "03fe76c7e9636a3e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-02128db8544456d4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/clinical/PreceptorsSection.tsx:357"}, "properties": {"repobilityId": "b3a84af3a6ce8744", "scanner": "scanner-primary", "fingerprint": "02128db8544456d4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-288de3d9497bcc11", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/clinical/CollapsibleCard.tsx:105"}, "properties": {"repobilityId": "0f26a38674327bdd", "scanner": "scanner-primary", "fingerprint": "288de3d9497bcc11", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bdfc9f8d31b47003", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/clinical/PreceptorEvalModal.tsx:162"}, "properties": {"repobilityId": "7999180a72eb1998", "scanner": "scanner-primary", "fingerprint": "bdfc9f8d31b47003", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3448793e9b78f516", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/clinical/CloseoutSection.tsx:1424"}, "properties": {"repobilityId": "2ec2c1c16d88a21f", "scanner": "scanner-primary", "fingerprint": "3448793e9b78f516", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0fbefb4e88c4540a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 components/scheduler/SchedulerAdmin.tsx:457"}, "properties": {"repobilityId": "44a0ad47d380bfcb", "scanner": "scanner-primary", "fingerprint": "0fbefb4e88c4540a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0dee82b036778a97", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in app/api/admin/compliance/route.ts:4"}, "properties": {"repobilityId": "1d4ead7288e32a60", "scanner": "scanner-primary", "fingerprint": "0dee82b036778a97", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/api/admin/compliance/route.ts"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-ac3c41198be87292", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in app/labs/groups/page.tsx:1038"}, "properties": {"repobilityId": "f0ae9506d3a734b7", "scanner": "scanner-primary", "fingerprint": "ac3c41198be87292", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/labs/groups/page.tsx"}, "region": {"startLine": 1038}}}]}, {"ruleId": "scanner-7118cb2584078a58", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in app/labs/schedule/[id]/assignments/page.tsx:264"}, "properties": {"repobilityId": "209396c4784eff39", "scanner": "scanner-primary", "fingerprint": "7118cb2584078a58", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/labs/schedule/[id]/assignments/page.tsx"}, "region": {"startLine": 264}}}]}, {"ruleId": "scanner-9973576610ce17bb", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in app/osce-scoring/enter/page.tsx:46"}, "properties": {"repobilityId": "f8622bd879db1642", "scanner": "scanner-primary", "fingerprint": "9973576610ce17bb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/osce-scoring/enter/page.tsx"}, "region": {"startLine": 46}}}]}, {"ruleId": "scanner-9c639b263ddace55", "level": "note", "message": {"text": "Insecure pattern 'document_write' in app/osce-scoring/[assessmentId]/page.tsx:558"}, "properties": {"repobilityId": "4ba289ba9dcbf813", "scanner": "scanner-primary", "fingerprint": "9c639b263ddace55", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/osce-scoring/[assessmentId]/page.tsx"}, "region": {"startLine": 558}}}]}, {"ruleId": "scanner-dffa8cd94b8f224d", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in app/settings/sessions/page.tsx:204"}, "properties": {"repobilityId": "291be33b1187a5c8", "scanner": "scanner-primary", "fingerprint": "dffa8cd94b8f224d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/settings/sessions/page.tsx"}, "region": {"startLine": 204}}}]}, {"ruleId": "scanner-bee54415a44ebd27", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in app/guest/page.tsx:98"}, "properties": {"repobilityId": "07fcda3608282659", "scanner": "scanner-primary", "fingerprint": "bee54415a44ebd27", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "app/guest/page.tsx"}, "region": {"startLine": 98}}}]}, {"ruleId": "scanner-86646c32852d0f7d", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in scripts/lvfr-rebuild/parse-sources.mjs:14"}, "properties": {"repobilityId": "172b093806f6eeb8", "scanner": "scanner-primary", "fingerprint": "86646c32852d0f7d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "scripts/lvfr-rebuild/parse-sources.mjs"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-392f76f09d6df2af", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in components/TwoFactorPanel.tsx:127"}, "properties": {"repobilityId": "785170efeb57cd32", "scanner": "scanner-primary", "fingerprint": "392f76f09d6df2af", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/TwoFactorPanel.tsx"}, "region": {"startLine": 127}}}]}, {"ruleId": "scanner-20c53a03519e8ec4", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in components/SessionTimeoutWatcher.tsx:56"}, "properties": {"repobilityId": "f90c3d4d2ed4cb87", "scanner": "scanner-primary", "fingerprint": "20c53a03519e8ec4", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/SessionTimeoutWatcher.tsx"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-7fb2b35c8852600c", "level": "note", "message": {"text": "Insecure pattern 'document_write' in components/clinical/EmploymentVerificationModal.tsx:210"}, "properties": {"repobilityId": "b9a49b6f4b803cf7", "scanner": "scanner-primary", "fingerprint": "7fb2b35c8852600c", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/clinical/EmploymentVerificationModal.tsx"}, "region": {"startLine": 210}}}]}, {"ruleId": "scanner-9ceff0c99f5cb927", "level": "note", "message": {"text": "Insecure pattern 'document_write' in components/clinical/CloseoutSection.tsx:729"}, "properties": {"repobilityId": "c994f924d341185f", "scanner": "scanner-primary", "fingerprint": "9ceff0c99f5cb927", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "components/clinical/CloseoutSection.tsx"}, "region": {"startLine": 729}}}]}, {"ruleId": "scanner-981a09033f4a3628", "level": "note", "message": {"text": "Insecure pattern 'document_write' in lib/print-utils.ts:10"}, "properties": {"repobilityId": "fe6978470f40382f", "scanner": "scanner-primary", "fingerprint": "981a09033f4a3628", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lib/print-utils.ts"}, "region": {"startLine": 10}}}]}, {"ruleId": "scanner-f2fac476ff39276b", "level": "note", "message": {"text": "Insecure pattern 'document_write' in lib/export-utils.ts:123"}, "properties": {"repobilityId": "96d0456518528198", "scanner": "scanner-primary", "fingerprint": "f2fac476ff39276b", "layer": "security", "severity": "low", "confidence": 1.0, "tags": ["owasp", "document_write"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lib/export-utils.ts"}, "region": {"startLine": 123}}}]}, {"ruleId": "scanner-dad73eada4acdb26", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in lib/export-utils.ts:82"}, "properties": {"repobilityId": "7877a7b51c03a34e", "scanner": "scanner-primary", "fingerprint": "dad73eada4acdb26", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "lib/export-utils.ts"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-21a9286666d621dd", "level": "note", "message": {"text": "Very large file: app/page.tsx (1236 lines)"}, "properties": {"repobilityId": "5e5eaf124a1a5246", "scanner": "scanner-primary", "fingerprint": "21a9286666d621dd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4f7d61360bcb5060", "level": "note", "message": {"text": "Very large file: app/api/lvfr-aemt/planner/reseed/route.ts (801 lines)"}, "properties": {"repobilityId": "220d75cfdab652b6", "scanner": "scanner-primary", "fingerprint": "4f7d61360bcb5060", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e22d5a952dcbec24", "level": "note", "message": {"text": "Very large file: app/labs/grade/station/[id]/page.tsx (1813 lines)"}, "properties": {"repobilityId": "74e8fb93cce0ce99", "scanner": "scanner-primary", "fingerprint": "e22d5a952dcbec24", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-839ef00296b36117", "level": "note", "message": {"text": "Very large file: app/labs/groups/page.tsx (1224 lines)"}, "properties": {"repobilityId": "e4cfd4890f33e055", "scanner": "scanner-primary", "fingerprint": "839ef00296b36117", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-fbe775cb872a3a08", "level": "note", "message": {"text": "Very large file: app/labs/templates/weekly/page.tsx (1054 lines)"}, "properties": {"repobilityId": "ce57bfe87032f4a9", "scanner": "scanner-primary", "fingerprint": "fbe775cb872a3a08", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e5891ec91d9130e9", "level": "note", "message": {"text": "Very large file: app/labs/scenarios/[id]/page.tsx (3288 lines)"}, "properties": {"repobilityId": "58c7a503a0173e05", "scanner": "scanner-primary", "fingerprint": "e5891ec91d9130e9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b2aa406b1b5ce79c", "level": "note", "message": {"text": "Very large file: app/labs/scenarios/new/page.tsx (2122 lines)"}, "properties": {"repobilityId": "988ce7513eee7254", "scanner": "scanner-primary", "fingerprint": "b2aa406b1b5ce79c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4e78cff1c254dabd", "level": "note", "message": {"text": "Very large file: app/labs/skill-drills/page.tsx (1310 lines)"}, "properties": {"repobilityId": "e8935f5810c5875f", "scanner": "scanner-primary", "fingerprint": "4e78cff1c254dabd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1bd2d91cb1b19f88", "level": "note", "message": {"text": "Very large file: app/labs/schedule/page.tsx (2217 lines)"}, "properties": {"repobilityId": "a219500aefdf1da0", "scanner": "scanner-primary", "fingerprint": "1bd2d91cb1b19f88", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-47e08977bd83b38f", "level": "note", "message": {"text": "Very large file: app/labs/schedule/[id]/page.tsx (1046 lines)"}, "properties": {"repobilityId": "c2b2ba598078c420", "scanner": "scanner-primary", "fingerprint": "47e08977bd83b38f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-36f745b277441124", "level": "note", "message": {"text": "Very large file: app/labs/schedule/[id]/stations/new/page.tsx (1611 lines)"}, "properties": {"repobilityId": "86d30d475e0ca55e", "scanner": "scanner-primary", "fingerprint": "36f745b277441124", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0353130f3d94a47c", "level": "note", "message": {"text": "Very large file: app/labs/schedule/[id]/coordinator/page.tsx (2934 lines)"}, "properties": {"repobilityId": "9c9d297200e95b25", "scanner": "scanner-primary", "fingerprint": "0353130f3d94a47c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b918ff42469f2abb", "level": "note", "message": {"text": "Very large file: app/labs/schedule/[id]/edit/page.tsx (1431 lines)"}, "properties": {"repobilityId": "629a7eeadcb49d0e", "scanner": "scanner-primary", "fingerprint": "b918ff42469f2abb", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-36403411e752159d", "level": "note", "message": {"text": "Very large file: app/labs/schedule/[id]/results/page.tsx (1226 lines)"}, "properties": {"repobilityId": "e567563182814a17", "scanner": "scanner-primary", "fingerprint": "36403411e752159d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d4b84cc6f885ab40", "level": "note", "message": {"text": "Very large file: app/labs/schedule/new/page.tsx (3052 lines)"}, "properties": {"repobilityId": "f32e322adc140592", "scanner": "scanner-primary", "fingerprint": "d4b84cc6f885ab40", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0050d9737e5a315a", "level": "note", "message": {"text": "Very large file: app/lvfr-aemt/planner/page.tsx (1844 lines)"}, "properties": {"repobilityId": "6b2fa984969e6a47", "scanner": "scanner-primary", "fingerprint": "0050d9737e5a315a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-14dedb35e88bc0e8", "level": "note", "message": {"text": "Very large file: app/lvfr-aemt/calendar/page.tsx (1095 lines)"}, "properties": {"repobilityId": "827ecf38c155373a", "scanner": "scanner-primary", "fingerprint": "14dedb35e88bc0e8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c600d38676c81895", "level": "note", "message": {"text": "Very large file: app/admin/equipment/maintenance/page.tsx (1281 lines)"}, "properties": {"repobilityId": "ea378779dce90107", "scanner": "scanner-primary", "fingerprint": "c600d38676c81895", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-3e150f6484947059", "level": "note", "message": {"text": "Very large file: app/admin/osce-events/[id]/page.tsx (1936 lines)"}, "properties": {"repobilityId": "9c1107ed2b6eb9bc", "scanner": "scanner-primary", "fingerprint": "3e150f6484947059", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d40e6fe000a0a960", "level": "note", "message": {"text": "Very large file: app/admin/alumni/page.tsx (1531 lines)"}, "properties": {"repobilityId": "cc3f05d305ea8475", "scanner": "scanner-primary", "fingerprint": "d40e6fe000a0a960", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0bfddfadbff59bd5", "level": "note", "message": {"text": "Very large file: app/admin/scenarios/audit/page.tsx (1837 lines)"}, "properties": {"repobilityId": "b084e9063c3cfdd4", "scanner": "scanner-primary", "fingerprint": "0bfddfadbff59bd5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f0308df3b7e86765", "level": "note", "message": {"text": "Very large file: app/admin/scenarios/bulk-import/page.tsx (1172 lines)"}, "properties": {"repobilityId": "9ccf0fbd61fd4f59", "scanner": "scanner-primary", "fingerprint": "f0308df3b7e86765", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cfa36f75ed962df0", "level": "note", "message": {"text": "Very large file: app/admin/volunteer-events/page.tsx (1718 lines)"}, "properties": {"repobilityId": "73bbda16e6c715cd", "scanner": "scanner-primary", "fingerprint": "cfa36f75ed962df0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-72bd5ecda4cc039f", "level": "note", "message": {"text": "Very large file: app/admin/lab-templates/page.tsx (1344 lines)"}, "properties": {"repobilityId": "37919036c11e90c0", "scanner": "scanner-primary", "fingerprint": "72bd5ecda4cc039f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1a478fab5d517ff9", "level": "note", "message": {"text": "Very large file: app/admin/qa-checklist/page.tsx (940 lines)"}, "properties": {"repobilityId": "f40f52aba194d073", "scanner": "scanner-primary", "fingerprint": "1a478fab5d517ff9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-edc86b129d5b5a36", "level": "note", "message": {"text": "Very large file: app/admin/email-templates/page.tsx (1425 lines)"}, "properties": {"repobilityId": "29930e9dbe0f533f", "scanner": "scanner-primary", "fingerprint": "edc86b129d5b5a36", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-016d85a26c0ba1b4", "level": "note", "message": {"text": "Very large file: app/admin/cases/generate/page.tsx (1254 lines)"}, "properties": {"repobilityId": "070b1ca990d35ded", "scanner": "scanner-primary", "fingerprint": "016d85a26c0ba1b4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b81686813c4cbfa7", "level": "note", "message": {"text": "Very large file: app/resources/medications/page.tsx (1176 lines)"}, "properties": {"repobilityId": "cf7fe82cf301a710", "scanner": "scanner-primary", "fingerprint": "b81686813c4cbfa7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-717e05bf3e5cd10f", "level": "note", "message": {"text": "Very large file: app/students/[id]/progress/page.tsx (1267 lines)"}, "properties": {"repobilityId": "b676cc11114b1106", "scanner": "scanner-primary", "fingerprint": "717e05bf3e5cd10f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a3187d7b21b6fa6c", "level": "note", "message": {"text": "Very large file: app/skill-sheets/[id]/page.tsx (1349 lines)"}, "properties": {"repobilityId": "8b1b86501c21c285", "scanner": "scanner-primary", "fingerprint": "a3187d7b21b6fa6c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b40f0f9c40817734", "level": "note", "message": {"text": "Very large file: app/settings/page.tsx (2200 lines)"}, "properties": {"repobilityId": "fc63d12a94bbefd7", "scanner": "scanner-primary", "fingerprint": "b40f0f9c40817734", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6c246c67e01f4431", "level": "note", "message": {"text": "Very large file: app/onboarding/page.tsx (1210 lines)"}, "properties": {"repobilityId": "ccba14c4a97ef555", "scanner": "scanner-primary", "fingerprint": "6c246c67e01f4431", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1e222b9cb1f0d7a4", "level": "note", "message": {"text": "Very large file: app/calendar/page.tsx (1974 lines)"}, "properties": {"repobilityId": "82259d28cbdd6410", "scanner": "scanner-primary", "fingerprint": "1e222b9cb1f0d7a4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a331c436ab544dfe", "level": "note", "message": {"text": "Very large file: app/tasks/page.tsx (1286 lines)"}, "properties": {"repobilityId": "fbd7da1e5be52c79", "scanner": "scanner-primary", "fingerprint": "a331c436ab544dfe", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bb6baf615e4be5ae", "level": "note", "message": {"text": "Very large file: app/scheduling/page.tsx (1385 lines)"}, "properties": {"repobilityId": "00ad7eb4bb291024", "scanner": "scanner-primary", "fingerprint": "bb6baf615e4be5ae", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d04e28ebed7afb0a", "level": "note", "message": {"text": "Very large file: app/scheduling/shifts/page.tsx (1944 lines)"}, "properties": {"repobilityId": "c724433ffd7ffbaa", "scanner": "scanner-primary", "fingerprint": "d04e28ebed7afb0a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-55b4dbf2cd471283", "level": "note", "message": {"text": "Very large file: app/scheduling/resource-bookings/page.tsx (1181 lines)"}, "properties": {"repobilityId": "ee58dea67509421d", "scanner": "scanner-primary", "fingerprint": "55b4dbf2cd471283", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-11575c1555c086b2", "level": "note", "message": {"text": "Very large file: app/scheduling/availability/all/page.tsx (1852 lines)"}, "properties": {"repobilityId": "b30d0de9b4c26a5c", "scanner": "scanner-primary", "fingerprint": "11575c1555c086b2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b652e4333fd35ca5", "level": "note", "message": {"text": "Very large file: app/scheduling/planner/page.tsx (3349 lines)"}, "properties": {"repobilityId": "6ca1b7b55d57041f", "scanner": "scanner-primary", "fingerprint": "b652e4333fd35ca5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d68c5ec0c45cf537", "level": "note", "message": {"text": "Very large file: app/notifications/page.tsx (1309 lines)"}, "properties": {"repobilityId": "2eadf207d7a2aead", "scanner": "scanner-primary", "fingerprint": "d68c5ec0c45cf537", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6a5b3119e6b71a0b", "level": "note", "message": {"text": "Very large file: app/help/page.tsx (1389 lines)"}, "properties": {"repobilityId": "bb57bc84aa53a2be", "scanner": "scanner-primary", "fingerprint": "6a5b3119e6b71a0b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-9e1b27badd336140", "level": "note", "message": {"text": "Very large file: app/academics/admin/smc/page.tsx (1465 lines)"}, "properties": {"repobilityId": "b01be2b584e65dfc", "scanner": "scanner-primary", "fingerprint": "9e1b27badd336140", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-434599d345f42c46", "level": "note", "message": {"text": "Very large file: app/academics/planner/page.tsx (3589 lines)"}, "properties": {"repobilityId": "b45002bc5f377ea2", "scanner": "scanner-primary", "fingerprint": "434599d345f42c46", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f46d35c70e35038c", "level": "note", "message": {"text": "Very large file: app/academics/students/[id]/page.tsx (2612 lines)"}, "properties": {"repobilityId": "c5541424b54e852c", "scanner": "scanner-primary", "fingerprint": "f46d35c70e35038c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c574674c5b40ab2e", "level": "note", "message": {"text": "Very large file: app/academics/students/import/page.tsx (1137 lines)"}, "properties": {"repobilityId": "702b5e9ba4e315ec", "scanner": "scanner-primary", "fingerprint": "c574674c5b40ab2e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-494a53f85157558b", "level": "note", "message": {"text": "Very large file: app/academics/skill-sheets/[id]/page.tsx (1349 lines)"}, "properties": {"repobilityId": "e4daef9c4f82b5f2", "scanner": "scanner-primary", "fingerprint": "494a53f85157558b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-512c4d262afb83e2", "level": "note", "message": {"text": "Very large file: app/academics/cohorts/[id]/page.tsx (2206 lines)"}, "properties": {"repobilityId": "9ce0ba6425c6ee71", "scanner": "scanner-primary", "fingerprint": "512c4d262afb83e2", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-ee3d30cf7faa079c", "level": "note", "message": {"text": "Very large file: app/cases/[id]/practice/page.tsx (1658 lines)"}, "properties": {"repobilityId": "fd965810f2aa9043", "scanner": "scanner-primary", "fingerprint": "ee3d30cf7faa079c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-dec7ae805245dbb9", "level": "note", "message": {"text": "Very large file: app/cases/session/[code]/student/page.tsx (1400 lines)"}, "properties": {"repobilityId": "5e02f468dfa44a49", "scanner": "scanner-primary", "fingerprint": "dec7ae805245dbb9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-27e04e4b49fd5fec", "level": "note", "message": {"text": "Very large file: app/clinical/internships/[id]/page.tsx (3023 lines)"}, "properties": {"repobilityId": "cee90e64328ee304", "scanner": "scanner-primary", "fingerprint": "27e04e4b49fd5fec", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-bd1aa370d0eaf50d", "level": "note", "message": {"text": "Very large file: app/clinical/internships/all/page.tsx (1867 lines)"}, "properties": {"repobilityId": "4a52d4c596b2eb80", "scanner": "scanner-primary", "fingerprint": "bd1aa370d0eaf50d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-acb9d555d6409096", "level": "note", "message": {"text": "Very large file: app/clinical/rotation-scheduler/page.tsx (1200 lines)"}, "properties": {"repobilityId": "30a6dd96b5db04e9", "scanner": "scanner-primary", "fingerprint": "acb9d555d6409096", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1588d849d8d270a8", "level": "note", "message": {"text": "Very large file: app/clinical/hours/page.tsx (1833 lines)"}, "properties": {"repobilityId": "8178aac0eef85401", "scanner": "scanner-primary", "fingerprint": "1588d849d8d270a8", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7a92540b299e4b7a", "level": "note", "message": {"text": "Very large file: components/LabTimer.tsx (1501 lines)"}, "properties": {"repobilityId": "14bb9ee49d9154bb", "scanner": "scanner-primary", "fingerprint": "7a92540b299e4b7a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b3073f9b6fca6a8f", "level": "note", "message": {"text": "Very large file: components/SkillSheetPanel.tsx (3625 lines)"}, "properties": {"repobilityId": "2f269634a1a81b60", "scanner": "scanner-primary", "fingerprint": "b3073f9b6fca6a8f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cbf4c87ce66b6a16", "level": "note", "message": {"text": "Very large file: components/lab-day/EditStationModal.tsx (1421 lines)"}, "properties": {"repobilityId": "7d6a99a838dc028e", "scanner": "scanner-primary", "fingerprint": "cbf4c87ce66b6a16", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-60942eae7685422f", "level": "note", "message": {"text": "Very large file: components/scheduling/CoordinatorCalendarView.tsx (1149 lines)"}, "properties": {"repobilityId": "1eb3a8f4834b7f4d", "scanner": "scanner-primary", "fingerprint": "60942eae7685422f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-35d4a3ae75f34934", "level": "note", "message": {"text": "Very large file: components/cases/CaseEditor.tsx (1384 lines)"}, "properties": {"repobilityId": "d149417b7a93c4d8", "scanner": "scanner-primary", "fingerprint": "35d4a3ae75f34934", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cbe000dc1328b64c", "level": "note", "message": {"text": "Very large file: components/clinical/CloseoutSection.tsx (1621 lines)"}, "properties": {"repobilityId": "be8f877e78143941", "scanner": "scanner-primary", "fingerprint": "cbe000dc1328b64c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-885fc6f2bf0053c6", "level": "note", "message": {"text": "Very large file: components/scheduler/SchedulerAdmin.tsx (1147 lines)"}, "properties": {"repobilityId": "cd75c841529fbb51", "scanner": "scanner-primary", "fingerprint": "885fc6f2bf0053c6", "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": "9272a972cb776044", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "cefebaec335218b5", "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": "700003011cbb2995", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "7e18477ecb384647", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "e7fcaa329cfbea4a", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "note", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "f8327b4cc830a54c", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "acabeba3d4f3ea7d", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3523b1bfd8f99048", "level": "none", "message": {"text": "Commented-code block (8 lines) in next.config.ts:36"}, "properties": {"repobilityId": "2050b5336aadd9fc", "scanner": "scanner-primary", "fingerprint": "3523b1bfd8f99048", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f097e046d7a13fe4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/page.tsx:229"}, "properties": {"repobilityId": "17934f5704aa1b3e", "scanner": "scanner-primary", "fingerprint": "f097e046d7a13fe4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b32f5ef16bb6ca9c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/peer-evaluations/aggregate/route.ts:93"}, "properties": {"repobilityId": "058389699f3c4bf0", "scanner": "scanner-primary", "fingerprint": "b32f5ef16bb6ca9c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b9a6e12d30972f8d", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/cron/affiliation-expiry/route.ts:50"}, "properties": {"repobilityId": "3d60c1d795c0ba8f", "scanner": "scanner-primary", "fingerprint": "b9a6e12d30972f8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-25eed4c8bdf533d6", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/cron/cert-expiry/route.ts:70"}, "properties": {"repobilityId": "5127427e339e1c34", "scanner": "scanner-primary", "fingerprint": "25eed4c8bdf533d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ea536043a5ada882", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/cron/internship-milestones/route.ts:61"}, "properties": {"repobilityId": "c82f335fe477e20c", "scanner": "scanner-primary", "fingerprint": "ea536043a5ada882", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-352e367d81c54a3c", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/cron/clinical-hours-reminder/route.ts:57"}, "properties": {"repobilityId": "6f0ea5f1931bb871", "scanner": "scanner-primary", "fingerprint": "352e367d81c54a3c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-128355371fab1905", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/cron/calendar-sync/route.ts:22"}, "properties": {"repobilityId": "7ee6e97129aa0124", "scanner": "scanner-primary", "fingerprint": "128355371fab1905", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66e42d5e19443ba9", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/lvfr-aemt/admin/seed/route.ts:321"}, "properties": {"repobilityId": "db1d6a49a5d9802f", "scanner": "scanner-primary", "fingerprint": "66e42d5e19443ba9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1eda510ce4c5d020", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/lvfr-aemt/grades/import/confirm/route.ts:11"}, "properties": {"repobilityId": "16fbef4fa25df076", "scanner": "scanner-primary", "fingerprint": "1eda510ce4c5d020", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c19a119a32ca49aa", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/lvfr-aemt/planner/reseed/route.ts:673"}, "properties": {"repobilityId": "3382cef8b0f5b225", "scanner": "scanner-primary", "fingerprint": "c19a119a32ca49aa", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc10d2a32ab621ff", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/lvfr-aemt/runsheet/[date]/seed/route.ts:97"}, "properties": {"repobilityId": "38fcfdd440419806", "scanner": "scanner-primary", "fingerprint": "bc10d2a32ab621ff", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-50093133f8d05a04", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/admin/seed-instructor-availability/route.ts:90"}, "properties": {"repobilityId": "4b647348808d2350", "scanner": "scanner-primary", "fingerprint": "50093133f8d05a04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4d39ed3e18b3906c", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/admin/equipment/maintenance/route.ts:8"}, "properties": {"repobilityId": "e77db4d423efd48e", "scanner": "scanner-primary", "fingerprint": "4d39ed3e18b3906c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be4554ffb270984c", "level": "note", "message": {"text": "Legacy-named symbol `full_backup` in app/api/admin/data-export/route.ts:11"}, "properties": {"repobilityId": "c488d5f64f51aa76", "scanner": "scanner-primary", "fingerprint": "be4554ffb270984c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-b85642e4be37eb6b", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/admin/feedback/import/route.ts:11"}, "properties": {"repobilityId": "872e20b0a70e1c09", "scanner": "scanner-primary", "fingerprint": "b85642e4be37eb6b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3318491025437c90", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/admin/scenarios/transform/route.ts:334"}, "properties": {"repobilityId": "0d8cc3583794c00b", "scanner": "scanner-primary", "fingerprint": "3318491025437c90", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a211d5cd9580cc72", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/api/admin/scenarios/bulk-import/route.ts:399"}, "properties": {"repobilityId": "2f6ce052b40269ef", "scanner": "scanner-primary", "fingerprint": "a211d5cd9580cc72", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e63a2fc6906c8c23", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/api/admin/scenarios/bulk-import/commit/route.ts:11"}, "properties": {"repobilityId": "405b7298bd0a51dd", "scanner": "scanner-primary", "fingerprint": "e63a2fc6906c8c23", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9dfd1d0e385eff8f", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/admin/scenarios/auto-fill/route.ts:156"}, "properties": {"repobilityId": "a958ffd9c6374b8b", "scanner": "scanner-primary", "fingerprint": "9dfd1d0e385eff8f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2688b71ef467de9a", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/api/admin/broadcast/route.ts:100"}, "properties": {"repobilityId": "90cabd69f2526c49", "scanner": "scanner-primary", "fingerprint": "2688b71ef467de9a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9149dceded0801e8", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/admin/skill-drills/import/route.ts:7"}, "properties": {"repobilityId": "533618c44aeb1ff3", "scanner": "scanner-primary", "fingerprint": "9149dceded0801e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5e19597dd1f18ff1", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/api/admin/lab-templates/apply/route.ts:11"}, "properties": {"repobilityId": "4d5a457cc3487a17", "scanner": "scanner-primary", "fingerprint": "5e19597dd1f18ff1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb8cf87ce4928620", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/admin/lab-templates/[id]/versions/route.ts:105"}, "properties": {"repobilityId": "e51fd3812d03d898", "scanner": "scanner-primary", "fingerprint": "fb8cf87ce4928620", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-95c8936c469bb6a0", "level": "none", "message": {"text": "Commented-code block (11 lines) in app/api/admin/lab-templates/refresh-day/route.ts:138"}, "properties": {"repobilityId": "6ca92210b3e17ad5", "scanner": "scanner-primary", "fingerprint": "95c8936c469bb6a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-adfb6fe0359ed620", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/admin/lab-templates/update-existing/route.ts:99"}, "properties": {"repobilityId": "b4ba34da605d08d2", "scanner": "scanner-primary", "fingerprint": "adfb6fe0359ed620", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2b0702765d266bf", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/admin/lab-templates/seed/route.ts:21"}, "properties": {"repobilityId": "5bab4f5f5d648bc5", "scanner": "scanner-primary", "fingerprint": "c2b0702765d266bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee2f07a41cc00a8a", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/admin/lab-templates/update-from-lab/route.ts:78"}, "properties": {"repobilityId": "b4afa0a2e8313e4b", "scanner": "scanner-primary", "fingerprint": "ee2f07a41cc00a8a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5a032a95116bd56", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/admin/lab-templates/import/route.ts:8"}, "properties": {"repobilityId": "3ce01c2e9fcbc243", "scanner": "scanner-primary", "fingerprint": "f5a032a95116bd56", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-13827215ccd4dc83", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/admin/incidents/route.ts:8"}, "properties": {"repobilityId": "eef42a365d44ea63", "scanner": "scanner-primary", "fingerprint": "13827215ccd4dc83", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c880314cd204bcdf", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/admin/incidents/[id]/route.ts:40"}, "properties": {"repobilityId": "17dd932a7b47258d", "scanner": "scanner-primary", "fingerprint": "c880314cd204bcdf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96077149a121bfb8", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/admin/cases/briefs/route.ts:1"}, "properties": {"repobilityId": "8a008713f630ac4b", "scanner": "scanner-primary", "fingerprint": "96077149a121bfb8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d05d15fc27c0f89a", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/admin/cases/prompt-template/route.ts:1"}, "properties": {"repobilityId": "35a09ce524704bfe", "scanner": "scanner-primary", "fingerprint": "d05d15fc27c0f89a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa638cc7c73abf2a", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/admin/calendar-sync/route.ts:125"}, "properties": {"repobilityId": "4f948618bf9bd5e6", "scanner": "scanner-primary", "fingerprint": "aa638cc7c73abf2a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23c0f2055099a90f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/admin/calendar-sync/cleanup-duplicates/route.ts:120"}, "properties": {"repobilityId": "1129e6b813243945", "scanner": "scanner-primary", "fingerprint": "23c0f2055099a90f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-258899920927de0d", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/admin/calendar-sync/force-resync/route.ts:101"}, "properties": {"repobilityId": "8384642bd933ca4e", "scanner": "scanner-primary", "fingerprint": "258899920927de0d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b1b49e3477c373b", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/lab-management/groups/route.ts:27"}, "properties": {"repobilityId": "67cfde8bdbe74813", "scanner": "scanner-primary", "fingerprint": "4b1b49e3477c373b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ff0dd3033cc8f835", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/api/lab-management/groups/[id]/members/route.ts:118"}, "properties": {"repobilityId": "0ac1bf8088096762", "scanner": "scanner-primary", "fingerprint": "ff0dd3033cc8f835", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ed0c1ce0b1b2a32", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/lab-management/lab-days/route.ts:245"}, "properties": {"repobilityId": "d34b7c4fe4d77fde", "scanner": "scanner-primary", "fingerprint": "0ed0c1ce0b1b2a32", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2f3eb1d745944502", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/api/lab-management/lab-days/[id]/skill-results/resend/route.ts:24"}, "properties": {"repobilityId": "9cb530b133a953dc", "scanner": "scanner-primary", "fingerprint": "2f3eb1d745944502", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-419930afd3ae1517", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/lab-management/lab-days/[id]/checkoff-status/route.ts:40"}, "properties": {"repobilityId": "20742cb0abce182f", "scanner": "scanner-primary", "fingerprint": "419930afd3ae1517", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fe4b77e8d7f1914", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/lab-management/lab-days/[id]/assistance-alerts/route.ts:56"}, "properties": {"repobilityId": "f52f5a39e58f3af6", "scanner": "scanner-primary", "fingerprint": "4fe4b77e8d7f1914", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-123f64c5711e90f8", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/lab-management/lab-days/[id]/retake-status/route.ts:97"}, "properties": {"repobilityId": "8148a2a412881073", "scanner": "scanner-primary", "fingerprint": "123f64c5711e90f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8243cadc3c171efb", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/lab-management/lab-days/[id]/student-pdf/route.ts:236"}, "properties": {"repobilityId": "2b90fa3002724559", "scanner": "scanner-primary", "fingerprint": "8243cadc3c171efb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9c6064c89284f226", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/lab-management/lab-days/templates/route.ts:44"}, "properties": {"repobilityId": "98e8200d56a9c2fb", "scanner": "scanner-primary", "fingerprint": "9c6064c89284f226", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-354b348c582a876f", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/lab-management/costs/route.ts:5"}, "properties": {"repobilityId": "dad2758cf0ea05fc", "scanner": "scanner-primary", "fingerprint": "354b348c582a876f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54eab47606af4b2e", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/api/lab-management/student-queue/route.ts:54"}, "properties": {"repobilityId": "740a89314aa55218", "scanner": "scanner-primary", "fingerprint": "54eab47606af4b2e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-49af94d618ac1efe", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/lab-management/stations/route.ts:204"}, "properties": {"repobilityId": "4645774d9f5b33ee", "scanner": "scanner-primary", "fingerprint": "49af94d618ac1efe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8a4389a8a460eac", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/lab-management/stations/[id]/route.ts:281"}, "properties": {"repobilityId": "8ecfdec8f8fec38f", "scanner": "scanner-primary", "fingerprint": "f8a4389a8a460eac", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5b00c66f2f7cb8b8", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/lab-management/scenarios/route.ts:19"}, "properties": {"repobilityId": "4b8c8385320e8cc7", "scanner": "scanner-primary", "fingerprint": "5b00c66f2f7cb8b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0dfa5d26f1443d20", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/lab-management/scenarios/[id]/versions/route.ts:74"}, "properties": {"repobilityId": "fbd30a642c221074", "scanner": "scanner-primary", "fingerprint": "0dfa5d26f1443d20", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb8ab0fb665f8392", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/lab-management/instructor-availability/route.ts:292"}, "properties": {"repobilityId": "b28af292e5a0a17e", "scanner": "scanner-primary", "fingerprint": "cb8ab0fb665f8392", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c16fd81bf7f0f21d", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/lab-management/cohorts/[id]/stats/route.ts:62"}, "properties": {"repobilityId": "f6f93f930b72ab13", "scanner": "scanner-primary", "fingerprint": "c16fd81bf7f0f21d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9beefe522fa9a64f", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/lab-management/schedule/suggestions/route.ts:38"}, "properties": {"repobilityId": "0bc87d08b1150931", "scanner": "scanner-primary", "fingerprint": "9beefe522fa9a64f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75514913489b144c", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/api/lab-management/timer/route.ts:60"}, "properties": {"repobilityId": "cce5dbf21f5bbd79", "scanner": "scanner-primary", "fingerprint": "75514913489b144c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6fe2e4de0d86c657", "level": "none", "message": {"text": "Commented-code block (16 lines) in app/api/lab-management/timer/adjust/route.ts:109"}, "properties": {"repobilityId": "7fd33a72b3303e1b", "scanner": "scanner-primary", "fingerprint": "6fe2e4de0d86c657", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-667b775d9ea94364", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/lab-management/timer/active/route.ts:6"}, "properties": {"repobilityId": "4159cb837faacb98", "scanner": "scanner-primary", "fingerprint": "667b775d9ea94364", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ab7686a1b565dfe6", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/lab-management/debrief-notes/counts/route.ts:5"}, "properties": {"repobilityId": "41675a027eb03399", "scanner": "scanner-primary", "fingerprint": "ab7686a1b565dfe6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c136a4b39ece7bc", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/lab-management/attendance/at-risk/route.ts:39"}, "properties": {"repobilityId": "b459c676c6e8502e", "scanner": "scanner-primary", "fingerprint": "0c136a4b39ece7bc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a40df771318a189", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/resources/route.ts:82"}, "properties": {"repobilityId": "efc6c0cc2839478a", "scanner": "scanner-primary", "fingerprint": "7a40df771318a189", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-da361caa1b04d744", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/resources/medications/route.ts:23"}, "properties": {"repobilityId": "f3d469caded98398", "scanner": "scanner-primary", "fingerprint": "da361caa1b04d744", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5634e673dcedcc77", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/students/[id]/graduate/route.ts:91"}, "properties": {"repobilityId": "2a81380f6017f247", "scanner": "scanner-primary", "fingerprint": "5634e673dcedcc77", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-847852326ae7a782", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/api/students/[id]/transfer/route.ts:81"}, "properties": {"repobilityId": "19b9617afe3d458c", "scanner": "scanner-primary", "fingerprint": "847852326ae7a782", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-96b0c95b8a83768f", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/skill-sheets/[id]/evaluate/route.ts:108"}, "properties": {"repobilityId": "c2a1b756278cb8a3", "scanner": "scanner-primary", "fingerprint": "96b0c95b8a83768f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0895ceb210175020", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/skill-sheets/[id]/evaluations/route.ts:119"}, "properties": {"repobilityId": "1355fe730488b99c", "scanner": "scanner-primary", "fingerprint": "0895ceb210175020", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1f3eef9d80964178", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/skill-sheets/evaluations-by-lab-day/route.ts:20"}, "properties": {"repobilityId": "217a51af34b0baef", "scanner": "scanner-primary", "fingerprint": "1f3eef9d80964178", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b28d8559ac096f6", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/skill-sheets/by-skill-name/route.ts:153"}, "properties": {"repobilityId": "86a401870eb0e24a", "scanner": "scanner-primary", "fingerprint": "7b28d8559ac096f6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc67144efc779438", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/skill-sheets/evaluations/send-email/route.ts:57"}, "properties": {"repobilityId": "ec06fb3af319d3ec", "scanner": "scanner-primary", "fingerprint": "bc67144efc779438", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb5e8c1107f2e09b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/osce/events/[id]/calendar-invites/route.ts:192"}, "properties": {"repobilityId": "df0564e4975ed7ff", "scanner": "scanner-primary", "fingerprint": "eb5e8c1107f2e09b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9836dedb6d89bf62", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/instructor/email-history/route.ts:160"}, "properties": {"repobilityId": "6717e6e5d8b643c7", "scanner": "scanner-primary", "fingerprint": "9836dedb6d89bf62", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9efd0f649823b696", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/deep-links/route.ts:18"}, "properties": {"repobilityId": "331e5467b4479234", "scanner": "scanner-primary", "fingerprint": "9efd0f649823b696", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-98f90f1e07fb379c", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/student/my-progress/route.ts:296"}, "properties": {"repobilityId": "9e438e554e50ea7c", "scanner": "scanner-primary", "fingerprint": "98f90f1e07fb379c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-181b0af800a32829", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/calendar/create-event/route.ts:137"}, "properties": {"repobilityId": "20bc67c394e9dc8a", "scanner": "scanner-primary", "fingerprint": "181b0af800a32829", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6d1cee0973831964", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/calendar/find-conflicts/route.ts:42"}, "properties": {"repobilityId": "d9ac30b3b7bcfd29", "scanner": "scanner-primary", "fingerprint": "6d1cee0973831964", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-30cc286a3d81a2d8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/calendar/find-slots/route.ts:57"}, "properties": {"repobilityId": "a39c5b53fe0a2a91", "scanner": "scanner-primary", "fingerprint": "30cc286a3d81a2d8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d586968c7610c076", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/api/calendar/sync-my-blocks/route.ts:76"}, "properties": {"repobilityId": "f2c9d75d1372c546", "scanner": "scanner-primary", "fingerprint": "d586968c7610c076", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc1be75120276ca0", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/calendar/availability/route.ts:5"}, "properties": {"repobilityId": "7178bc4c1b1b4132", "scanner": "scanner-primary", "fingerprint": "bc1be75120276ca0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c9008cc1bee5e353", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/calendar/calendars/route.ts:30"}, "properties": {"repobilityId": "7486b9f2278078db", "scanner": "scanner-primary", "fingerprint": "c9008cc1bee5e353", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1866e71c247dbc18", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/calendar/export-ics/route.ts:7"}, "properties": {"repobilityId": "ef3c5aaa9cdd386c", "scanner": "scanner-primary", "fingerprint": "1866e71c247dbc18", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dec2b2ab744f045c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/api/calendar/google-events/route.ts:66"}, "properties": {"repobilityId": "58c9eb9d0326515a", "scanner": "scanner-primary", "fingerprint": "dec2b2ab744f045c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4fa7993ee09be8f8", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/api/calendar/callback/route.ts:67"}, "properties": {"repobilityId": "12db19746aad7d41", "scanner": "scanner-primary", "fingerprint": "4fa7993ee09be8f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-491f5e73fa603691", "level": "none", "message": {"text": "Commented-code block (10 lines) in app/api/calendar/unified/route.ts:75"}, "properties": {"repobilityId": "b43e84b41266ee14", "scanner": "scanner-primary", "fingerprint": "491f5e73fa603691", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9521e0c61b2f0e3d", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/scheduling/shifts/generate-from-labs/route.ts:91"}, "properties": {"repobilityId": "a28bb857eaa08083", "scanner": "scanner-primary", "fingerprint": "9521e0c61b2f0e3d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c5025232fd044249", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/api/scheduling/planner/generate/route.ts:53"}, "properties": {"repobilityId": "83936cc5997f02e2", "scanner": "scanner-primary", "fingerprint": "c5025232fd044249", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fcae4ed6a30edc2f", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/scheduling/planner/blocks/route.ts:138"}, "properties": {"repobilityId": "4a12bb6e6de5fbfd", "scanner": "scanner-primary", "fingerprint": "fcae4ed6a30edc2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba7ba34ad85a201e", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/scheduling/planner/blocks/[id]/route.ts:127"}, "properties": {"repobilityId": "22c2b26d3a995a51", "scanner": "scanner-primary", "fingerprint": "ba7ba34ad85a201e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-27821c8afa09f6f1", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/scheduling/planner/blocks/recurring/route.ts:92"}, "properties": {"repobilityId": "b4f0ab2eda580390", "scanner": "scanner-primary", "fingerprint": "27821c8afa09f6f1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-07c36f0d444dacec", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/scheduling/planner/blocks/check-existing/route.ts:39"}, "properties": {"repobilityId": "0a7130501c3d334c", "scanner": "scanner-primary", "fingerprint": "07c36f0d444dacec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f783be3236d74c83", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/scheduling/planner/programs/route.ts:19"}, "properties": {"repobilityId": "63f8a2434478f4a3", "scanner": "scanner-primary", "fingerprint": "f783be3236d74c83", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-170bfc06333d378f", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/api/scheduling/planner/semesters/[id]/route.ts:135"}, "properties": {"repobilityId": "094d66394a9617b2", "scanner": "scanner-primary", "fingerprint": "170bfc06333d378f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ba7a5fd5919ad1f", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/scheduling/planner/lab-templates/route.ts:24"}, "properties": {"repobilityId": "a6bf2a686510f840", "scanner": "scanner-primary", "fingerprint": "0ba7a5fd5919ad1f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae54dba33ad8c7db", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/scheduling/manual-hours/route.ts:85"}, "properties": {"repobilityId": "4e178d4f6bf01d2a", "scanner": "scanner-primary", "fingerprint": "ae54dba33ad8c7db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-038ae5ef20531ac8", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/scheduling/coordinator-calendar/route.ts:110"}, "properties": {"repobilityId": "d8b2f4c2d76acf90", "scanner": "scanner-primary", "fingerprint": "038ae5ef20531ac8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e01468d924e0676", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/api/volunteer/events/[id]/send-correction/route.ts:12"}, "properties": {"repobilityId": "e54a1b0a59ae4a0c", "scanner": "scanner-primary", "fingerprint": "6e01468d924e0676", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7ad4c5b98c09c08d", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/announcements/route.ts:146"}, "properties": {"repobilityId": "824ffc269ad5c415", "scanner": "scanner-primary", "fingerprint": "7ad4c5b98c09c08d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5106cb8898eae849", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/cases/leaderboard/[cohortId]/route.ts:9"}, "properties": {"repobilityId": "b615f1b09eb8b96e", "scanner": "scanner-primary", "fingerprint": "5106cb8898eae849", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-910c2f232aa4e632", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/api/clinical/internships/route.ts:31"}, "properties": {"repobilityId": "564ba3b45c9da27c", "scanner": "scanner-primary", "fingerprint": "910c2f232aa4e632", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b27dc1da94beeca7", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/api/clinical/internships/[id]/route.ts:34"}, "properties": {"repobilityId": "fc5af671af2d1f7c", "scanner": "scanner-primary", "fingerprint": "b27dc1da94beeca7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cfa0242af6849ed6", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/labs/scenario-library/page.tsx:881"}, "properties": {"repobilityId": "29ec562e6884393d", "scanner": "scanner-primary", "fingerprint": "cfa0242af6849ed6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bd6abe5a99067ca9", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/labs/grade/station/[id]/page.tsx:304"}, "properties": {"repobilityId": "5eccc3347413bb9e", "scanner": "scanner-primary", "fingerprint": "bd6abe5a99067ca9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05091744384bd7ab", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/grade/station/[id]/page.tsx:778"}, "properties": {"repobilityId": "7c2ad14a00bfe2f4", "scanner": "scanner-primary", "fingerprint": "05091744384bd7ab", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-42c2371ee11d5631", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/labs/groups/page.tsx:719"}, "properties": {"repobilityId": "8084408bb80fe47a", "scanner": "scanner-primary", "fingerprint": "42c2371ee11d5631", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cdc47f88da86547a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/groups/page.tsx:382"}, "properties": {"repobilityId": "970f7f46009cb6bb", "scanner": "scanner-primary", "fingerprint": "cdc47f88da86547a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-20ba8dbaf99198e4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/my-certifications/CETracker.tsx:79"}, "properties": {"repobilityId": "c114d13dd2311fd4", "scanner": "scanner-primary", "fingerprint": "20ba8dbaf99198e4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5819126a742ff837", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/my-certifications/CertList.tsx:186"}, "properties": {"repobilityId": "3e9bbb773d56807d", "scanner": "scanner-primary", "fingerprint": "5819126a742ff837", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-234a6a64db4d21b8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/my-certifications/page.tsx:64"}, "properties": {"repobilityId": "da54c84151afb110", "scanner": "scanner-primary", "fingerprint": "234a6a64db4d21b8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2ef52d115e22e766", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/templates/weekly/page.tsx:183"}, "properties": {"repobilityId": "c760000697b1bfd1", "scanner": "scanner-primary", "fingerprint": "2ef52d115e22e766", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a73e30cc26ea2096", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/templates/review/[id]/item/[itemId]/page.tsx:274"}, "properties": {"repobilityId": "f44853a35747f0a2", "scanner": "scanner-primary", "fingerprint": "a73e30cc26ea2096", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e97b9bea7b5a848e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/stations/log/page.tsx:215"}, "properties": {"repobilityId": "42bc2f76189fc6b0", "scanner": "scanner-primary", "fingerprint": "e97b9bea7b5a848e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1431e278df599d80", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/stations/pool/page.tsx:218"}, "properties": {"repobilityId": "420c00567e63ff8f", "scanner": "scanner-primary", "fingerprint": "1431e278df599d80", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0bcd688d0cd2c437", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/scenarios/page.tsx:174"}, "properties": {"repobilityId": "b57b62b1b06c57cd", "scanner": "scanner-primary", "fingerprint": "0bcd688d0cd2c437", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-760824aa7e66ca28", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/labs/scenarios/[id]/page.tsx:1197"}, "properties": {"repobilityId": "a3c222511ec37c76", "scanner": "scanner-primary", "fingerprint": "760824aa7e66ca28", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-15b8a0145151b609", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/scenarios/[id]/page.tsx:1259"}, "properties": {"repobilityId": "9dc70909805ba5fb", "scanner": "scanner-primary", "fingerprint": "15b8a0145151b609", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-27c4ac38a644a431", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/scenarios/new/page.tsx:793"}, "properties": {"repobilityId": "d258f7e9b44b2b92", "scanner": "scanner-primary", "fingerprint": "27c4ac38a644a431", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fc33be059a5214b0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/peer-evals/page.tsx:182"}, "properties": {"repobilityId": "c39feabf9d601497", "scanner": "scanner-primary", "fingerprint": "fc33be059a5214b0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b5d7487f2af541d7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/skill-drills/page.tsx:389"}, "properties": {"repobilityId": "aff05ab3e654b6f4", "scanner": "scanner-primary", "fingerprint": "b5d7487f2af541d7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-19c4fbdab776d707", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/labs/skill-drills/[id]/page.tsx:6"}, "properties": {"repobilityId": "3fdee91ff0e878c4", "scanner": "scanner-primary", "fingerprint": "19c4fbdab776d707", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0871845b9692cd8d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/skill-sheets/page.tsx:201"}, "properties": {"repobilityId": "3b667be9aeb4aa2e", "scanner": "scanner-primary", "fingerprint": "0871845b9692cd8d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2f53ec023d2762eb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/page.tsx:282"}, "properties": {"repobilityId": "6e8345087b974840", "scanner": "scanner-primary", "fingerprint": "2f53ec023d2762eb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-286d18da05fb9213", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/labs/schedule/[id]/page.tsx:89"}, "properties": {"repobilityId": "71698426bc41b8d3", "scanner": "scanner-primary", "fingerprint": "286d18da05fb9213", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4fa0fd3dd2224f9b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/[id]/page.tsx:197"}, "properties": {"repobilityId": "513561749eaf1ddf", "scanner": "scanner-primary", "fingerprint": "4fa0fd3dd2224f9b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c3b16f0a8f57207d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/[id]/stations/new/page.tsx:254"}, "properties": {"repobilityId": "0468dd076f9a2817", "scanner": "scanner-primary", "fingerprint": "c3b16f0a8f57207d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8cde7bb5431ffc0b", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/labs/schedule/[id]/assignments/page.tsx:125"}, "properties": {"repobilityId": "36de3b64ccf137f9", "scanner": "scanner-primary", "fingerprint": "8cde7bb5431ffc0b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-68b663a3d71c3bba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/[id]/assignments/page.tsx:215"}, "properties": {"repobilityId": "180fa657f547b169", "scanner": "scanner-primary", "fingerprint": "68b663a3d71c3bba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-aa15bee864051dd4", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/labs/schedule/[id]/coordinator/page.tsx:196"}, "properties": {"repobilityId": "c75b7cd8f61645ed", "scanner": "scanner-primary", "fingerprint": "aa15bee864051dd4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9228b7c93f75061", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/[id]/coordinator/page.tsx:851"}, "properties": {"repobilityId": "736edce42f8cd8c4", "scanner": "scanner-primary", "fingerprint": "e9228b7c93f75061", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b2aed17778654f4a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/[id]/edit/page.tsx:328"}, "properties": {"repobilityId": "ccb331063de63020", "scanner": "scanner-primary", "fingerprint": "b2aed17778654f4a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c458941b59416346", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/labs/schedule/new/page.tsx:287"}, "properties": {"repobilityId": "cac9dd51070992d7", "scanner": "scanner-primary", "fingerprint": "c458941b59416346", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-adae41d27288cada", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/schedule/new/page.tsx:488"}, "properties": {"repobilityId": "798beb34ce9e92e9", "scanner": "scanner-primary", "fingerprint": "adae41d27288cada", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1c5e456df83b9cad", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/labs/seating/charts/page.tsx:80"}, "properties": {"repobilityId": "090be4b75a9c287a", "scanner": "scanner-primary", "fingerprint": "1c5e456df83b9cad", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a7db7d868038ca99", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/labs/seating/charts/[id]/page.tsx:442"}, "properties": {"repobilityId": "a172653b78946577", "scanner": "scanner-primary", "fingerprint": "a7db7d868038ca99", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76012f344c260779", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/seating/learning-styles/page.tsx:196"}, "properties": {"repobilityId": "143b60f8277b76f4", "scanner": "scanner-primary", "fingerprint": "76012f344c260779", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-43b1c88e9e44dba6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/seating/preferences/page.tsx:142"}, "properties": {"repobilityId": "6e47cc5fc62caa1a", "scanner": "scanner-primary", "fingerprint": "43b1c88e9e44dba6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-108eb3ad49f896f2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/labs/mentorship/page.tsx:321"}, "properties": {"repobilityId": "3937b35dac3a60aa", "scanner": "scanner-primary", "fingerprint": "108eb3ad49f896f2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2832221ffb346466", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lvfr-aemt/files/page.tsx:168"}, "properties": {"repobilityId": "1f2955fbd5ca38bb", "scanner": "scanner-primary", "fingerprint": "2832221ffb346466", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b7c7db74ee078db4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lvfr-aemt/grades/page.tsx:680"}, "properties": {"repobilityId": "f31a353fb2988372", "scanner": "scanner-primary", "fingerprint": "b7c7db74ee078db4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d8456c15e9e41512", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/lvfr-aemt/day/[date]/page.tsx:159"}, "properties": {"repobilityId": "c5c7ed819eb8b544", "scanner": "scanner-primary", "fingerprint": "d8456c15e9e41512", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dea4ef7263fd521c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lvfr-aemt/day/[date]/page.tsx:281"}, "properties": {"repobilityId": "1ba295b54e5ac3cd", "scanner": "scanner-primary", "fingerprint": "dea4ef7263fd521c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-28bb06e842f98fbd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lvfr-aemt/planner/page.tsx:1193"}, "properties": {"repobilityId": "3f9d3f9a965763af", "scanner": "scanner-primary", "fingerprint": "28bb06e842f98fbd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-09ccc64f99fb818e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/lvfr-aemt/skills/page.tsx:157"}, "properties": {"repobilityId": "11158b8d5fb6cff2", "scanner": "scanner-primary", "fingerprint": "09ccc64f99fb818e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bde669f9c7b7539c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/bulk-operations/page.tsx:439"}, "properties": {"repobilityId": "2cefe2cb54752527", "scanner": "scanner-primary", "fingerprint": "bde669f9c7b7539c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4a4b71d246bb3e06", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/equipment/page.tsx:920"}, "properties": {"repobilityId": "40ab7372c38391cc", "scanner": "scanner-primary", "fingerprint": "4a4b71d246bb3e06", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e9814647cef74047", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/equipment/maintenance/page.tsx:814"}, "properties": {"repobilityId": "f6903ea494b75609", "scanner": "scanner-primary", "fingerprint": "e9814647cef74047", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a038628b8b9a19d0", "level": "note", "message": {"text": "Legacy-named symbol `full_backup` in app/admin/data-export/page.tsx:31"}, "properties": {"repobilityId": "0658bba119b9a607", "scanner": "scanner-primary", "fingerprint": "a038628b8b9a19d0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8e3f313a4acc30b2", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/admin/feedback/page.tsx:256"}, "properties": {"repobilityId": "0d405fde5bc7bc30", "scanner": "scanner-primary", "fingerprint": "8e3f313a4acc30b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59b1df610e76aef0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/feedback/page.tsx:344"}, "properties": {"repobilityId": "cfc17f20f6cf3995", "scanner": "scanner-primary", "fingerprint": "59b1df610e76aef0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d5e9982c759b2bc7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/alumni/page.tsx:983"}, "properties": {"repobilityId": "043390296644c6eb", "scanner": "scanner-primary", "fingerprint": "d5e9982c759b2bc7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c8598c95ac46e4f5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/scenarios/transform/page.tsx:153"}, "properties": {"repobilityId": "3a52a2a8398bf913", "scanner": "scanner-primary", "fingerprint": "c8598c95ac46e4f5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f292d33c49252e16", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/scenarios/bulk-import/page.tsx:264"}, "properties": {"repobilityId": "7fe9531526ce3b3b", "scanner": "scanner-primary", "fingerprint": "f292d33c49252e16", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d7f82ccc5a88e7a0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/volunteer-events/page.tsx:221"}, "properties": {"repobilityId": "2552433e30796dd2", "scanner": "scanner-primary", "fingerprint": "d7f82ccc5a88e7a0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e88dba177f0f4865", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/webhooks/page.tsx:813"}, "properties": {"repobilityId": "022fe646a21f180b", "scanner": "scanner-primary", "fingerprint": "e88dba177f0f4865", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-49d2017e32f31c82", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/rubrics/page.tsx:731"}, "properties": {"repobilityId": "91b18bcdf495bdec", "scanner": "scanner-primary", "fingerprint": "49d2017e32f31c82", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5088087d35fa1c5c", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/admin/settings/page.tsx:295"}, "properties": {"repobilityId": "cce0d4e0ad3489ba", "scanner": "scanner-primary", "fingerprint": "5088087d35fa1c5c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f7feca3a5bc2cd3b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/semesters/page.tsx:488"}, "properties": {"repobilityId": "2afab6d164bfc37f", "scanner": "scanner-primary", "fingerprint": "f7feca3a5bc2cd3b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-360e7fc3762d05b4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/lab-templates/page.tsx:343"}, "properties": {"repobilityId": "029ae7be77e5e84c", "scanner": "scanner-primary", "fingerprint": "360e7fc3762d05b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3a9e1fee3db8d866", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/admin/lab-templates/import/page.tsx:187"}, "properties": {"repobilityId": "47b35300d879988f", "scanner": "scanner-primary", "fingerprint": "3a9e1fee3db8d866", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1dfd3aa93512323d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/lab-templates/import/page.tsx:292"}, "properties": {"repobilityId": "b57267987a0fcea2", "scanner": "scanner-primary", "fingerprint": "1dfd3aa93512323d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9e358eb23a3a7fc9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/instructor-workload/page.tsx:137"}, "properties": {"repobilityId": "ba05939b8f654e55", "scanner": "scanner-primary", "fingerprint": "9e358eb23a3a7fc9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-59a04196ff2388cb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/announcements/page.tsx:403"}, "properties": {"repobilityId": "5be13e92d3fc3414", "scanner": "scanner-primary", "fingerprint": "59a04196ff2388cb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9b406d50ca720795", "level": "note", "message": {"text": "Legacy-named symbol `pmi_qa_checklist_v1` in app/admin/qa-checklist/page.tsx:352"}, "properties": {"repobilityId": "606c2f1d9ae1db05", "scanner": "scanner-primary", "fingerprint": "9b406d50ca720795", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e6a4c86fba08c3d0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/admin/time-clock/page.tsx:203"}, "properties": {"repobilityId": "c004eb92827627b6", "scanner": "scanner-primary", "fingerprint": "e6a4c86fba08c3d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4937d47b5c83f507", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/admin/calendar-sync/page.tsx:422"}, "properties": {"repobilityId": "bdac7f197e434a38", "scanner": "scanner-primary", "fingerprint": "4937d47b5c83f507", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f10904d3e592c4a1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/feedback/my-submissions/page.tsx:174"}, "properties": {"repobilityId": "24f6a1a309876fe6", "scanner": "scanner-primary", "fingerprint": "f10904d3e592c4a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-17b6ee7c80393c56", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/timer-display/live/[labDayId]/page.tsx:294"}, "properties": {"repobilityId": "ed0c5d3c34f12445", "scanner": "scanner-primary", "fingerprint": "17b6ee7c80393c56", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-47212a4609bea7e8", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/timer-display/[token]/page.tsx:211"}, "properties": {"repobilityId": "d00707e187aa4810", "scanner": "scanner-primary", "fingerprint": "47212a4609bea7e8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e361c3c91cfcc056", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/reports/page.tsx:187"}, "properties": {"repobilityId": "137f82de61bd5cc4", "scanner": "scanner-primary", "fingerprint": "e361c3c91cfcc056", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-822905a806259a6f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/scenario-usage/page.tsx:107"}, "properties": {"repobilityId": "462c3b0a119ff426", "scanner": "scanner-primary", "fingerprint": "822905a806259a6f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-89b7591d82b3a163", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/lab-progress/page.tsx:150"}, "properties": {"repobilityId": "40a688fb1b619a73", "scanner": "scanner-primary", "fingerprint": "89b7591d82b3a163", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1be06e5a4bdffcd3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/builder/page.tsx:295"}, "properties": {"repobilityId": "881d3bddb98ab64e", "scanner": "scanner-primary", "fingerprint": "1be06e5a4bdffcd3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-24cea9055d34ede5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/lab-costs/page.tsx:149"}, "properties": {"repobilityId": "4a55d6ae19958261", "scanner": "scanner-primary", "fingerprint": "24cea9055d34ede5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7a5b9ffa056947a3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/student-dashboard/page.tsx:89"}, "properties": {"repobilityId": "2d125cb1cef17adf", "scanner": "scanner-primary", "fingerprint": "7a5b9ffa056947a3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-39f777e96d5d90b5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/instructor-workload/page.tsx:129"}, "properties": {"repobilityId": "bb78a04a7e121430", "scanner": "scanner-primary", "fingerprint": "39f777e96d5d90b5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e25db107d58773e4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/skill-trends/page.tsx:211"}, "properties": {"repobilityId": "1d99c2033146a78c", "scanner": "scanner-primary", "fingerprint": "e25db107d58773e4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f62e5c14ffa53300", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/program-outcomes/page.tsx:572"}, "properties": {"repobilityId": "5131198f84e672b7", "scanner": "scanner-primary", "fingerprint": "f62e5c14ffa53300", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eff07810094b0a60", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/attendance/page.tsx:121"}, "properties": {"repobilityId": "645a4a91c4c5a573", "scanner": "scanner-primary", "fingerprint": "eff07810094b0a60", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7a06c992c4ac2c1c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/reports/scenario-analytics/page.tsx:152"}, "properties": {"repobilityId": "d3810b13a4e02964", "scanner": "scanner-primary", "fingerprint": "7a06c992c4ac2c1c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a8ac0022b8b54cf4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/resources/page.tsx:760"}, "properties": {"repobilityId": "a64632a0c33b982c", "scanner": "scanner-primary", "fingerprint": "a8ac0022b8b54cf4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9922a6904538d7b9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/resources/medications/page.tsx:892"}, "properties": {"repobilityId": "79bdce6ff6d78567", "scanner": "scanner-primary", "fingerprint": "9922a6904538d7b9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c5af1efb96cdbb91", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/osce-scoring/[assessmentId]/page.tsx:416"}, "properties": {"repobilityId": "1249ff2b415ef726", "scanner": "scanner-primary", "fingerprint": "c5af1efb96cdbb91", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cfdaf8bd6dcfe866", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/osce-scenario/[letter]/page.tsx:67"}, "properties": {"repobilityId": "d799a692c15114b5", "scanner": "scanner-primary", "fingerprint": "cfdaf8bd6dcfe866", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f1e5de12b763a491", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/poll/[id]/page.tsx:23"}, "properties": {"repobilityId": "37972a2f3f77879f", "scanner": "scanner-primary", "fingerprint": "f1e5de12b763a491", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc84ec1eda3573f7", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/poll/create/page.tsx:81"}, "properties": {"repobilityId": "094f509130b98ecc", "scanner": "scanner-primary", "fingerprint": "cc84ec1eda3573f7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d9595122d4dfccd3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/settings/page.tsx:252"}, "properties": {"repobilityId": "6c04fe544c453398", "scanner": "scanner-primary", "fingerprint": "d9595122d4dfccd3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-87467c14fa3a6a50", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/settings/sessions/page.tsx:319"}, "properties": {"repobilityId": "a9db35e4fafd1147", "scanner": "scanner-primary", "fingerprint": "87467c14fa3a6a50", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4ce0b2eb13517acc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/instructor/page.tsx:130"}, "properties": {"repobilityId": "3d9a51aaa2110140", "scanner": "scanner-primary", "fingerprint": "4ce0b2eb13517acc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-473dbb739a871703", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/instructor/ce/page.tsx:93"}, "properties": {"repobilityId": "79f2aeac656f8c4a", "scanner": "scanner-primary", "fingerprint": "473dbb739a871703", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-70b138972c86ffcc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/instructor/email-history/page.tsx:124"}, "properties": {"repobilityId": "68f74898af71037e", "scanner": "scanner-primary", "fingerprint": "70b138972c86ffcc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c49a012fb0d7fde1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/instructor/certifications/page.tsx:134"}, "properties": {"repobilityId": "330fc78270a5e548", "scanner": "scanner-primary", "fingerprint": "c49a012fb0d7fde1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-05ab40f64f6ff03e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/instructor/teaching/page.tsx:100"}, "properties": {"repobilityId": "931be208b1373452", "scanner": "scanner-primary", "fingerprint": "05ab40f64f6ff03e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1c5dbae4b37814fb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/instructor/history/page.tsx:190"}, "properties": {"repobilityId": "ec5227917f39ce7d", "scanner": "scanner-primary", "fingerprint": "1c5dbae4b37814fb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dee8047820a8c9d7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/student/page.tsx:150"}, "properties": {"repobilityId": "779d403f5cedc545", "scanner": "scanner-primary", "fingerprint": "dee8047820a8c9d7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f47ef1393f4ec5a2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/student/peer-eval/page.tsx:215"}, "properties": {"repobilityId": "ad7bc15e1f3f1230", "scanner": "scanner-primary", "fingerprint": "f47ef1393f4ec5a2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4bfaaa10b0788d90", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/student/skill-evaluations/[id]/page.tsx:86"}, "properties": {"repobilityId": "bca47ed58ec5e1c9", "scanner": "scanner-primary", "fingerprint": "4bfaaa10b0788d90", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8630702d5f08f30a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/onboarding/page.tsx:360"}, "properties": {"repobilityId": "a3fbf9587712918c", "scanner": "scanner-primary", "fingerprint": "8630702d5f08f30a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d9a9e49f5e39fb86", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/calendar/page.tsx:554"}, "properties": {"repobilityId": "9c21fc968cd889fb", "scanner": "scanner-primary", "fingerprint": "d9a9e49f5e39fb86", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c81adf9919bf8d87", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/calendar/page.tsx:670"}, "properties": {"repobilityId": "f07c988a96d30cf2", "scanner": "scanner-primary", "fingerprint": "c81adf9919bf8d87", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c650471106fc15ae", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/tasks/page.tsx:191"}, "properties": {"repobilityId": "a24c839eddf58e96", "scanner": "scanner-primary", "fingerprint": "c650471106fc15ae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9489a670a6caa264", "level": "none", "message": {"text": "Commented-code block (11 lines) in app/scheduling/page.tsx:81"}, "properties": {"repobilityId": "be3e03defbd2f1ae", "scanner": "scanner-primary", "fingerprint": "9489a670a6caa264", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-33079c17e79f47db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/page.tsx:188"}, "properties": {"repobilityId": "78dbd0aee36d9155", "scanner": "scanner-primary", "fingerprint": "33079c17e79f47db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c4c02bae9a006160", "level": "none", "message": {"text": "Commented-code block (10 lines) in app/scheduling/shifts/page.tsx:848"}, "properties": {"repobilityId": "f604a93df41c259b", "scanner": "scanner-primary", "fingerprint": "c4c02bae9a006160", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1c4a6c6f32b59a9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/shifts/page.tsx:334"}, "properties": {"repobilityId": "9eaf79026e65bf66", "scanner": "scanner-primary", "fingerprint": "c1c4a6c6f32b59a9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f85422d89ff8e443", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/shifts/new/page.tsx:451"}, "properties": {"repobilityId": "817a22693bda7e76", "scanner": "scanner-primary", "fingerprint": "f85422d89ff8e443", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ecec7b5d4f4b8317", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/scheduling/polls/create/page.tsx:46"}, "properties": {"repobilityId": "6d3375d22d2c7cf1", "scanner": "scanner-primary", "fingerprint": "ecec7b5d4f4b8317", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e4a80118eb7c58c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/polls/create/page.tsx:29"}, "properties": {"repobilityId": "c34783eaaa332e2a", "scanner": "scanner-primary", "fingerprint": "8e4a80118eb7c58c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c0d6a65e6081d605", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/resource-bookings/page.tsx:200"}, "properties": {"repobilityId": "3bee159825672be5", "scanner": "scanner-primary", "fingerprint": "c0d6a65e6081d605", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9cedcb5b939f6cfb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/availability/page.tsx:481"}, "properties": {"repobilityId": "95b487a38f0cf197", "scanner": "scanner-primary", "fingerprint": "9cedcb5b939f6cfb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ecf1bac366b5a5f0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/availability/all/page.tsx:1435"}, "properties": {"repobilityId": "082815aa9b483f53", "scanner": "scanner-primary", "fingerprint": "ecf1bac366b5a5f0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d3517957f04e4358", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/reports/page.tsx:171"}, "properties": {"repobilityId": "3d81b0964b589541", "scanner": "scanner-primary", "fingerprint": "d3517957f04e4358", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-37fc5bb123b0e290", "level": "none", "message": {"text": "Commented-code block (9 lines) in app/scheduling/planner/page.tsx:2409"}, "properties": {"repobilityId": "4debdd16678d6c16", "scanner": "scanner-primary", "fingerprint": "37fc5bb123b0e290", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fa7439a169974b13", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/planner/page.tsx:1465"}, "properties": {"repobilityId": "bbd19a03880fa00a", "scanner": "scanner-primary", "fingerprint": "fa7439a169974b13", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f98be790a7c8afea", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduling/planner/templates/page.tsx:116"}, "properties": {"repobilityId": "074dc801b821423d", "scanner": "scanner-primary", "fingerprint": "f98be790a7c8afea", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-85de5bfd5c99e9ed", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/notifications/page.tsx:279"}, "properties": {"repobilityId": "fbef5f1c58c13ceb", "scanner": "scanner-primary", "fingerprint": "85de5bfd5c99e9ed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ef18c4a395456c0b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/skill-evaluations/[id]/page.tsx:114"}, "properties": {"repobilityId": "9bae2eefc685f09c", "scanner": "scanner-primary", "fingerprint": "ef18c4a395456c0b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3be7eff010c04550", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/admin/smc/page.tsx:190"}, "properties": {"repobilityId": "7ecf977287832361", "scanner": "scanner-primary", "fingerprint": "3be7eff010c04550", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2bd82aa3b5e34195", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/academics/planner/page.tsx:1325"}, "properties": {"repobilityId": "8af7f7c5b4fcc84a", "scanner": "scanner-primary", "fingerprint": "2bd82aa3b5e34195", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-176079844dd5467d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/planner/page.tsx:1481"}, "properties": {"repobilityId": "60876922b35acabd", "scanner": "scanner-primary", "fingerprint": "176079844dd5467d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-54d8a12109b8b71e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/planner/templates/page.tsx:116"}, "properties": {"repobilityId": "ddf31314a17e470e", "scanner": "scanner-primary", "fingerprint": "54d8a12109b8b71e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4f24d88af767c3ad", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/students/page.tsx:124"}, "properties": {"repobilityId": "04d56b674e37ca14", "scanner": "scanner-primary", "fingerprint": "4f24d88af767c3ad", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9f3884b65e399d92", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/students/[id]/page.tsx:471"}, "properties": {"repobilityId": "f4c96449cb74f5b2", "scanner": "scanner-primary", "fingerprint": "9f3884b65e399d92", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8fd728e90023cf93", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/cohorts/page.tsx:143"}, "properties": {"repobilityId": "dc402cdfe1971e9b", "scanner": "scanner-primary", "fingerprint": "8fd728e90023cf93", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2581a0bf436b5842", "level": "none", "message": {"text": "Commented-code block (7 lines) in app/academics/cohorts/[id]/page.tsx:255"}, "properties": {"repobilityId": "5ff33abb75432597", "scanner": "scanner-primary", "fingerprint": "2581a0bf436b5842", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c67b056779328537", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/cohorts/[id]/page.tsx:348"}, "properties": {"repobilityId": "209709ac1f39348a", "scanner": "scanner-primary", "fingerprint": "c67b056779328537", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1142fd252abaf06b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/cohorts/[id]/skill-log/page.tsx:108"}, "properties": {"repobilityId": "4c3eae635e312283", "scanner": "scanner-primary", "fingerprint": "1142fd252abaf06b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d3fa43da1c088950", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/cohorts/[id]/groups/page.tsx:126"}, "properties": {"repobilityId": "f783d0e6ec3766fc", "scanner": "scanner-primary", "fingerprint": "d3fa43da1c088950", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9285800749287291", "level": "none", "message": {"text": "Commented-code block (5 lines) in app/academics/cohorts/[id]/intake/page.tsx:59"}, "properties": {"repobilityId": "7d1a6dad8d880d92", "scanner": "scanner-primary", "fingerprint": "9285800749287291", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a8cd93ee8cfafc3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/academics/cohorts/[id]/intake/page.tsx:108"}, "properties": {"repobilityId": "b98011633ed195ad", "scanner": "scanner-primary", "fingerprint": "7a8cd93ee8cfafc3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d4f36f1ca4236fe7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/cases/page.tsx:195"}, "properties": {"repobilityId": "1cb2d04a046e8443", "scanner": "scanner-primary", "fingerprint": "d4f36f1ca4236fe7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-79a176fad78bcd44", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/cases/session/[code]/join/page.tsx:106"}, "properties": {"repobilityId": "986654e4f6414a53", "scanner": "scanner-primary", "fingerprint": "79a176fad78bcd44", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e334fcd224e0f49f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/cases/leaderboard/page.tsx:112"}, "properties": {"repobilityId": "b15dd2069771950e", "scanner": "scanner-primary", "fingerprint": "e334fcd224e0f49f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d683409aedac2f3d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/layout.tsx:35"}, "properties": {"repobilityId": "28b97d21783980fa", "scanner": "scanner-primary", "fingerprint": "d683409aedac2f3d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-db4f2b0df35a787b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/page.tsx:96"}, "properties": {"repobilityId": "8b04607803d82d4d", "scanner": "scanner-primary", "fingerprint": "db4f2b0df35a787b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3e69cae729158b91", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/aemt-tracking/page.tsx:104"}, "properties": {"repobilityId": "bd7e2e0e4b509d4a", "scanner": "scanner-primary", "fingerprint": "3e69cae729158b91", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-22b4812978e5c081", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/clinical/internships/[id]/page.tsx:194"}, "properties": {"repobilityId": "66dde77358ff38c8", "scanner": "scanner-primary", "fingerprint": "22b4812978e5c081", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-de3bfdb52d13506a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/internships/[id]/page.tsx:443"}, "properties": {"repobilityId": "f5d777c0ee4ea774", "scanner": "scanner-primary", "fingerprint": "de3bfdb52d13506a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8ff0ac99c8bf9f40", "level": "none", "message": {"text": "Commented-code block (6 lines) in app/clinical/internships/all/page.tsx:408"}, "properties": {"repobilityId": "4b7f6427a6b5a262", "scanner": "scanner-primary", "fingerprint": "8ff0ac99c8bf9f40", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e931fd80b68efbb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/internships/all/page.tsx:312"}, "properties": {"repobilityId": "a00d020d4ac302d1", "scanner": "scanner-primary", "fingerprint": "4e931fd80b68efbb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c449065496b206bf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/internships/cohort/[id]/page.tsx:351"}, "properties": {"repobilityId": "91e7d7be940cf99e", "scanner": "scanner-primary", "fingerprint": "c449065496b206bf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c967295eda27b850", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/ride-alongs/page.tsx:68"}, "properties": {"repobilityId": "2820cbddbbbefbb9", "scanner": "scanner-primary", "fingerprint": "c967295eda27b850", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f95377de13322374", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/ride-alongs/shifts/page.tsx:145"}, "properties": {"repobilityId": "b4b7bba164b098d8", "scanner": "scanner-primary", "fingerprint": "f95377de13322374", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-041fa1735569b4a1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/ride-alongs/availability/page.tsx:118"}, "properties": {"repobilityId": "ff55eb4d4f08a6dd", "scanner": "scanner-primary", "fingerprint": "041fa1735569b4a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7705be016ebff2d7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/agencies/page.tsx:103"}, "properties": {"repobilityId": "2096cbf64f1cec94", "scanner": "scanner-primary", "fingerprint": "7705be016ebff2d7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c609e9f2d062173d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/rotation-scheduler/page.tsx:262"}, "properties": {"repobilityId": "af4f50a492941d76", "scanner": "scanner-primary", "fingerprint": "c609e9f2d062173d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-48b0f11772122b4f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/site-visits/page.tsx:228"}, "properties": {"repobilityId": "b1492a3b11137c88", "scanner": "scanner-primary", "fingerprint": "48b0f11772122b4f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-771b0f975d1d4b93", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/site-visit-settings/page.tsx:73"}, "properties": {"repobilityId": "300f1d8022faa507", "scanner": "scanner-primary", "fingerprint": "771b0f975d1d4b93", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7238566cd4b5f924", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/preceptors/page.tsx:205"}, "properties": {"repobilityId": "5ff2a6e13c4f5055", "scanner": "scanner-primary", "fingerprint": "7238566cd4b5f924", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bed618f6e61deb2f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/summative-evaluations/page.tsx:140"}, "properties": {"repobilityId": "a46575026f5c620f", "scanner": "scanner-primary", "fingerprint": "bed618f6e61deb2f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-76e7a99ea5ea68cf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/summative-evaluations/[id]/grade/page.tsx:299"}, "properties": {"repobilityId": "6179a66192625e6d", "scanner": "scanner-primary", "fingerprint": "76e7a99ea5ea68cf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-53df65966cbca286", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/compliance-tracker/page.tsx:209"}, "properties": {"repobilityId": "397afc13c994b71f", "scanner": "scanner-primary", "fingerprint": "53df65966cbca286", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7bb326e6b60c1a8f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/compliance/page.tsx:101"}, "properties": {"repobilityId": "e4b566275850757b", "scanner": "scanner-primary", "fingerprint": "7bb326e6b60c1a8f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a661ae0aeb781c64", "level": "none", "message": {"text": "Commented-code block (8 lines) in app/clinical/hours/page.tsx:575"}, "properties": {"repobilityId": "9b37e320ccdcbfbb", "scanner": "scanner-primary", "fingerprint": "a661ae0aeb781c64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7d9c96fb4dfadf18", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/hours/page.tsx:483"}, "properties": {"repobilityId": "a9f19c8040612168", "scanner": "scanner-primary", "fingerprint": "7d9c96fb4dfadf18", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bfb393f19e993816", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/mce/page.tsx:155"}, "properties": {"repobilityId": "718c55fec21289f0", "scanner": "scanner-primary", "fingerprint": "bfb393f19e993816", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-70740a32529017c6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/emt-tracking/page.tsx:98"}, "properties": {"repobilityId": "04754f8cfd53de3f", "scanner": "scanner-primary", "fingerprint": "70740a32529017c6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7db99f2e8d6623dd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/clinical/planning-calendar/page.tsx:207"}, "properties": {"repobilityId": "7d2a712bd224ec0f", "scanner": "scanner-primary", "fingerprint": "7db99f2e8d6623dd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dfde853290301660", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/scheduler/create/page.tsx:29"}, "properties": {"repobilityId": "86f987346906e445", "scanner": "scanner-primary", "fingerprint": "dfde853290301660", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fbaaac6de9254293", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 app/preceptor/evaluate/[token]/page.tsx:126"}, "properties": {"repobilityId": "173816c1a5ba9b9d", "scanner": "scanner-primary", "fingerprint": "fbaaac6de9254293", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e18baf8ea36a5935", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/reset-pm-g14-s2-lab-stations.js:2"}, "properties": {"repobilityId": "be0600770bae3e9d", "scanner": "scanner-primary", "fingerprint": "e18baf8ea36a5935", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-73d060943e7bd0ce", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/fix-lab-label.js:17"}, "properties": {"repobilityId": "cc21f11070b1e97f", "scanner": "scanner-primary", "fingerprint": "73d060943e7bd0ce", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0c144db3ec915ad1", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/audit-lab-day-dow-mismatch.js:38"}, "properties": {"repobilityId": "4132c0d4d9f4519d", "scanner": "scanner-primary", "fingerprint": "0c144db3ec915ad1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-12f165d28b59de81", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/unwrap-scenario-critical-actions.js:4"}, "properties": {"repobilityId": "ed840be803e26246", "scanner": "scanner-primary", "fingerprint": "12f165d28b59de81", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ea37b5eba25d598", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/fix-lab-blocks-and-emt-g5-labs.js:4"}, "properties": {"repobilityId": "5285ce41bdb67d12", "scanner": "scanner-primary", "fingerprint": "0ea37b5eba25d598", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e891286fd8105d49", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/reimport-paramedic-s2-v4-and-propagate.js:6"}, "properties": {"repobilityId": "23b91be9e9f8eea5", "scanner": "scanner-primary", "fingerprint": "e891286fd8105d49", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ce347d456e2702db", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/reimport-paramedic-s2-labs.js:5"}, "properties": {"repobilityId": "ce188b717a513d5e", "scanner": "scanner-primary", "fingerprint": "ce347d456e2702db", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-37d146a848e3e0ee", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 scripts/verify-calendar-scope.mjs:58"}, "properties": {"repobilityId": "2375a651965a4dc8", "scanner": "scanner-primary", "fingerprint": "37d146a848e3e0ee", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2922b6768e0952ef", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/extract-scenario-demographics-regex.js:144"}, "properties": {"repobilityId": "307f77fef589024f", "scanner": "scanner-primary", "fingerprint": "2922b6768e0952ef", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c72f4d02a749afb6", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/debug-josh-sync.js:5"}, "properties": {"repobilityId": "1f31f1faac1199d2", "scanner": "scanner-primary", "fingerprint": "c72f4d02a749afb6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6e1a149cfc176253", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/fix-pm-g14-g15-missing-blocks.js:9"}, "properties": {"repobilityId": "4056f675005c1b57", "scanner": "scanner-primary", "fingerprint": "6e1a149cfc176253", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c1a7812c04316756", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/check-fk-ambiguity.js:16"}, "properties": {"repobilityId": "7ec6cf02385875ff", "scanner": "scanner-primary", "fingerprint": "c1a7812c04316756", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7539102967defc34", "level": "none", "message": {"text": "Commented-code block (8 lines) in scripts/seed-pm-smc.js:92"}, "properties": {"repobilityId": "8f84ba2626b33ef5", "scanner": "scanner-primary", "fingerprint": "7539102967defc34", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-54db07642f7a15ab", "level": "none", "message": {"text": "Commented-code block (5 lines) in scripts/lvfr-rebuild/parse-sources.mjs:52"}, "properties": {"repobilityId": "09078907e09be2ae", "scanner": "scanner-primary", "fingerprint": "54db07642f7a15ab", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dabf8ba5559d93db", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useCurrentUser.ts:5"}, "properties": {"repobilityId": "31f0ed15c4d54e91", "scanner": "scanner-primary", "fingerprint": "dabf8ba5559d93db", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-81f779bc44875892", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useStudents.ts:32"}, "properties": {"repobilityId": "7875c08de062be2e", "scanner": "scanner-primary", "fingerprint": "81f779bc44875892", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2857fa3af64756ca", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useSkillSheets.ts:52"}, "properties": {"repobilityId": "24fae10abd933b11", "scanner": "scanner-primary", "fingerprint": "2857fa3af64756ca", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d1fb2b570954fb14", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useLabDays.ts:75"}, "properties": {"repobilityId": "06fb8615de5af16c", "scanner": "scanner-primary", "fingerprint": "d1fb2b570954fb14", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-96631333a54407c2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useCohorts.ts:29"}, "properties": {"repobilityId": "704d5c0cf5ce1415", "scanner": "scanner-primary", "fingerprint": "96631333a54407c2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d698906702448b33", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 hooks/useScenarios.ts:29"}, "properties": {"repobilityId": "64533fb28f0dbd10", "scanner": "scanner-primary", "fingerprint": "d698906702448b33", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6a21d3e3f101e5b8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/StudentCommunications.tsx:146"}, "properties": {"repobilityId": "af35433ab6f8eeed", "scanner": "scanner-primary", "fingerprint": "6a21d3e3f101e5b8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-df5aef38c05a49cd", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/TimerBanner.tsx:184"}, "properties": {"repobilityId": "7c964ebfad0c94fc", "scanner": "scanner-primary", "fingerprint": "df5aef38c05a49cd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3d68771abd3a352d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/TimerBanner.tsx:95"}, "properties": {"repobilityId": "43f176c2720a36ef", "scanner": "scanner-primary", "fingerprint": "3d68771abd3a352d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8ebd960a124d9a93", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/NotificationBell.tsx:204"}, "properties": {"repobilityId": "68c68375b871f2d0", "scanner": "scanner-primary", "fingerprint": "8ebd960a124d9a93", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f262b811644a1e2d", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/LabTimer.tsx:97"}, "properties": {"repobilityId": "18cb2b05df9dbed9", "scanner": "scanner-primary", "fingerprint": "f262b811644a1e2d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d7ff69da59517ec7", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/BulkPhotoUpload.tsx:42"}, "properties": {"repobilityId": "891722c255c5cd47", "scanner": "scanner-primary", "fingerprint": "d7ff69da59517ec7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d61f5c936a4ea997", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/AttendanceSection.tsx:132"}, "properties": {"repobilityId": "36c9dd5e0048bfc1", "scanner": "scanner-primary", "fingerprint": "d61f5c936a4ea997", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-90d4a49a059d68bf", "level": "none", "message": {"text": "Commented-code block (7 lines) in components/UserMenu.tsx:129"}, "properties": {"repobilityId": "dfbc26deabc85d16", "scanner": "scanner-primary", "fingerprint": "90d4a49a059d68bf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d782c488655f4dce", "level": "none", "message": {"text": "Commented-code block (7 lines) in components/GlobalTimerBanner.tsx:108"}, "properties": {"repobilityId": "94af415f9f6190b2", "scanner": "scanner-primary", "fingerprint": "d782c488655f4dce", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a942d63ac7075455", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/InlineTimerWidget.tsx:41"}, "properties": {"repobilityId": "1a65f3f888da4dd9", "scanner": "scanner-primary", "fingerprint": "a942d63ac7075455", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7372c3abf37e2c06", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/OnboardingTourWrapper.tsx:35"}, "properties": {"repobilityId": "2659a6f66a48eb47", "scanner": "scanner-primary", "fingerprint": "7372c3abf37e2c06", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1bb3679635b9a956", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/SkillSheetPanel.tsx:410"}, "properties": {"repobilityId": "140e97413c22aec6", "scanner": "scanner-primary", "fingerprint": "1bb3679635b9a956", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46c5be51faf1eb02", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/SkillSheetPanel.tsx:769"}, "properties": {"repobilityId": "2eb6fd7316c8fcd0", "scanner": "scanner-primary", "fingerprint": "46c5be51faf1eb02", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-500355800cdca872", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/FeedbackButton.tsx:122"}, "properties": {"repobilityId": "d5444064f39fdcf6", "scanner": "scanner-primary", "fingerprint": "500355800cdca872", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c9daccf85c5f09f4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/BLSPlatinumChecklist.tsx:71"}, "properties": {"repobilityId": "f5add5afb08c4a30", "scanner": "scanner-primary", "fingerprint": "c9daccf85c5f09f4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-39466edefcdafdbb", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/dashboard/CalendarConnectBanner.tsx:51"}, "properties": {"repobilityId": "d933b1f00d54c1d0", "scanner": "scanner-primary", "fingerprint": "39466edefcdafdbb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc51a6179ec1040d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/dashboard/CalendarConnectBanner.tsx:57"}, "properties": {"repobilityId": "ea2c52bc9a74f3e4", "scanner": "scanner-primary", "fingerprint": "bc51a6179ec1040d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-af9f230732488fe6", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/dashboard/widgets/index.ts:122"}, "properties": {"repobilityId": "99015d597263ed47", "scanner": "scanner-primary", "fingerprint": "af9f230732488fe6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-76c238276fba787a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/dashboard/widgets/NotificationsWidget.tsx:50"}, "properties": {"repobilityId": "fd0955dfd77ddb98", "scanner": "scanner-primary", "fingerprint": "76c238276fba787a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-05aa6edfe9b7f64d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/dashboard/widgets/NeedsAttentionWidget.tsx:44"}, "properties": {"repobilityId": "ca3918c076c8dec1", "scanner": "scanner-primary", "fingerprint": "05aa6edfe9b7f64d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e5e3cc93a000db17", "level": "none", "message": {"text": "Commented-code block (7 lines) in components/dashboard/widgets/QuickLinksWidget.tsx:92"}, "properties": {"repobilityId": "21b15da359df9cca", "scanner": "scanner-primary", "fingerprint": "e5e3cc93a000db17", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c46139fc2698fe54", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/dashboard/widgets/OverviewStatsWidget.tsx:102"}, "properties": {"repobilityId": "27396ad1144b8ce5", "scanner": "scanner-primary", "fingerprint": "c46139fc2698fe54", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-14b34c5275961687", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/dashboard/widgets/QuickStatsWidget.tsx:80"}, "properties": {"repobilityId": "4e0a7d69d5502463", "scanner": "scanner-primary", "fingerprint": "14b34c5275961687", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8929451ca9c93de9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/dashboard/widgets/RecentActivityWidget.tsx:242"}, "properties": {"repobilityId": "bffd90ddf5194f81", "scanner": "scanner-primary", "fingerprint": "8929451ca9c93de9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-55087bf54ec541b1", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/students/TransferCohortModal.tsx:181"}, "properties": {"repobilityId": "60567fe9b66a82d8", "scanner": "scanner-primary", "fingerprint": "55087bf54ec541b1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-04a6422cc74999c7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/students/TransferCohortModal.tsx:190"}, "properties": {"repobilityId": "5bb7080cea9e55b8", "scanner": "scanner-primary", "fingerprint": "04a6422cc74999c7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-91bd1bd2ba25f6cc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/calendar/EventDetailPanel.tsx:185"}, "properties": {"repobilityId": "1b94abb768a898a5", "scanner": "scanner-primary", "fingerprint": "91bd1bd2ba25f6cc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d676a0557520a002", "level": "none", "message": {"text": "Commented-code block (7 lines) in components/lab-day/EditStationModal.tsx:69"}, "properties": {"repobilityId": "f43f25f75fd093c7", "scanner": "scanner-primary", "fingerprint": "d676a0557520a002", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d59483809b1f6892", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/lab-day/EditStationModal.tsx:151"}, "properties": {"repobilityId": "79dd287e030cf147", "scanner": "scanner-primary", "fingerprint": "d59483809b1f6892", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a8c330e56dbfd536", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/lab-day/LabDayCoverageSection.tsx:51"}, "properties": {"repobilityId": "8997d5fd24a1128b", "scanner": "scanner-primary", "fingerprint": "a8c330e56dbfd536", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-870e35952a67e0a1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/lab-day/DebriefSection.tsx:52"}, "properties": {"repobilityId": "f2c329f3278f930b", "scanner": "scanner-primary", "fingerprint": "870e35952a67e0a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fba8c919d9b970e9", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/lab-day/SkillCoveragePanel.tsx:155"}, "properties": {"repobilityId": "101fbf8063fee4a0", "scanner": "scanner-primary", "fingerprint": "fba8c919d9b970e9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3bbda682dcf0f788", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/lab-day/LabDayPrintView.tsx:62"}, "properties": {"repobilityId": "23e21da944157e4f", "scanner": "scanner-primary", "fingerprint": "3bbda682dcf0f788", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-83979ca87af19dca", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/lab-day/types.ts:217"}, "properties": {"repobilityId": "7db2ada511abd3b4", "scanner": "scanner-primary", "fingerprint": "83979ca87af19dca", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a56decb7f4a17dbf", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/lab-day/LabDayChatInner.tsx:94"}, "properties": {"repobilityId": "4e4e27cf69d4f1bb", "scanner": "scanner-primary", "fingerprint": "a56decb7f4a17dbf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5dbd63c35fe6f5b1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/lab-day/IndividualTestingGrid.tsx:236"}, "properties": {"repobilityId": "16e2253f7238ca85", "scanner": "scanner-primary", "fingerprint": "5dbd63c35fe6f5b1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-68a1439b594aefd0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduling/LogMyShiftModal.tsx:87"}, "properties": {"repobilityId": "8969c3130b692b15", "scanner": "scanner-primary", "fingerprint": "68a1439b594aefd0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-893b606f5586f9b7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduling/RequestCoverageModal.tsx:92"}, "properties": {"repobilityId": "7d4cba9c1fc058d7", "scanner": "scanner-primary", "fingerprint": "893b606f5586f9b7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1511d04772752471", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/scheduling/CoordinatorCalendarView.tsx:167"}, "properties": {"repobilityId": "4c41b511c64ff472", "scanner": "scanner-primary", "fingerprint": "1511d04772752471", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-33991c34691db1fa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduling/CoordinatorCalendarView.tsx:235"}, "properties": {"repobilityId": "e4e9c92c913b6a46", "scanner": "scanner-primary", "fingerprint": "33991c34691db1fa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a88ff3279e12e1e1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduling/RecurringAvailabilityModal.tsx:94"}, "properties": {"repobilityId": "e3488fdeec3e9ada", "scanner": "scanner-primary", "fingerprint": "a88ff3279e12e1e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f7648611366b335f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduling/LogHoursModal.tsx:150"}, "properties": {"repobilityId": "6410a6ac28b4ce0e", "scanner": "scanner-primary", "fingerprint": "f7648611366b335f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-49de5c114f5e1a92", "level": "none", "message": {"text": "Commented-code block (5 lines) in components/seating/Suite1Layout.tsx:34"}, "properties": {"repobilityId": "ee88bbf5667ad953", "scanner": "scanner-primary", "fingerprint": "49de5c114f5e1a92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-27b4d845588450b4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/cases/CaseEditor.tsx:381"}, "properties": {"repobilityId": "fdda67f933c6e1d0", "scanner": "scanner-primary", "fingerprint": "27b4d845588450b4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-52b2ba445c76d251", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/clinical/SummativeEvaluationsSection.tsx:113"}, "properties": {"repobilityId": "ba51122a5e02a46e", "scanner": "scanner-primary", "fingerprint": "52b2ba445c76d251", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ec032b4ff7f691dd", "level": "none", "message": {"text": "Commented-code block (6 lines) in components/clinical/PreceptorsSection.tsx:133"}, "properties": {"repobilityId": "ea96426492c64618", "scanner": "scanner-primary", "fingerprint": "ec032b4ff7f691dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c4d7477842f88c63", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/clinical/EmploymentVerificationModal.tsx:178"}, "properties": {"repobilityId": "12c6ac0cb1219102", "scanner": "scanner-primary", "fingerprint": "c4d7477842f88c63", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7fcd006c2fe4bd42", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/clinical/CloseoutSurveyModal.tsx:208"}, "properties": {"repobilityId": "866fda31509da6e1", "scanner": "scanner-primary", "fingerprint": "7fcd006c2fe4bd42", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0fadad7d13ff9aeb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduler/SchedulerAdmin.tsx:84"}, "properties": {"repobilityId": "7ea6f55de88b8061", "scanner": "scanner-primary", "fingerprint": "0fadad7d13ff9aeb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-93edbfb3a6be091c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 components/scheduler/SchedulerParticipant.tsx:111"}, "properties": {"repobilityId": "1764c8f595b305af", "scanner": "scanner-primary", "fingerprint": "93edbfb3a6be091c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4398685c63faaa83", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/calendar-auto-sync.ts:84"}, "properties": {"repobilityId": "517a360747da37ea", "scanner": "scanner-primary", "fingerprint": "4398685c63faaa83", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9bef5ab5427c8891", "level": "none", "message": {"text": "Commented-code block (10 lines) in lib/calendar-availability.ts:194"}, "properties": {"repobilityId": "6536c9f2ea61c9de", "scanner": "scanner-primary", "fingerprint": "9bef5ab5427c8891", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8555c29e6d699d5f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/calendar-availability.ts:65"}, "properties": {"repobilityId": "d33c1272c2381391", "scanner": "scanner-primary", "fingerprint": "8555c29e6d699d5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f62a6c1257448462", "level": "none", "message": {"text": "Commented-code block (13 lines) in lib/email.ts:466"}, "properties": {"repobilityId": "e769a8ebfe60d1a2", "scanner": "scanner-primary", "fingerprint": "f62a6c1257448462", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bdac9ab330c4b0ed", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/fetch-utils.ts:4"}, "properties": {"repobilityId": "cf0987ff5d3a8e39", "scanner": "scanner-primary", "fingerprint": "bdac9ab330c4b0ed", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4703891eb09b9f36", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/auth.ts:228"}, "properties": {"repobilityId": "4d1a2fd2a2706247", "scanner": "scanner-primary", "fingerprint": "4703891eb09b9f36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80bc484fac309ecc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/google-shared-calendar.ts:123"}, "properties": {"repobilityId": "2b7bcb65e613ebcb", "scanner": "scanner-primary", "fingerprint": "80bc484fac309ecc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2419f921a95bb4bb", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/scenario-export.ts:4"}, "properties": {"repobilityId": "58a68eabbe99f203", "scanner": "scanner-primary", "fingerprint": "2419f921a95bb4bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-78160a1d63eafe73", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/question-types.ts:4"}, "properties": {"repobilityId": "e813590e645e42c5", "scanner": "scanner-primary", "fingerprint": "78160a1d63eafe73", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-743a7463b5324e6d", "level": "none", "message": {"text": "Commented-code block (5 lines) in lib/nremt-instructions.ts:249"}, "properties": {"repobilityId": "c69ae206e61a73a7", "scanner": "scanner-primary", "fingerprint": "743a7463b5324e6d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3ba1e19d807f42e4", "level": "none", "message": {"text": "Commented-code block (6 lines) in lib/instructor-blocks.ts:66"}, "properties": {"repobilityId": "a52d51f4239ec5f4", "scanner": "scanner-primary", "fingerprint": "3ba1e19d807f42e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-13bbefb253626a92", "level": "none", "message": {"text": "Commented-code block (10 lines) in lib/google-calendar.ts:330"}, "properties": {"repobilityId": "e29e8747ad3a0ede", "scanner": "scanner-primary", "fingerprint": "13bbefb253626a92", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05ff827193b1f2da", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 lib/google-calendar.ts:161"}, "properties": {"repobilityId": "57992d9c72471f7f", "scanner": "scanner-primary", "fingerprint": "05ff827193b1f2da", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-d136ec743adb046d", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (scripts/verify-calendar-scope.mjs:58)"}, "properties": {"repobilityId": "5976d770de593f14", "scanner": "scanner-primary", "fingerprint": "d136ec743adb046d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-458e92c9c6ba6831", "level": "error", "message": {"text": "Dangling fetch: POST https://www.googleapis.com/calendar/v3/freeBusy (scripts/verify-calendar-scope.mjs:75)"}, "properties": {"repobilityId": "98c824e072961b60", "scanner": "scanner-primary", "fingerprint": "458e92c9c6ba6831", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-35affc322416691f", "level": "error", "message": {"text": "Dangling fetch: POST https://www.googleapis.com/calendar/v3/calendars/primary/events?sendUpdates=none (scripts/verify-calendar-scope.mjs:89)"}, "properties": {"repobilityId": "72b93350d03d773e", "scanner": "scanner-primary", "fingerprint": "35affc322416691f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bac1b4f06a988c32", "level": "error", "message": {"text": "Dangling fetch: DELETE https://www.googleapis.com/calendar/v3/calendars/primary/events/${encodeURIComponent(ev.id)}?sendUpdates=none (scripts/verify-calendar-scope.mjs:101)"}, "properties": {"repobilityId": "dca56fd095492b9c", "scanner": "scanner-primary", "fingerprint": "bac1b4f06a988c32", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-10e20885604aef95", "level": "error", "message": {"text": "Dangling fetch: POST /api/errors/log (app/error.tsx:27)"}, "properties": {"repobilityId": "a8a6ca9c80bc0355", "scanner": "scanner-primary", "fingerprint": "10e20885604aef95", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-57307801355e8285", "level": "error", "message": {"text": "Dangling fetch: PUT /api/dashboard/layout (app/page.tsx:104)"}, "properties": {"repobilityId": "aee7684cf8774b6b", "scanner": "scanner-primary", "fingerprint": "57307801355e8285", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5bb263ead9eb5faf", "level": "error", "message": {"text": "Dangling fetch: GET /api/user/preferences (app/page.tsx:147)"}, "properties": {"repobilityId": "fe41b6a928667ea9", "scanner": "scanner-primary", "fingerprint": "5bb263ead9eb5faf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-35ac1f11d2a7427f", "level": "error", "message": {"text": "Dangling fetch: GET /api/onboarding/dashboard (app/page.tsx:148)"}, "properties": {"repobilityId": "14cbd0c6edc4fd7f", "scanner": "scanner-primary", "fingerprint": "35ac1f11d2a7427f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-53e5a73f475019e0", "level": "error", "message": {"text": "Dangling fetch: PUT /api/user/preferences (app/page.tsx:185)"}, "properties": {"repobilityId": "fe2b1fa79bf26fad", "scanner": "scanner-primary", "fingerprint": "53e5a73f475019e0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d35926b52d986960", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/user/preferences (app/page.tsx:205)"}, "properties": {"repobilityId": "3cf1fc0d69236064", "scanner": "scanner-primary", "fingerprint": "d35926b52d986960", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a48221893e5c9bd0", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/dashboard/layout (app/page.tsx:207)"}, "properties": {"repobilityId": "9418ad03febf9231", "scanner": "scanner-primary", "fingerprint": "a48221893e5c9bd0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b22ec992b59bf18", "level": "error", "message": {"text": "Dangling fetch: GET /api/user/preferences (app/page.tsx:208)"}, "properties": {"repobilityId": "1d52cd3031d4e2cc", "scanner": "scanner-primary", "fingerprint": "0b22ec992b59bf18", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b165478cf2999cdc", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/user/preferences (app/page.tsx:223)"}, "properties": {"repobilityId": "8de34ae87c7f4247", "scanner": "scanner-primary", "fingerprint": "b165478cf2999cdc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-75c99bf797c900b3", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/dashboard/layout (app/page.tsx:224)"}, "properties": {"repobilityId": "d445dc8a4d746936", "scanner": "scanner-primary", "fingerprint": "75c99bf797c900b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0696cbb6ee1f2330", "level": "error", "message": {"text": "Dangling fetch: GET /api/user/preferences (app/page.tsx:229)"}, "properties": {"repobilityId": "958f12328c9badd3", "scanner": "scanner-primary", "fingerprint": "0696cbb6ee1f2330", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-75d9717cdd36fcc2", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (app/api/calendar/callback/route.ts:38)"}, "properties": {"repobilityId": "a3c9552a525f1177", "scanner": "scanner-primary", "fingerprint": "75d9717cdd36fcc2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2d3079bb789eb23f", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/page.tsx:50)"}, "properties": {"repobilityId": "b1671ad5f7c5cfe4", "scanner": "scanner-primary", "fingerprint": "2d3079bb789eb23f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a01703f91e31f3d3", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/protocol-tracking/page.tsx:128)"}, "properties": {"repobilityId": "c9caf83220d9301f", "scanner": "scanner-primary", "fingerprint": "a01703f91e31f3d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2bd61f99853f255b", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${selectedCohort}&status=active (app/labs/protocol-tracking/page.tsx:143)"}, "properties": {"repobilityId": "839f50ef258a00cc", "scanner": "scanner-primary", "fingerprint": "2bd61f99853f255b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6bd05be1ed90e33b", "level": "error", "message": {"text": "Dangling fetch: GET /api/tracking/protocol-completions?cohortId=${selectedCohort}&limit=20 (app/labs/protocol-tracking/page.tsx:157)"}, "properties": {"repobilityId": "a70f644080673aaa", "scanner": "scanner-primary", "fingerprint": "6bd05be1ed90e33b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e15cc79d72bf3804", "level": "error", "message": {"text": "Dangling fetch: GET /api/tracking/protocol-completions?cohortId=${selectedCohort} (app/labs/protocol-tracking/page.tsx:171)"}, "properties": {"repobilityId": "c6aae8d0ac84085c", "scanner": "scanner-primary", "fingerprint": "e15cc79d72bf3804", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-94ee161745c961e5", "level": "error", "message": {"text": "Dangling fetch: POST /api/tracking/protocol-completions (app/labs/protocol-tracking/page.tsx:208)"}, "properties": {"repobilityId": "d805ed41c65dc537", "scanner": "scanner-primary", "fingerprint": "94ee161745c961e5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-43cbb2dcfcd9e056", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/flagged-items?${params} (app/labs/flags/page.tsx:83)"}, "properties": {"repobilityId": "71266c70f5669f80", "scanner": "scanner-primary", "fingerprint": "43cbb2dcfcd9e056", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2cf134844ab9e806", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/flagged-items (app/labs/flags/page.tsx:99)"}, "properties": {"repobilityId": "b8b1d9a9b07f5166", "scanner": "scanner-primary", "fingerprint": "2cf134844ab9e806", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1bce1cc43b5ac024", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/scenario-library/clone (app/labs/scenario-library/page.tsx:241)"}, "properties": {"repobilityId": "779f649f6cec59db", "scanner": "scanner-primary", "fingerprint": "1bce1cc43b5ac024", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4153ec002f339906", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/scenario-library/ratings (app/labs/scenario-library/page.tsx:330)"}, "properties": {"repobilityId": "a400f8c39e392b1c", "scanner": "scanner-primary", "fingerprint": "4153ec002f339906", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b6bcb257b1946309", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/scenario-library/tags (app/labs/scenario-library/page.tsx:433)"}, "properties": {"repobilityId": "7d83d30118fb0d3a", "scanner": "scanner-primary", "fingerprint": "b6bcb257b1946309", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cb5545268696e006", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/scenario-library/tags (app/labs/scenario-library/page.tsx:451)"}, "properties": {"repobilityId": "d4ce4daa86fe38f1", "scanner": "scanner-primary", "fingerprint": "cb5545268696e006", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-693e4a09f96cf9e9", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/scenario-library?${params} (app/labs/scenario-library/page.tsx:773)"}, "properties": {"repobilityId": "92d8f84b8d8428de", "scanner": "scanner-primary", "fingerprint": "693e4a09f96cf9e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-324ccdeac290bae5", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/scenario-library/tags (app/labs/scenario-library/page.tsx:789)"}, "properties": {"repobilityId": "38936d9c40a70671", "scanner": "scanner-primary", "fingerprint": "324ccdeac290bae5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-89b2afc25a3fe16d", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/scenarios/${scenario.id} (app/labs/scenario-library/page.tsx:865)"}, "properties": {"repobilityId": "9f22c4c06eab5e81", "scanner": "scanner-primary", "fingerprint": "89b2afc25a3fe16d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-caf1fce6c352b687", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${station.lab_day.id}/assistance-alerts (app/labs/grade/station/[id]/page.tsx:146)"}, "properties": {"repobilityId": "3e1060243b9e1a82", "scanner": "scanner-primary", "fingerprint": "caf1fce6c352b687", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3af9b61747e5a0b6", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/lab-days/${station.lab_day.id}/assistance-alerts (app/labs/grade/station/[id]/page.tsx:172)"}, "properties": {"repobilityId": "d363fa7d255134e3", "scanner": "scanner-primary", "fingerprint": "3af9b61747e5a0b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f04e60a89e9e6b1c", "level": "error", "message": {"text": "Dangling fetch: GET /api/skill-sheets/${panelSheetId} (app/labs/grade/station/[id]/page.tsx:388)"}, "properties": {"repobilityId": "d6751500291802fa", "scanner": "scanner-primary", "fingerprint": "f04e60a89e9e6b1c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7a6591b89a0c1898", "level": "error", "message": {"text": "Dangling fetch: GET /api/nremt-scenarios/${selectedId} (app/labs/grade/station/[id]/page.tsx:429)"}, "properties": {"repobilityId": "8f2ecec2a0549278", "scanner": "scanner-primary", "fingerprint": "7a6591b89a0c1898", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-320bf1dd683fdcd5", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/stations/${station.id}/scenario/rotate (app/labs/grade/station/[id]/page.tsx:482)"}, "properties": {"repobilityId": "f8e7dfd7a3d84014", "scanner": "scanner-primary", "fingerprint": "320bf1dd683fdcd5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-49a87ef02acf5d8a", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/stations/${stationId} (app/labs/grade/station/[id]/page.tsx:527)"}, "properties": {"repobilityId": "50f901643bbc5388", "scanner": "scanner-primary", "fingerprint": "49a87ef02acf5d8a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-261dffd556b4e655", "level": "error", "message": {"text": "Dangling fetch: POST /api/skill-sheets/by-skill-name/bulk (app/labs/grade/station/[id]/page.tsx:541)"}, "properties": {"repobilityId": "5128e4cd365f2091", "scanner": "scanner-primary", "fingerprint": "261dffd556b4e655", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-683e1160c9e5ae44", "level": "error", "message": {"text": "Dangling fetch: GET /api/skill-sheets/by-skill-name?name=${encodeURIComponent(skillName)}&program=${encodeURIComponent(program.toLowerCase())} (app/labs/grade/station/[id]/page.tsx:555)"}, "properties": {"repobilityId": "8c9039a92f1f7c82", "scanner": "scanner-primary", "fingerprint": "683e1160c9e5ae44", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f0177ef5b7778eb6", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/groups?cohortId=${cohortId}&include=members (app/labs/grade/station/[id]/page.tsx:569)"}, "properties": {"repobilityId": "ef4685bcfb8f998f", "scanner": "scanner-primary", "fingerprint": "f0177ef5b7778eb6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0c8ba8b6491852e4", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId} (app/labs/grade/station/[id]/page.tsx:594)"}, "properties": {"repobilityId": "9c995ed2169590d1", "scanner": "scanner-primary", "fingerprint": "0c8ba8b6491852e4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-98c348e16289425f", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/assessments/scenario (app/labs/grade/station/[id]/page.tsx:778)"}, "properties": {"repobilityId": "f8843278301841f4", "scanner": "scanner-primary", "fingerprint": "98c348e16289425f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-27062ee2fc06e20d", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/team-leads (app/labs/grade/station/[id]/page.tsx:787)"}, "properties": {"repobilityId": "82727931cae4d49a", "scanner": "scanner-primary", "fingerprint": "27062ee2fc06e20d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76ecd4a59ec56fe8", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/assessments/scenario/send-email (app/labs/grade/station/[id]/page.tsx:814)"}, "properties": {"repobilityId": "e700640b55fedf9c", "scanner": "scanner-primary", "fingerprint": "76ecd4a59ec56fe8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-63a1af16cba6845a", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/assessments/scenario (app/labs/grade/station/[id]/page.tsx:951)"}, "properties": {"repobilityId": "32174a300ac19dbc", "scanner": "scanner-primary", "fingerprint": "63a1af16cba6845a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b476b1c163a74536", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/groups/page.tsx:340)"}, "properties": {"repobilityId": "bf9e63c9daa4451e", "scanner": "scanner-primary", "fingerprint": "b476b1c163a74536", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0023c551d4a9039b", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?status=active (app/labs/groups/page.tsx:356)"}, "properties": {"repobilityId": "32c4c6af6a72b99c", "scanner": "scanner-primary", "fingerprint": "0023c551d4a9039b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e2d683d53acfdeea", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/labs/groups/page.tsx:376)"}, "properties": {"repobilityId": "8de41b5df7d211e4", "scanner": "scanner-primary", "fingerprint": "e2d683d53acfdeea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7d84f65b12b9fd6d", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/groups?cohortId=${cohortId}&includeHistory=true (app/labs/groups/page.tsx:382)"}, "properties": {"repobilityId": "882f1ca1497702ae", "scanner": "scanner-primary", "fingerprint": "7d84f65b12b9fd6d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-26b43741c123ded4", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/groups/${group.id}/members (app/labs/groups/page.tsx:390)"}, "properties": {"repobilityId": "f122326a2a11ac24", "scanner": "scanner-primary", "fingerprint": "26b43741c123ded4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7ba243ee92e25f7d", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/groups (app/labs/groups/page.tsx:484)"}, "properties": {"repobilityId": "0a962333899bc846", "scanner": "scanner-primary", "fingerprint": "7ba243ee92e25f7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-920ead0012e84c3d", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/groups/${fromId}/members?studentId=${studentToMove.id} (app/labs/groups/page.tsx:537)"}, "properties": {"repobilityId": "60b7800179f92d98", "scanner": "scanner-primary", "fingerprint": "920ead0012e84c3d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3035f2f4aa727cd8", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/groups (app/labs/groups/page.tsx:542)"}, "properties": {"repobilityId": "de7f553c0bef1c30", "scanner": "scanner-primary", "fingerprint": "3035f2f4aa727cd8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8ad4ee0609b04fb5", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/groups?cohortId=${selectedCohortId}&includeHistory=true (app/labs/groups/page.tsx:564)"}, "properties": {"repobilityId": "abdb216640fc5d14", "scanner": "scanner-primary", "fingerprint": "8ad4ee0609b04fb5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5f820ca7b391fe64", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/groups (app/labs/groups/page.tsx:577)"}, "properties": {"repobilityId": "2a838ab6dbf63ef6", "scanner": "scanner-primary", "fingerprint": "5f820ca7b391fe64", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bd9d549312dbcd4a", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/groups/${groupId} (app/labs/groups/page.tsx:609)"}, "properties": {"repobilityId": "879708831965d271", "scanner": "scanner-primary", "fingerprint": "bd9d549312dbcd4a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c2139542b9b4cd6d", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/groups/${groupId} (app/labs/groups/page.tsx:627)"}, "properties": {"repobilityId": "f1c644a69a63bf6e", "scanner": "scanner-primary", "fingerprint": "c2139542b9b4cd6d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4bb03f305cfb25f6", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/groups (app/labs/groups/page.tsx:656)"}, "properties": {"repobilityId": "70cb1b43c1a63117", "scanner": "scanner-primary", "fingerprint": "4bb03f305cfb25f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bbf562e9f66e0300", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/groups (app/labs/groups/page.tsx:699)"}, "properties": {"repobilityId": "3c5aac1526b122cb", "scanner": "scanner-primary", "fingerprint": "bbf562e9f66e0300", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7ae84233e9fc313e", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/groups/${group.id}/members (app/labs/groups/page.tsx:733)"}, "properties": {"repobilityId": "8b65baca5fc65f77", "scanner": "scanner-primary", "fingerprint": "7ae84233e9fc313e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7a2783a706063b02", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/ce-requirements (app/labs/my-certifications/CETracker.tsx:79)"}, "properties": {"repobilityId": "833deb916edfa97a", "scanner": "scanner-primary", "fingerprint": "7a2783a706063b02", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5322d190bc1c7065", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/ce-records?certificationId=${certificationId} (app/labs/my-certifications/CETracker.tsx:93)"}, "properties": {"repobilityId": "4b6d47681fbb0405", "scanner": "scanner-primary", "fingerprint": "5322d190bc1c7065", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b0cfcde2ea6fc2c5", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/certifications/${certificationId} (app/labs/my-certifications/CETracker.tsx:108)"}, "properties": {"repobilityId": "914c17fbb099248d", "scanner": "scanner-primary", "fingerprint": "b0cfcde2ea6fc2c5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ef1d1d9e2023c2cc", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/ce-records (app/labs/my-certifications/CETracker.tsx:146)"}, "properties": {"repobilityId": "1da5fcff670a84a2", "scanner": "scanner-primary", "fingerprint": "ef1d1d9e2023c2cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a783ed53f55d3520", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/ce-records/${id} (app/labs/my-certifications/CETracker.tsx:173)"}, "properties": {"repobilityId": "1b94d9c9a8ba7a40", "scanner": "scanner-primary", "fingerprint": "a783ed53f55d3520", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e981120b449cb32f", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/certifications/${editingCert.id} (app/labs/my-certifications/CertList.tsx:186)"}, "properties": {"repobilityId": "b7ce3da0659fc28f", "scanner": "scanner-primary", "fingerprint": "e981120b449cb32f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0524eb636ec61ac5", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/certifications (app/labs/my-certifications/CertList.tsx:206)"}, "properties": {"repobilityId": "294754bf2e70de0f", "scanner": "scanner-primary", "fingerprint": "0524eb636ec61ac5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b3660a5489c3ea8e", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/certifications/${data.certification.id} (app/labs/my-certifications/CertList.tsx:224)"}, "properties": {"repobilityId": "e797477f6388046a", "scanner": "scanner-primary", "fingerprint": "b3660a5489c3ea8e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-47fe52c69c512b20", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/certifications/${id} (app/labs/my-certifications/CertList.tsx:262)"}, "properties": {"repobilityId": "d044bdf7b10b3fa2", "scanner": "scanner-primary", "fingerprint": "47fe52c69c512b20", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-70a75eff106f5015", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/certifications/${editingCert.id} (app/labs/my-certifications/CertList.tsx:281)"}, "properties": {"repobilityId": "1f44203dea5bb5bf", "scanner": "scanner-primary", "fingerprint": "70a75eff106f5015", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b5002a259884eda8", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/users (app/labs/my-certifications/page.tsx:52)"}, "properties": {"repobilityId": "b420a021e002d0a7", "scanner": "scanner-primary", "fingerprint": "b5002a259884eda8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e7132aa3c4a27a3b", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/certifications?instructorId=${currentUser.id} (app/labs/my-certifications/page.tsx:64)"}, "properties": {"repobilityId": "eb109bf0ab8d6a5e", "scanner": "scanner-primary", "fingerprint": "e7132aa3c4a27a3b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-13c3b2e835ced8e2", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/templates (app/labs/templates/page.tsx:116)"}, "properties": {"repobilityId": "04ca0b28bc2651b4", "scanner": "scanner-primary", "fingerprint": "13c3b2e835ced8e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-97480833d158bcab", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/templates/${deleteId} (app/labs/templates/page.tsx:138)"}, "properties": {"repobilityId": "3a84e4245aa0f637", "scanner": "scanner-primary", "fingerprint": "97480833d158bcab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5372d323539f9cf1", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/templates/${editTemplate.id} (app/labs/templates/page.tsx:166)"}, "properties": {"repobilityId": "bdf2aa79c2350dc4", "scanner": "scanner-primary", "fingerprint": "5372d323539f9cf1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-66b8c7cb19262d50", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/weekly-templates (app/labs/templates/weekly/page.tsx:180)"}, "properties": {"repobilityId": "7c09105bafe710e3", "scanner": "scanner-primary", "fingerprint": "66b8c7cb19262d50", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b440e591dae712ac", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/programs (app/labs/templates/weekly/page.tsx:181)"}, "properties": {"repobilityId": "1daafc5beb06622c", "scanner": "scanner-primary", "fingerprint": "b440e591dae712ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8a6b6cd399150e37", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/templates/weekly/page.tsx:182)"}, "properties": {"repobilityId": "d43125d887a9bd4f", "scanner": "scanner-primary", "fingerprint": "8a6b6cd399150e37", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83bb237bd5638f86", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/scenarios?limit=100 (app/labs/templates/weekly/page.tsx:183)"}, "properties": {"repobilityId": "5e053f05e3d35b76", "scanner": "scanner-primary", "fingerprint": "83bb237bd5638f86", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-07064d72ab5824e2", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/weekly-templates (app/labs/templates/weekly/page.tsx:315)"}, "properties": {"repobilityId": "c4f7199c49920659", "scanner": "scanner-primary", "fingerprint": "07064d72ab5824e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c3113fc40b192017", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/weekly-templates?id=${deleteId} (app/labs/templates/weekly/page.tsx:345)"}, "properties": {"repobilityId": "2cb3bdb27fd9fbe3", "scanner": "scanner-primary", "fingerprint": "c3113fc40b192017", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b53e713db938ecb", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/weekly-templates/generate (app/labs/templates/weekly/page.tsx:374)"}, "properties": {"repobilityId": "7953a60f99acb00d", "scanner": "scanner-primary", "fingerprint": "9b53e713db938ecb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-afbe684bd1bd9ead", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/template-reviews (app/labs/templates/review/page.tsx:137)"}, "properties": {"repobilityId": "32f2bdc8f1581f7f", "scanner": "scanner-primary", "fingerprint": "afbe684bd1bd9ead", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7546a3d6ab0e41f7", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/templates/review/page.tsx:138)"}, "properties": {"repobilityId": "18c6b18cdcb56808", "scanner": "scanner-primary", "fingerprint": "7546a3d6ab0e41f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f1337b400f27c590", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/instructors (app/labs/templates/review/page.tsx:139)"}, "properties": {"repobilityId": "a5032a7fee47133b", "scanner": "scanner-primary", "fingerprint": "f1337b400f27c590", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-acb269b9a37fb2bb", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days?cohortId=${formCohortId}&limit=100 (app/labs/templates/review/page.tsx:173)"}, "properties": {"repobilityId": "72a4854cc30903aa", "scanner": "scanner-primary", "fingerprint": "acb269b9a37fb2bb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a604ec9424c26f4f", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/template-reviews (app/labs/templates/review/page.tsx:203)"}, "properties": {"repobilityId": "3791805c6fb9f209", "scanner": "scanner-primary", "fingerprint": "a604ec9424c26f4f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e0cf8496577536aa", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/template-reviews/${reviewId} (app/labs/templates/review/[id]/page.tsx:147)"}, "properties": {"repobilityId": "a36ff75340eada4e", "scanner": "scanner-primary", "fingerprint": "e0cf8496577536aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0962a42e037a8375", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/template-reviews/${reviewId}/finalize (app/labs/templates/review/[id]/page.tsx:170)"}, "properties": {"repobilityId": "63dbbfdc731e9d46", "scanner": "scanner-primary", "fingerprint": "0962a42e037a8375", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-11f8b2444948d589", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/template-reviews/${reviewId}/items/${itemId} (app/labs/templates/review/[id]/item/[itemId]/page.tsx:191)"}, "properties": {"repobilityId": "36d0e7c1adb37ed9", "scanner": "scanner-primary", "fingerprint": "11f8b2444948d589", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5c83894de415f72f", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/template-reviews/${reviewId} (app/labs/templates/review/[id]/item/[itemId]/page.tsx:192)"}, "properties": {"repobilityId": "ef971c1769d9c812", "scanner": "scanner-primary", "fingerprint": "5c83894de415f72f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e7fe2b0d40d5c4c3", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/template-reviews/${reviewId}/items/${itemId} (app/labs/templates/review/[id]/item/[itemId]/page.tsx:241)"}, "properties": {"repobilityId": "c295ae31fb22ecd2", "scanner": "scanner-primary", "fingerprint": "e7fe2b0d40d5c4c3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-862b75cc05018886", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/template-reviews/${reviewId}/items/${itemId} (app/labs/templates/review/[id]/item/[itemId]/page.tsx:274)"}, "properties": {"repobilityId": "459f97f81b9ce5a4", "scanner": "scanner-primary", "fingerprint": "862b75cc05018886", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4efa8fbb7596de43", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/template-reviews/${reviewId}/items/${itemId}/comments (app/labs/templates/review/[id]/item/[itemId]/page.tsx:302)"}, "properties": {"repobilityId": "8b68b27ec009bb0d", "scanner": "scanner-primary", "fingerprint": "4efa8fbb7596de43", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1d2262a7b4595819", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/stations/log/page.tsx:155)"}, "properties": {"repobilityId": "c7c3583ef0cbb0a5", "scanner": "scanner-primary", "fingerprint": "1d2262a7b4595819", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7aadabfa51c11e3c", "level": "error", "message": {"text": "Dangling fetch: GET /api/stations/pool?withStats=true&active=true (app/labs/stations/log/page.tsx:168)"}, "properties": {"repobilityId": "e28f636e0eed996a", "scanner": "scanner-primary", "fingerprint": "7aadabfa51c11e3c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5854605c46b3bbc7", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?active=true (app/labs/stations/log/page.tsx:181)"}, "properties": {"repobilityId": "f53adf4888131f50", "scanner": "scanner-primary", "fingerprint": "5854605c46b3bbc7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1d9784b26bda8a16", "level": "error", "message": {"text": "Dangling fetch: GET /api/stations/pool/favorites (app/labs/stations/log/page.tsx:193)"}, "properties": {"repobilityId": "9e4e83cf58429fcb", "scanner": "scanner-primary", "fingerprint": "1d9784b26bda8a16", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6b82e8b1031ce502", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?${studentParams} (app/labs/stations/log/page.tsx:215)"}, "properties": {"repobilityId": "b0291923b45529ca", "scanner": "scanner-primary", "fingerprint": "6b82e8b1031ce502", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4476e58c52f46977", "level": "error", "message": {"text": "Dangling fetch: GET /api/stations/completions?stationId=${selectedStation.id} (app/labs/stations/log/page.tsx:225)"}, "properties": {"repobilityId": "cbbfeeaa4dc51fe3", "scanner": "scanner-primary", "fingerprint": "4476e58c52f46977", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2593bfebf058e365", "level": "error", "message": {"text": "Dangling fetch: POST /api/stations/completions (app/labs/stations/log/page.tsx:259)"}, "properties": {"repobilityId": "392d554b1db522b3", "scanner": "scanner-primary", "fingerprint": "2593bfebf058e365", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-21f8695614f0804b", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/stations/pool/page.tsx:146)"}, "properties": {"repobilityId": "acd2c69f4f16d02c", "scanner": "scanner-primary", "fingerprint": "21f8695614f0804b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3aa222a03918f761", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?active=true (app/labs/stations/pool/page.tsx:158)"}, "properties": {"repobilityId": "205056941ad71ed3", "scanner": "scanner-primary", "fingerprint": "3aa222a03918f761", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-788d77e72ab8b5ae", "level": "error", "message": {"text": "Dangling fetch: GET /api/stations/pool?${params} (app/labs/stations/pool/page.tsx:176)"}, "properties": {"repobilityId": "b534fffc249b1688", "scanner": "scanner-primary", "fingerprint": "788d77e72ab8b5ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1c3e7d9a1dbec172", "level": "error", "message": {"text": "Dangling fetch: GET /api/stations/pool/favorites (app/labs/stations/pool/page.tsx:189)"}, "properties": {"repobilityId": "7d51c227cc8f6799", "scanner": "scanner-primary", "fingerprint": "1c3e7d9a1dbec172", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bf53d57b294f9e07", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/stations/pool/favorites?station_id=${stationId} (app/labs/stations/pool/page.tsx:214)"}, "properties": {"repobilityId": "4d21bf88fea77145", "scanner": "scanner-primary", "fingerprint": "bf53d57b294f9e07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b4ea40fb5bf321b2", "level": "error", "message": {"text": "Dangling fetch: POST /api/stations/pool/favorites (app/labs/stations/pool/page.tsx:218)"}, "properties": {"repobilityId": "c66333d390af6d5c", "scanner": "scanner-primary", "fingerprint": "b4ea40fb5bf321b2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-26af980e35ce4ad4", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/stations/pool/${station.id} (app/labs/stations/pool/page.tsx:300)"}, "properties": {"repobilityId": "d7db68dde8077d2f", "scanner": "scanner-primary", "fingerprint": "26af980e35ce4ad4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-452c9da3c1e482a6", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/scenarios/${id} (app/labs/scenarios/page.tsx:129)"}, "properties": {"repobilityId": "b4eae06fa55db62e", "scanner": "scanner-primary", "fingerprint": "452c9da3c1e482a6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5ebfe8346e18dd9", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/scenarios/page.tsx:174)"}, "properties": {"repobilityId": "e76574796114c1f9", "scanner": "scanner-primary", "fingerprint": "c5ebfe8346e18dd9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3822379da7268d1c", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/scenarios/favorites (app/labs/scenarios/page.tsx:191)"}, "properties": {"repobilityId": "5f25375e54da1212", "scanner": "scanner-primary", "fingerprint": "3822379da7268d1c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b77821e1ae286f38", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/scenarios/favorites (app/labs/scenarios/page.tsx:215)"}, "properties": {"repobilityId": "9e8c8998db9b115f", "scanner": "scanner-primary", "fingerprint": "b77821e1ae286f38", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-953e91698ebd141c", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/scenarios/favorites (app/labs/scenarios/page.tsx:322)"}, "properties": {"repobilityId": "23fcc298e30007cc", "scanner": "scanner-primary", "fingerprint": "953e91698ebd141c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-52638ef058028916", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/scenarios/${scenarioId} (app/labs/scenarios/[id]/page.tsx:846)"}, "properties": {"repobilityId": "9412e33df77b2e87", "scanner": "scanner-primary", "fingerprint": "52638ef058028916", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8ec68816dfa6adf0", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/scenarios/${scenarioId}/duplicate (app/labs/scenarios/[id]/page.tsx:1173)"}, "properties": {"repobilityId": "3f8d6461bbdd8e8d", "scanner": "scanner-primary", "fingerprint": "8ec68816dfa6adf0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e56aee35169049ab", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/scenarios/${scenarioId} (app/labs/scenarios/[id]/page.tsx:1259)"}, "properties": {"repobilityId": "d486d14887cb7367", "scanner": "scanner-primary", "fingerprint": "e56aee35169049ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bb5cba70e17670d2", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/scenarios/transform (app/labs/scenarios/[id]/page.tsx:1328)"}, "properties": {"repobilityId": "1c10b05e4b6e9616", "scanner": "scanner-primary", "fingerprint": "bb5cba70e17670d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a19986d40410d3f3", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/scenarios/${scenarioId} (app/labs/scenarios/[id]/page.tsx:1403)"}, "properties": {"repobilityId": "806a91fdfcaa928c", "scanner": "scanner-primary", "fingerprint": "a19986d40410d3f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-50b078d891af55bd", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/scenarios/${scenarioId}/versions (app/labs/scenarios/[id]/page.tsx:1407)"}, "properties": {"repobilityId": "af5eaf614c7310b7", "scanner": "scanner-primary", "fingerprint": "50b078d891af55bd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c60eaac2c16c2ec", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/scenarios/new/page.tsx:793)"}, "properties": {"repobilityId": "a0ae84774e479edb", "scanner": "scanner-primary", "fingerprint": "2c60eaac2c16c2ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2b482db51fac38ba", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/scenarios/${scenarioId} (app/labs/scenarios/new/page.tsx:816)"}, "properties": {"repobilityId": "0534a653df20de17", "scanner": "scanner-primary", "fingerprint": "2b482db51fac38ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2dc0a9a13a84752e", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/debrief-review/page.tsx:91)"}, "properties": {"repobilityId": "3337fa1810139125", "scanner": "scanner-primary", "fingerprint": "2dc0a9a13a84752e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1ed73288b356f223", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/debrief-notes?${params.toString()} (app/labs/debrief-review/page.tsx:112)"}, "properties": {"repobilityId": "f78a7d00152bcdd9", "scanner": "scanner-primary", "fingerprint": "1ed73288b356f223", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a217acca26e4a92d", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/peer-evals/page.tsx:155)"}, "properties": {"repobilityId": "ca1dee02963d0ae4", "scanner": "scanner-primary", "fingerprint": "a217acca26e4a92d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1e4242210f27b4d6", "level": "error", "message": {"text": "Dangling fetch: GET /api/peer-evaluations/aggregate?${query.toString()} (app/labs/peer-evals/page.tsx:182)"}, "properties": {"repobilityId": "35d18f9a6b941824", "scanner": "scanner-primary", "fingerprint": "1e4242210f27b4d6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-239b4f3c85690183", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skill-drills (app/labs/skill-drills/page.tsx:270)"}, "properties": {"repobilityId": "9471282965fb6d28", "scanner": "scanner-primary", "fingerprint": "239b4f3c85690183", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-46f5b6517ada5ca9", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skill-drills/${drill.id}/documents (app/labs/skill-drills/page.tsx:290)"}, "properties": {"repobilityId": "e817689f5d967911", "scanner": "scanner-primary", "fingerprint": "46f5b6517ada5ca9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1dfe7a0801198910", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skill-drills/${drillId}/documents (app/labs/skill-drills/page.tsx:304)"}, "properties": {"repobilityId": "c630bb47ee4f5c78", "scanner": "scanner-primary", "fingerprint": "1dfe7a0801198910", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-72bd2a2ebde2f6ae", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/skill-drills/${id} (app/labs/skill-drills/page.tsx:415)"}, "properties": {"repobilityId": "0cf514a83de561c0", "scanner": "scanner-primary", "fingerprint": "72bd2a2ebde2f6ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b8bd87048768c924", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/skill-drills/seed (app/labs/skill-drills/page.tsx:437)"}, "properties": {"repobilityId": "141f3c0a2142c79b", "scanner": "scanner-primary", "fingerprint": "b8bd87048768c924", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8a876d755a38e5c9", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/skill-drills/${editingDrill.id}/documents (app/labs/skill-drills/page.tsx:492)"}, "properties": {"repobilityId": "8c5ef9265dbf7a5b", "scanner": "scanner-primary", "fingerprint": "8a876d755a38e5c9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b1d68401c42f1579", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/skill-drills/${editingDrill.id}/documents (app/labs/skill-drills/page.tsx:532)"}, "properties": {"repobilityId": "5ba051b15a7d9874", "scanner": "scanner-primary", "fingerprint": "b1d68401c42f1579", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fd7369dbeb483db9", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/skill-drills/${editingDrill.id}/documents?documentId=${docId} (app/labs/skill-drills/page.tsx:558)"}, "properties": {"repobilityId": "c445ac1ef7f743be", "scanner": "scanner-primary", "fingerprint": "fd7369dbeb483db9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-013bca1ed0028aa0", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skill-drills/${id} (app/labs/skill-drills/[id]/page.tsx:59)"}, "properties": {"repobilityId": "76e84dfae1afab22", "scanner": "scanner-primary", "fingerprint": "013bca1ed0028aa0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a1b6081f13ef9e7c", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skills?includeDocuments=true (app/labs/skill-sheets/page.tsx:104)"}, "properties": {"repobilityId": "8abd4458155b40ac", "scanner": "scanner-primary", "fingerprint": "a1b6081f13ef9e7c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6b78d5749066e34e", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/skills/${addDocSkill.id}/documents (app/labs/skill-sheets/page.tsx:162)"}, "properties": {"repobilityId": "b687716dcf05c7f2", "scanner": "scanner-primary", "fingerprint": "6b78d5749066e34e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f7fdb73819777e46", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/skills/${addDocSkill.id}/documents (app/labs/skill-sheets/page.tsx:201)"}, "properties": {"repobilityId": "ed0006fca8fbec2f", "scanner": "scanner-primary", "fingerprint": "f7fdb73819777e46", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3486975aa07eff25", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/skills/${deleteTarget.skill.id}/documents?documentId=${deleteTarget.doc.id} (app/labs/skill-sheets/page.tsx:224)"}, "properties": {"repobilityId": "4c963cbe963d663f", "scanner": "scanner-primary", "fingerprint": "3486975aa07eff25", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d3a533583f984bf4", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/schedule/page.tsx:282)"}, "properties": {"repobilityId": "0c764325070c7ced", "scanner": "scanner-primary", "fingerprint": "d3a533583f984bf4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cc13301b5b9ac8a4", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/daily-notes?${params} (app/labs/schedule/page.tsx:343)"}, "properties": {"repobilityId": "8a87568339748e42", "scanner": "scanner-primary", "fingerprint": "cc13301b5b9ac8a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9d32a892dc128b98", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/daily-notes (app/labs/schedule/page.tsx:402)"}, "properties": {"repobilityId": "2aa14742f782e687", "scanner": "scanner-primary", "fingerprint": "9d32a892dc128b98", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cebed10fca7c4c9d", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/daily-notes (app/labs/schedule/page.tsx:478)"}, "properties": {"repobilityId": "d97765d393b2cd8d", "scanner": "scanner-primary", "fingerprint": "cebed10fca7c4c9d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0f8ce9ecd70b5746", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days?${params} (app/labs/schedule/page.tsx:752)"}, "properties": {"repobilityId": "570c267858a4240c", "scanner": "scanner-primary", "fingerprint": "0f8ce9ecd70b5746", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-57d9ae2c0b1e3e9f", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/page.tsx:195)"}, "properties": {"repobilityId": "80290feeb6fea300", "scanner": "scanner-primary", "fingerprint": "57d9ae2c0b1e3e9f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e2843b544b1e260", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/instructors (app/labs/schedule/[id]/page.tsx:196)"}, "properties": {"repobilityId": "5a7b99a0d9c32e33", "scanner": "scanner-primary", "fingerprint": "5e2843b544b1e260", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cdfda6be6d38854b", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/locations?type=room (app/labs/schedule/[id]/page.tsx:197)"}, "properties": {"repobilityId": "3491295cd2840bee", "scanner": "scanner-primary", "fingerprint": "cdfda6be6d38854b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-16ce0b80d68aa521", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-day-roles?lab_day_id=${labDayId} (app/labs/schedule/[id]/page.tsx:198)"}, "properties": {"repobilityId": "9238e61e7291805d", "scanner": "scanner-primary", "fingerprint": "16ce0b80d68aa521", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-608a9ac2ef608ad9", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skills?includeDocuments=true (app/labs/schedule/[id]/page.tsx:209)"}, "properties": {"repobilityId": "3534c70b847369dd", "scanner": "scanner-primary", "fingerprint": "608a9ac2ef608ad9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2f1eebde63a90506", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/station-skills?stationId=${station.id} (app/labs/schedule/[id]/page.tsx:218)"}, "properties": {"repobilityId": "bd51bec0f29a4183", "scanner": "scanner-primary", "fingerprint": "2f1eebde63a90506", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fb54a8ccb05505a4", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/stations/${station.id}/documents (app/labs/schedule/[id]/page.tsx:237)"}, "properties": {"repobilityId": "6c972c1cf0d348ba", "scanner": "scanner-primary", "fingerprint": "fb54a8ccb05505a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-06771d7e23d711d3", "level": "error", "message": {"text": "Dangling fetch: GET /api/skill-sheets/by-skill-name?name=${encodeURIComponent(skillName)}&program=${encodeURIComponent(program.toLowerCase())} (app/labs/schedule/[id]/page.tsx:263)"}, "properties": {"repobilityId": "c3cc0b6d2cfce390", "scanner": "scanner-primary", "fingerprint": "06771d7e23d711d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e8c2072da5075e3", "level": "error", "message": {"text": "Dangling fetch: GET /api/nremt-scenarios (app/labs/schedule/[id]/page.tsx:281)"}, "properties": {"repobilityId": "6be9e6ee3d8058d7", "scanner": "scanner-primary", "fingerprint": "2e8c2072da5075e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c892533b17e8afb", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${labDay.cohort.id}&status=active (app/labs/schedule/[id]/page.tsx:294)"}, "properties": {"repobilityId": "9f47dc75fdde70d0", "scanner": "scanner-primary", "fingerprint": "2c892533b17e8afb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-104132a23a4fb539", "level": "error", "message": {"text": "Dangling fetch: GET /api/tracking/scenarios?labDayId=${labDayId} (app/labs/schedule/[id]/page.tsx:299)"}, "properties": {"repobilityId": "5c583bf99e7f1130", "scanner": "scanner-primary", "fingerprint": "104132a23a4fb539", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e7665ab18fca9b8", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/schedule/[id]/page.tsx:304)"}, "properties": {"repobilityId": "0178533fcf77ad01", "scanner": "scanner-primary", "fingerprint": "6e7665ab18fca9b8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-39481a6e9a4dafd4", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skills (app/labs/schedule/[id]/page.tsx:310)"}, "properties": {"repobilityId": "946dab6e0c7308eb", "scanner": "scanner-primary", "fingerprint": "39481a6e9a4dafd4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-88a4283cdf2df9d7", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/schedule/[id]/page.tsx:316)"}, "properties": {"repobilityId": "1906323343abd14c", "scanner": "scanner-primary", "fingerprint": "88a4283cdf2df9d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aab621f54eb34f05", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/page.tsx:326)"}, "properties": {"repobilityId": "bddacb4634a6de13", "scanner": "scanner-primary", "fingerprint": "aab621f54eb34f05", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01121dd7a6cdcefa", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/stations (app/labs/schedule/[id]/page.tsx:349)"}, "properties": {"repobilityId": "497e5a79fd207258", "scanner": "scanner-primary", "fingerprint": "01121dd7a6cdcefa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-284da4f5c549aa62", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/lab-templates/refresh-day (app/labs/schedule/[id]/page.tsx:372)"}, "properties": {"repobilityId": "96e1a7589f93498c", "scanner": "scanner-primary", "fingerprint": "284da4f5c549aa62", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9889195df98b0959", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/page.tsx:401)"}, "properties": {"repobilityId": "0da0806a58c3b9de", "scanner": "scanner-primary", "fingerprint": "9889195df98b0959", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83cf0bdeadb2f5b3", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/page.tsx:409)"}, "properties": {"repobilityId": "62bc719e8768ff12", "scanner": "scanner-primary", "fingerprint": "83cf0bdeadb2f5b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a910a0ba90025de8", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/page.tsx:436)"}, "properties": {"repobilityId": "71577f44b9ab692d", "scanner": "scanner-primary", "fingerprint": "a910a0ba90025de8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c13375d79b6a1616", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/skill-results/resend (app/labs/schedule/[id]/page.tsx:470)"}, "properties": {"repobilityId": "8784b639b3c7e059", "scanner": "scanner-primary", "fingerprint": "c13375d79b6a1616", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-554a8222bb546273", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/checkoff-status (app/labs/schedule/[id]/checkoff/page.tsx:149)"}, "properties": {"repobilityId": "fc3609ccb1ea4a66", "scanner": "scanner-primary", "fingerprint": "554a8222bb546273", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-349bb5d59032b8f1", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/station-assignments (app/labs/schedule/[id]/checkoff/page.tsx:150)"}, "properties": {"repobilityId": "87512fe59caf19a0", "scanner": "scanner-primary", "fingerprint": "349bb5d59032b8f1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e363837db5421fc", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/checkoff-status (app/labs/schedule/[id]/checkoff/page.tsx:222)"}, "properties": {"repobilityId": "d177a76ace17f84e", "scanner": "scanner-primary", "fingerprint": "6e363837db5421fc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01fa045034b27fcf", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skill-drills/${drillId}/documents (app/labs/schedule/[id]/stations/new/page.tsx:189)"}, "properties": {"repobilityId": "2f3c91d1f1f2e74e", "scanner": "scanner-primary", "fingerprint": "01fa045034b27fcf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ac210abe0ab09f62", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/instructor-availability?date=${labDay.date}&start_time=08:00&end_time=17:00&lab_day_id=${labDay.id} (app/labs/schedule/[id]/stations/new/page.tsx:208)"}, "properties": {"repobilityId": "a85d04ed6ee58a4b", "scanner": "scanner-primary", "fingerprint": "ac210abe0ab09f62", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e4028da12f211be7", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/stations/new/page.tsx:247)"}, "properties": {"repobilityId": "f51ac9552d431401", "scanner": "scanner-primary", "fingerprint": "e4028da12f211be7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cc4257ada104e591", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/stations?labDayId=${labDayId} (app/labs/schedule/[id]/stations/new/page.tsx:254)"}, "properties": {"repobilityId": "b0c1b1aa1ccd863f", "scanner": "scanner-primary", "fingerprint": "cc4257ada104e591", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dfe5c3b3946091f2", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/scenarios (app/labs/schedule/[id]/stations/new/page.tsx:261)"}, "properties": {"repobilityId": "62adc904c5e0f495", "scanner": "scanner-primary", "fingerprint": "dfe5c3b3946091f2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-da30b0fc78091eee", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skills?includeDocuments=true (app/labs/schedule/[id]/stations/new/page.tsx:268)"}, "properties": {"repobilityId": "21f87ef581e91327", "scanner": "scanner-primary", "fingerprint": "da30b0fc78091eee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-850853ce42ab332c", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skill-drills (app/labs/schedule/[id]/stations/new/page.tsx:275)"}, "properties": {"repobilityId": "5839367528761441", "scanner": "scanner-primary", "fingerprint": "850853ce42ab332c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf4299d03e338d83", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/instructors (app/labs/schedule/[id]/stations/new/page.tsx:282)"}, "properties": {"repobilityId": "7eeddfcabbe741f7", "scanner": "scanner-primary", "fingerprint": "cf4299d03e338d83", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a35304fdc6419f27", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/locations?type=room (app/labs/schedule/[id]/stations/new/page.tsx:289)"}, "properties": {"repobilityId": "f7133d30ace53e5f", "scanner": "scanner-primary", "fingerprint": "a35304fdc6419f27", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fb2c97993905b44f", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/stations (app/labs/schedule/[id]/stations/new/page.tsx:410)"}, "properties": {"repobilityId": "bb64b6eefb333ffb", "scanner": "scanner-primary", "fingerprint": "fb2c97993905b44f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e1c279ed66f62e8", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/station-skills (app/labs/schedule/[id]/stations/new/page.tsx:441)"}, "properties": {"repobilityId": "efd5516ede0dc462", "scanner": "scanner-primary", "fingerprint": "6e1c279ed66f62e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-336cf311a7bd6323", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/custom-skills (app/labs/schedule/[id]/stations/new/page.tsx:454)"}, "properties": {"repobilityId": "df0805c113e85c1b", "scanner": "scanner-primary", "fingerprint": "336cf311a7bd6323", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-854e42ea11ca359e", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/station-assignments (app/labs/schedule/[id]/assignments/page.tsx:132)"}, "properties": {"repobilityId": "e5574d0dabcb57cc", "scanner": "scanner-primary", "fingerprint": "854e42ea11ca359e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b7ed611f6c147c38", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/checkoff-status (app/labs/schedule/[id]/assignments/page.tsx:133)"}, "properties": {"repobilityId": "ebc34810efef21b9", "scanner": "scanner-primary", "fingerprint": "b7ed611f6c147c38", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fcd365ca9c8e1390", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/station-assignments (app/labs/schedule/[id]/assignments/page.tsx:160)"}, "properties": {"repobilityId": "14910626426284b6", "scanner": "scanner-primary", "fingerprint": "fcd365ca9c8e1390", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-656843ed966faf6a", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/lab-days/${labDayId}/station-assignments?student_id=${student.student_id} (app/labs/schedule/[id]/assignments/page.tsx:188)"}, "properties": {"repobilityId": "c6621766c7853dfe", "scanner": "scanner-primary", "fingerprint": "656843ed966faf6a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-897d76ba7f44ca61", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/schedule/[id]/coordinator/page.tsx:480)"}, "properties": {"repobilityId": "64600852a3e64886", "scanner": "scanner-primary", "fingerprint": "897d76ba7f44ca61", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-61edbeb8efd60609", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/coordinator/page.tsx:492)"}, "properties": {"repobilityId": "39602f7503929540", "scanner": "scanner-primary", "fingerprint": "61edbeb8efd60609", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8b5365534c83c139", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/student-queue?lab_day_id=${labDayId} (app/labs/schedule/[id]/coordinator/page.tsx:515)"}, "properties": {"repobilityId": "473648032d10868e", "scanner": "scanner-primary", "fingerprint": "8b5365534c83c139", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-84600134d279178c", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/assistance-alerts?unresolved=true (app/labs/schedule/[id]/coordinator/page.tsx:537)"}, "properties": {"repobilityId": "140ea273093ca7de", "scanner": "scanner-primary", "fingerprint": "84600134d279178c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-84fe245ebeb4693d", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/retake-status (app/labs/schedule/[id]/coordinator/page.tsx:553)"}, "properties": {"repobilityId": "743388ced7926146", "scanner": "scanner-primary", "fingerprint": "84fe245ebeb4693d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e8d6b71ee42834e2", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/volunteer-availability (app/labs/schedule/[id]/coordinator/page.tsx:571)"}, "properties": {"repobilityId": "46ea1a72d393ee52", "scanner": "scanner-primary", "fingerprint": "e8d6b71ee42834e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8ad7c379b1b0aca2", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/lab-days/${labDayId}/assistance-alerts (app/labs/schedule/[id]/coordinator/page.tsx:634)"}, "properties": {"repobilityId": "fd97d79cbe95cf11", "scanner": "scanner-primary", "fingerprint": "8ad7c379b1b0aca2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-81c1b8d2ee281f52", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/instructors (app/labs/schedule/[id]/coordinator/page.tsx:677)"}, "properties": {"repobilityId": "ffcba771ee9b730d", "scanner": "scanner-primary", "fingerprint": "81c1b8d2ee281f52", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e3bc30cc518d31c0", "level": "error", "message": {"text": "Dangling fetch: GET /api/skill-sheets (app/labs/schedule/[id]/coordinator/page.tsx:678)"}, "properties": {"repobilityId": "a550da3ce3da7905", "scanner": "scanner-primary", "fingerprint": "e3bc30cc518d31c0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0128bc66c25d3af6", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/stations (app/labs/schedule/[id]/coordinator/page.tsx:851)"}, "properties": {"repobilityId": "0eeddbc7703d2a36", "scanner": "scanner-primary", "fingerprint": "0128bc66c25d3af6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9ffb0de674efc655", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/stations (app/labs/schedule/[id]/coordinator/page.tsx:884)"}, "properties": {"repobilityId": "0129c8e60b8ac1bd", "scanner": "scanner-primary", "fingerprint": "9ffb0de674efc655", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3566626e29f90868", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/stations/${stationId} (app/labs/schedule/[id]/coordinator/page.tsx:932)"}, "properties": {"repobilityId": "66eecccdafc4a8ea", "scanner": "scanner-primary", "fingerprint": "3566626e29f90868", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dd6ca43f83459b09", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/stations/${stationId} (app/labs/schedule/[id]/coordinator/page.tsx:974)"}, "properties": {"repobilityId": "8b29126d183eb4e6", "scanner": "scanner-primary", "fingerprint": "dd6ca43f83459b09", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-60a583ce53f71c2f", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/stations/${station.id} (app/labs/schedule/[id]/coordinator/page.tsx:1008)"}, "properties": {"repobilityId": "8a9c6beccc1eac2c", "scanner": "scanner-primary", "fingerprint": "60a583ce53f71c2f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f69d715c119f2f10", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/student-queue (app/labs/schedule/[id]/coordinator/page.tsx:1284)"}, "properties": {"repobilityId": "c4637a093dc509ed", "scanner": "scanner-primary", "fingerprint": "f69d715c119f2f10", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d83b0815a14bbd54", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/student-queue (app/labs/schedule/[id]/coordinator/page.tsx:1308)"}, "properties": {"repobilityId": "a08c5ea5d81ba57b", "scanner": "scanner-primary", "fingerprint": "d83b0815a14bbd54", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-719e4a68999672bd", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/student-queue (app/labs/schedule/[id]/coordinator/page.tsx:1339)"}, "properties": {"repobilityId": "95c49baf143b7a1b", "scanner": "scanner-primary", "fingerprint": "719e4a68999672bd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-010bcf0c17f3b55e", "level": "error", "message": {"text": "Dangling fetch: GET /api/timer-display (app/labs/schedule/[id]/edit/page.tsx:203)"}, "properties": {"repobilityId": "b75e3096fe517c22", "scanner": "scanner-primary", "fingerprint": "010bcf0c17f3b55e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dfade19f44c99d2f", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/list (app/labs/schedule/[id]/edit/page.tsx:215)"}, "properties": {"repobilityId": "7073f3f75c0a637b", "scanner": "scanner-primary", "fingerprint": "dfade19f44c99d2f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f22bbace7081fe08", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-day-roles?lab_day_id=${labDayId} (app/labs/schedule/[id]/edit/page.tsx:227)"}, "properties": {"repobilityId": "04737c178130c38f", "scanner": "scanner-primary", "fingerprint": "f22bbace7081fe08", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7c4fccc49683bcd1", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/edit/page.tsx:242)"}, "properties": {"repobilityId": "f5b131ff3a46be9b", "scanner": "scanner-primary", "fingerprint": "7c4fccc49683bcd1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3c0ce33509fddf4e", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skill-coverage?cohort_id=${cohortId} (app/labs/schedule/[id]/edit/page.tsx:292)"}, "properties": {"repobilityId": "328b42abf414491c", "scanner": "scanner-primary", "fingerprint": "3c0ce33509fddf4e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fb59344d48fc2e04", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/schedule/conflicts (app/labs/schedule/[id]/edit/page.tsx:328)"}, "properties": {"repobilityId": "6fd7cc688e0a08dc", "scanner": "scanner-primary", "fingerprint": "fb59344d48fc2e04", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c79b9be0cb88708b", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/edit/page.tsx:392)"}, "properties": {"repobilityId": "4a501cf6830351a8", "scanner": "scanner-primary", "fingerprint": "c79b9be0cb88708b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-91e1726f19eb19ff", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/request-coverage (app/labs/schedule/[id]/edit/page.tsx:421)"}, "properties": {"repobilityId": "f91e5742b9587da6", "scanner": "scanner-primary", "fingerprint": "91e1726f19eb19ff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-665c10b4694687b6", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/lab-day-roles?lab_day_id=${labDayId} (app/labs/schedule/[id]/edit/page.tsx:439)"}, "properties": {"repobilityId": "444edeeac6a861a9", "scanner": "scanner-primary", "fingerprint": "665c10b4694687b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-666fb610bf0f3d0b", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-day-roles (app/labs/schedule/[id]/edit/page.tsx:454)"}, "properties": {"repobilityId": "6006be2ef417bb07", "scanner": "scanner-primary", "fingerprint": "666fb610bf0f3d0b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dad4647de4e7d020", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/edit/page.tsx:487)"}, "properties": {"repobilityId": "adf8a1684c9e9eff", "scanner": "scanner-primary", "fingerprint": "dad4647de4e7d020", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-17b0e228c45c2c4a", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/stations/${stationId} (app/labs/schedule/[id]/edit/page.tsx:516)"}, "properties": {"repobilityId": "93c417f5b59d383a", "scanner": "scanner-primary", "fingerprint": "17b0e228c45c2c4a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-34cd94357a54119a", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/station-instructors (app/labs/schedule/[id]/edit/page.tsx:526)"}, "properties": {"repobilityId": "b7bd09a3955adedf", "scanner": "scanner-primary", "fingerprint": "34cd94357a54119a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-40eb8dbd8ba13dbf", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/edit/page.tsx:540)"}, "properties": {"repobilityId": "5b1b8f3844aebc3e", "scanner": "scanner-primary", "fingerprint": "40eb8dbd8ba13dbf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-61f554e057fe45c9", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/skill-results (app/labs/schedule/[id]/results/page.tsx:154)"}, "properties": {"repobilityId": "0b168a6b3c5b88c0", "scanner": "scanner-primary", "fingerprint": "61f554e057fe45c9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ddfc064e583d8330", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (app/labs/schedule/[id]/results/page.tsx:170)"}, "properties": {"repobilityId": "65d69066ff239a88", "scanner": "scanner-primary", "fingerprint": "ddfc064e583d8330", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d92334acbc191507", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students/${studentId}/skill-history (app/labs/schedule/[id]/results/page.tsx:200)"}, "properties": {"repobilityId": "665e95d7e53f8fc0", "scanner": "scanner-primary", "fingerprint": "d92334acbc191507", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9034babcadcd6395", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/skill-results/resend (app/labs/schedule/[id]/results/page.tsx:226)"}, "properties": {"repobilityId": "4a87c2d991916b4c", "scanner": "scanner-primary", "fingerprint": "9034babcadcd6395", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-69abb8a4552ec08d", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/skill-results/resend (app/labs/schedule/[id]/results/page.tsx:261)"}, "properties": {"repobilityId": "11b6eb2e7e234981", "scanner": "scanner-primary", "fingerprint": "69abb8a4552ec08d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-051093c5aa6bb671", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/pdf-packet (app/labs/schedule/[id]/results/page.tsx:348)"}, "properties": {"repobilityId": "e662796393dac9e7", "scanner": "scanner-primary", "fingerprint": "051093c5aa6bb671", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-87aa0927f7186a75", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${dayId}/skill-results/resend (app/labs/schedule/[id]/results/page.tsx:960)"}, "properties": {"repobilityId": "3915e5c9e9443ff1", "scanner": "scanner-primary", "fingerprint": "87aa0927f7186a75", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-960f6af1f5aaa1bc", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skill-drills/${drillId}/documents (app/labs/schedule/new/page.tsx:423)"}, "properties": {"repobilityId": "8dc76ad3fdc4c52b", "scanner": "scanner-primary", "fingerprint": "960f6af1f5aaa1bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4ef5515e09b5cf0", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/schedule/suggestions?${params.toString()} (app/labs/schedule/new/page.tsx:457)"}, "properties": {"repobilityId": "78c767c4452dab35", "scanner": "scanner-primary", "fingerprint": "c4ef5515e09b5cf0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ba7d7de01d3b03d3", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/schedule/new/page.tsx:481)"}, "properties": {"repobilityId": "6b6ca9345243e856", "scanner": "scanner-primary", "fingerprint": "ba7d7de01d3b03d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-298c20d657241e78", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/scenarios (app/labs/schedule/new/page.tsx:488)"}, "properties": {"repobilityId": "96b0182e9ad3cbcc", "scanner": "scanner-primary", "fingerprint": "298c20d657241e78", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-abbb8a25a96bd5d2", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skills (app/labs/schedule/new/page.tsx:495)"}, "properties": {"repobilityId": "a8f131767c273ce5", "scanner": "scanner-primary", "fingerprint": "abbb8a25a96bd5d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0cc5a0816b3b3598", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skill-drills (app/labs/schedule/new/page.tsx:502)"}, "properties": {"repobilityId": "fe9bb5d12310a7eb", "scanner": "scanner-primary", "fingerprint": "0cc5a0816b3b3598", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a845832f52aa3f18", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/instructors (app/labs/schedule/new/page.tsx:509)"}, "properties": {"repobilityId": "7c0a8a83cd50c270", "scanner": "scanner-primary", "fingerprint": "a845832f52aa3f18", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-605ca3407a3ac47a", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/list (app/labs/schedule/new/page.tsx:516)"}, "properties": {"repobilityId": "310c512d5ca1fbc2", "scanner": "scanner-primary", "fingerprint": "605ca3407a3ac47a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b55d304dbc1fef4b", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/templates (app/labs/schedule/new/page.tsx:525)"}, "properties": {"repobilityId": "8793e623f17c40e0", "scanner": "scanner-primary", "fingerprint": "b55d304dbc1fef4b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-87b0891682195557", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/schedule/conflicts (app/labs/schedule/new/page.tsx:557)"}, "properties": {"repobilityId": "f06c3d281a693003", "scanner": "scanner-primary", "fingerprint": "87b0891682195557", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-22fe47ae750dda67", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/templates/${existing.id} (app/labs/schedule/new/page.tsx:844)"}, "properties": {"repobilityId": "3a766ce8984ab08b", "scanner": "scanner-primary", "fingerprint": "22fe47ae750dda67", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3e6b6ca7f9fa6c61", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/templates (app/labs/schedule/new/page.tsx:860)"}, "properties": {"repobilityId": "ee4cf83729fff2e0", "scanner": "scanner-primary", "fingerprint": "3e6b6ca7f9fa6c61", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9bcf0ab8d80e018c", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days (app/labs/schedule/new/page.tsx:921)"}, "properties": {"repobilityId": "2e39f6618a0d1392", "scanner": "scanner-primary", "fingerprint": "9bcf0ab8d80e018c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0e66c430271050d8", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/request-coverage (app/labs/schedule/new/page.tsx:953)"}, "properties": {"repobilityId": "768314c8b83aa4cd", "scanner": "scanner-primary", "fingerprint": "0e66c430271050d8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bbde684abf8f2c5e", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-day-roles (app/labs/schedule/new/page.tsx:976)"}, "properties": {"repobilityId": "c242e2af2239e8d3", "scanner": "scanner-primary", "fingerprint": "bbde684abf8f2c5e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-473cf8b25b4a81f1", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/stations (app/labs/schedule/new/page.tsx:992)"}, "properties": {"repobilityId": "a0ce6eef53ed7f64", "scanner": "scanner-primary", "fingerprint": "473cf8b25b4a81f1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-475b8ef86b5af235", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/station-skills (app/labs/schedule/new/page.tsx:1025)"}, "properties": {"repobilityId": "4b845f3c46681f31", "scanner": "scanner-primary", "fingerprint": "475b8ef86b5af235", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-34e3dcccf8843b54", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/custom-skills (app/labs/schedule/new/page.tsx:1038)"}, "properties": {"repobilityId": "a3415f4adcc2f075", "scanner": "scanner-primary", "fingerprint": "34e3dcccf8843b54", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a144ba6ddbaa1124", "level": "error", "message": {"text": "Dangling fetch: GET /api/seating/classrooms (app/labs/seating/charts/page.tsx:87)"}, "properties": {"repobilityId": "ac620143094f42fe", "scanner": "scanner-primary", "fingerprint": "a144ba6ddbaa1124", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b0a9151d5830c0c3", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/seating/charts/page.tsx:106)"}, "properties": {"repobilityId": "3a2ec469c3ba7f25", "scanner": "scanner-primary", "fingerprint": "b0a9151d5830c0c3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2276990dd470599b", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/labs/seating/charts/page.tsx:124)"}, "properties": {"repobilityId": "55ceea18f0637eba", "scanner": "scanner-primary", "fingerprint": "2276990dd470599b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b6e44ba417cf24d8", "level": "error", "message": {"text": "Dangling fetch: POST /api/seating/charts (app/labs/seating/charts/page.tsx:161)"}, "properties": {"repobilityId": "ea9fef0334e89959", "scanner": "scanner-primary", "fingerprint": "b6e44ba417cf24d8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e8accc865461a925", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/seating/charts/${chartId} (app/labs/seating/charts/page.tsx:190)"}, "properties": {"repobilityId": "076f5c1552f88828", "scanner": "scanner-primary", "fingerprint": "e8accc865461a925", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e44bca7f137e315", "level": "error", "message": {"text": "Dangling fetch: PUT /api/seating/charts/${chartId} (app/labs/seating/charts/page.tsx:205)"}, "properties": {"repobilityId": "5a9fb6fae9ec0513", "scanner": "scanner-primary", "fingerprint": "5e44bca7f137e315", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4dfa7451e5bfae7d", "level": "error", "message": {"text": "Dangling fetch: GET /api/seating/charts/${chartId} (app/labs/seating/charts/[id]/page.tsx:130)"}, "properties": {"repobilityId": "aa1aca48b18000bd", "scanner": "scanner-primary", "fingerprint": "4dfa7451e5bfae7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-afa8190a76c4a92c", "level": "error", "message": {"text": "Dangling fetch: PUT /api/seating/charts/${chartId}/assignments (app/labs/seating/charts/[id]/page.tsx:286)"}, "properties": {"repobilityId": "e321ccb93e4d3da3", "scanner": "scanner-primary", "fingerprint": "afa8190a76c4a92c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d1c98903687eeb0d", "level": "error", "message": {"text": "Dangling fetch: POST /api/seating/charts/${chartId}/generate (app/labs/seating/charts/[id]/page.tsx:343)"}, "properties": {"repobilityId": "82562913f611709b", "scanner": "scanner-primary", "fingerprint": "d1c98903687eeb0d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01cc37372d5491f0", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/seating/learning-styles/page.tsx:161)"}, "properties": {"repobilityId": "6a3708b55e5c37df", "scanner": "scanner-primary", "fingerprint": "01cc37372d5491f0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-67de7bd2613a3bd1", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/labs/seating/learning-styles/page.tsx:179)"}, "properties": {"repobilityId": "f943f390a6878387", "scanner": "scanner-primary", "fingerprint": "67de7bd2613a3bd1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d5d832edb39ebdfb", "level": "error", "message": {"text": "Dangling fetch: POST /api/seating/learning-styles (app/labs/seating/learning-styles/page.tsx:248)"}, "properties": {"repobilityId": "0e7057a25dba38eb", "scanner": "scanner-primary", "fingerprint": "d5d832edb39ebdfb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8293d9c21116a389", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/seating/learning-styles?id=${id} (app/labs/seating/learning-styles/page.tsx:285)"}, "properties": {"repobilityId": "26f64fae99431c53", "scanner": "scanner-primary", "fingerprint": "8293d9c21116a389", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ca3f2734c3c17d28", "level": "error", "message": {"text": "Dangling fetch: POST /api/seating/learning-styles (app/labs/seating/learning-styles/page.tsx:326)"}, "properties": {"repobilityId": "fb3728b16b959bf7", "scanner": "scanner-primary", "fingerprint": "ca3f2734c3c17d28", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d4d84ee521cb7b16", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/seating/preferences/page.tsx:97)"}, "properties": {"repobilityId": "11849a68dcafc8b6", "scanner": "scanner-primary", "fingerprint": "d4d84ee521cb7b16", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2dfc9a358419be1c", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/labs/seating/preferences/page.tsx:115)"}, "properties": {"repobilityId": "63d683a970f714d5", "scanner": "scanner-primary", "fingerprint": "2dfc9a358419be1c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-53f0d6d1cab0fa40", "level": "error", "message": {"text": "Dangling fetch: POST /api/seating/preferences (app/labs/seating/preferences/page.tsx:174)"}, "properties": {"repobilityId": "2bcff6f0af34261e", "scanner": "scanner-primary", "fingerprint": "53f0d6d1cab0fa40", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-45689ac440ffb09a", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/seating/preferences?id=${id} (app/labs/seating/preferences/page.tsx:203)"}, "properties": {"repobilityId": "d7e0608a8c7c27ce", "scanner": "scanner-primary", "fingerprint": "45689ac440ffb09a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dc2cbf6259750cc2", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/skills/competencies/page.tsx:194)"}, "properties": {"repobilityId": "f8d2d34f4d388f69", "scanner": "scanner-primary", "fingerprint": "dc2cbf6259750cc2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ef9697b24ec17e83", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/competencies?cohort_id=${selectedCohort} (app/labs/skills/competencies/page.tsx:224)"}, "properties": {"repobilityId": "c66bee444522ea31", "scanner": "scanner-primary", "fingerprint": "ef9697b24ec17e83", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2998dcf8821f2932", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/competencies (app/labs/skills/competencies/page.tsx:262)"}, "properties": {"repobilityId": "cf0e57e0140e4fdc", "scanner": "scanner-primary", "fingerprint": "2998dcf8821f2932", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a1e75df6b0d43151", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/competencies (app/labs/skills/competencies/page.tsx:304)"}, "properties": {"repobilityId": "d99b5cf3162fb6e6", "scanner": "scanner-primary", "fingerprint": "a1e75df6b0d43151", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c45c4e5e87f9f8a0", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/labs/skills/competencies/report/page.tsx:156)"}, "properties": {"repobilityId": "295b85d445f8279f", "scanner": "scanner-primary", "fingerprint": "c45c4e5e87f9f8a0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e61b79d8e6b5fe6d", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/labs/ekg-warmup/page.tsx:120)"}, "properties": {"repobilityId": "f16f78f5e4ee7467", "scanner": "scanner-primary", "fingerprint": "e61b79d8e6b5fe6d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-39a96370e876dda2", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/labs/ekg-warmup/page.tsx:133)"}, "properties": {"repobilityId": "3d931c1f4dec1a42", "scanner": "scanner-primary", "fingerprint": "39a96370e876dda2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3128606fb4c36a7b", "level": "error", "message": {"text": "Dangling fetch: GET /api/tracking/ekg-scores?cohortId=${cohortId}&limit=20 (app/labs/ekg-warmup/page.tsx:145)"}, "properties": {"repobilityId": "3d131fcdd3dbf3f5", "scanner": "scanner-primary", "fingerprint": "3128606fb4c36a7b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f8738779c1ca3b80", "level": "error", "message": {"text": "Dangling fetch: POST /api/tracking/ekg-scores (app/labs/ekg-warmup/page.tsx:194)"}, "properties": {"repobilityId": "e3a869f5d44965ec", "scanner": "scanner-primary", "fingerprint": "f8738779c1ca3b80", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c6fd1d423b36b799", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/labs/mentorship/page.tsx:167)"}, "properties": {"repobilityId": "fedb34abb3ec9b9b", "scanner": "scanner-primary", "fingerprint": "c6fd1d423b36b799", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6eb764ecba521362", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/mentorship?${query.toString()} (app/labs/mentorship/page.tsx:191)"}, "properties": {"repobilityId": "df7726524d0ee80e", "scanner": "scanner-primary", "fingerprint": "6eb764ecba521362", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-660f9bea6e1eb68f", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?limit=200&status=active (app/labs/mentorship/page.tsx:206)"}, "properties": {"repobilityId": "bc96df52e696baa7", "scanner": "scanner-primary", "fingerprint": "660f9bea6e1eb68f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-188f98bc2d9a5b10", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/mentorship/${pairId}/logs (app/labs/mentorship/page.tsx:219)"}, "properties": {"repobilityId": "267160e9285f8930", "scanner": "scanner-primary", "fingerprint": "188f98bc2d9a5b10", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-62f039d265a355a6", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/mentorship (app/labs/mentorship/page.tsx:256)"}, "properties": {"repobilityId": "f6e76e54c626ea95", "scanner": "scanner-primary", "fingerprint": "62f039d265a355a6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-32fb81888ddea057", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/mentorship/${pairId}/logs (app/labs/mentorship/page.tsx:292)"}, "properties": {"repobilityId": "5cfd014b9b112dfe", "scanner": "scanner-primary", "fingerprint": "32fb81888ddea057", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-53ebe850c8d79fb8", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/mentorship/${pairId} (app/labs/mentorship/page.tsx:321)"}, "properties": {"repobilityId": "34cb7b77f0ed7b53", "scanner": "scanner-primary", "fingerprint": "53ebe850c8d79fb8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d3abf741881ce1a6", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/mentorship/${pairId} (app/labs/mentorship/page.tsx:340)"}, "properties": {"repobilityId": "f52ee2384014eac2", "scanner": "scanner-primary", "fingerprint": "d3abf741881ce1a6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-75f603456b1ebe95", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/layout.tsx:31)"}, "properties": {"repobilityId": "8d58068e440e5fe6", "scanner": "scanner-primary", "fingerprint": "75f603456b1ebe95", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-675dca5156b9de6c", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/page.tsx:68)"}, "properties": {"repobilityId": "94b938b6566ca833", "scanner": "scanner-primary", "fingerprint": "675dca5156b9de6c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-36f053dacfa3f40c", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/dashboard (app/lvfr-aemt/page.tsx:76)"}, "properties": {"repobilityId": "353d8ebbc5d35a1c", "scanner": "scanner-primary", "fingerprint": "36f053dacfa3f40c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e570b9a0c84291a6", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/files/page.tsx:100)"}, "properties": {"repobilityId": "d4db5cb0612ecf06", "scanner": "scanner-primary", "fingerprint": "e570b9a0c84291a6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6599c16057879689", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/files?${params} (app/lvfr-aemt/files/page.tsx:111)"}, "properties": {"repobilityId": "17ee4da3a933b183", "scanner": "scanner-primary", "fingerprint": "6599c16057879689", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e51e3e5dda356413", "level": "error", "message": {"text": "Dangling fetch: POST /api/lvfr-aemt/files (app/lvfr-aemt/files/page.tsx:168)"}, "properties": {"repobilityId": "744f1fe220e268dd", "scanner": "scanner-primary", "fingerprint": "e51e3e5dda356413", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b017270e78cadac0", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lvfr-aemt/files/${file.id} (app/lvfr-aemt/files/page.tsx:202)"}, "properties": {"repobilityId": "57b50cb20ac35afa", "scanner": "scanner-primary", "fingerprint": "b017270e78cadac0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-230bd438a0cc8550", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lvfr-aemt/files/${file.id} (app/lvfr-aemt/files/page.tsx:215)"}, "properties": {"repobilityId": "d5b65cd674b994bd", "scanner": "scanner-primary", "fingerprint": "230bd438a0cc8550", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c26c51a05814d0f5", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lvfr-aemt/files/${editingFile.id} (app/lvfr-aemt/files/page.tsx:225)"}, "properties": {"repobilityId": "234f49c6100a96d6", "scanner": "scanner-primary", "fingerprint": "c26c51a05814d0f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d05f600daedb8eb0", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/grades/page.tsx:139)"}, "properties": {"repobilityId": "0574d662fa38318b", "scanner": "scanner-primary", "fingerprint": "d05f600daedb8eb0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-988ae795d0187884", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/grades (app/lvfr-aemt/grades/page.tsx:154)"}, "properties": {"repobilityId": "762b4f5061136f07", "scanner": "scanner-primary", "fingerprint": "988ae795d0187884", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-11a5d1ceaae28652", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/grades/summary (app/lvfr-aemt/grades/page.tsx:155)"}, "properties": {"repobilityId": "0bbd5dba2e468a14", "scanner": "scanner-primary", "fingerprint": "11a5d1ceaae28652", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3085cf52a9cad58c", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/grades/summary (app/lvfr-aemt/grades/page.tsx:680)"}, "properties": {"repobilityId": "59b01fdb98531097", "scanner": "scanner-primary", "fingerprint": "3085cf52a9cad58c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-24c6542c456db60f", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/grades?assessment_id=__list__ (app/lvfr-aemt/grades/page.tsx:681)"}, "properties": {"repobilityId": "c72fa7f21639f954", "scanner": "scanner-primary", "fingerprint": "24c6542c456db60f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6d2675180ce6e9a8", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/dashboard (app/lvfr-aemt/grades/page.tsx:689)"}, "properties": {"repobilityId": "6b711fefab6a46c8", "scanner": "scanner-primary", "fingerprint": "6d2675180ce6e9a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0feef633a45f2f4b", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/grades/summary (app/lvfr-aemt/grades/page.tsx:699)"}, "properties": {"repobilityId": "84fc7dd36f83a6cb", "scanner": "scanner-primary", "fingerprint": "0feef633a45f2f4b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7fa0b351e02906a0", "level": "error", "message": {"text": "Dangling fetch: POST /api/lvfr-aemt/grades (app/lvfr-aemt/grades/page.tsx:721)"}, "properties": {"repobilityId": "f775aa32c9f626a5", "scanner": "scanner-primary", "fingerprint": "7fa0b351e02906a0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f13ffc2c5fdf02e0", "level": "error", "message": {"text": "Dangling fetch: POST /api/lvfr-aemt/grades/import (app/lvfr-aemt/grades/import/page.tsx:110)"}, "properties": {"repobilityId": "36130496435f2704", "scanner": "scanner-primary", "fingerprint": "f13ffc2c5fdf02e0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-954252256aad2af1", "level": "error", "message": {"text": "Dangling fetch: POST /api/lvfr-aemt/grades/import/confirm (app/lvfr-aemt/grades/import/page.tsx:159)"}, "properties": {"repobilityId": "ff8a71076fc4722f", "scanner": "scanner-primary", "fingerprint": "954252256aad2af1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3549d8f553f67f57", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/runsheet/${dateParam} (app/lvfr-aemt/day/[date]/page.tsx:139)"}, "properties": {"repobilityId": "8a94e9b4e28d132d", "scanner": "scanner-primary", "fingerprint": "3549d8f553f67f57", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b639e3fe304ed88f", "level": "error", "message": {"text": "Dangling fetch: POST /api/lvfr-aemt/runsheet/${dateParam}/seed (app/lvfr-aemt/day/[date]/page.tsx:225)"}, "properties": {"repobilityId": "55ce173273874891", "scanner": "scanner-primary", "fingerprint": "b639e3fe304ed88f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-40c77e66b9103fbb", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lvfr-aemt/runsheet/items/${item.id} (app/lvfr-aemt/day/[date]/page.tsx:256)"}, "properties": {"repobilityId": "326f8a4be8a10042", "scanner": "scanner-primary", "fingerprint": "40c77e66b9103fbb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5010c4998e2dc6c7", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lvfr-aemt/runsheet/items/${id} (app/lvfr-aemt/day/[date]/page.tsx:281)"}, "properties": {"repobilityId": "cf34bf2c9131148f", "scanner": "scanner-primary", "fingerprint": "5010c4998e2dc6c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b9e5070321be5545", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lvfr-aemt/runsheet/${dateParam}?session=${sessionKey} (app/lvfr-aemt/day/[date]/page.tsx:288)"}, "properties": {"repobilityId": "bbcbf8c49784afdb", "scanner": "scanner-primary", "fingerprint": "b9e5070321be5545", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4696116c64661f56", "level": "error", "message": {"text": "Dangling fetch: POST /api/lvfr-aemt/runsheet/items (app/lvfr-aemt/day/[date]/page.tsx:679)"}, "properties": {"repobilityId": "3c56bdd092efd15c", "scanner": "scanner-primary", "fingerprint": "4696116c64661f56", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d18513d6ee711da2", "level": "error", "message": {"text": "Dangling fetch: POST /api/lvfr-aemt/planner/templates (app/lvfr-aemt/planner/page.tsx:911)"}, "properties": {"repobilityId": "cd8371edcfd9d7a4", "scanner": "scanner-primary", "fingerprint": "d18513d6ee711da2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e8c24a3997460dbd", "level": "error", "message": {"text": "Dangling fetch: POST /api/lvfr-aemt/planner/instances (app/lvfr-aemt/planner/page.tsx:1021)"}, "properties": {"repobilityId": "0c8052703d878cea", "scanner": "scanner-primary", "fingerprint": "e8c24a3997460dbd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e21d8f8aaff5f481", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/planner/blocks (app/lvfr-aemt/planner/page.tsx:1194)"}, "properties": {"repobilityId": "7e33e07e61d582f2", "scanner": "scanner-primary", "fingerprint": "e21d8f8aaff5f481", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5bc9b635389f7f0e", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/planner/availability (app/lvfr-aemt/planner/page.tsx:1195)"}, "properties": {"repobilityId": "46810c9e2b424ae0", "scanner": "scanner-primary", "fingerprint": "5bc9b635389f7f0e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e55f17a969084fba", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/planner/instances (app/lvfr-aemt/planner/page.tsx:1196)"}, "properties": {"repobilityId": "ad3c2739948050f4", "scanner": "scanner-primary", "fingerprint": "e55f17a969084fba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f77355df7ce146b0", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/planner/templates (app/lvfr-aemt/planner/page.tsx:1197)"}, "properties": {"repobilityId": "5517919e02186ca3", "scanner": "scanner-primary", "fingerprint": "f77355df7ce146b0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9f8e442120ed4781", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lvfr-aemt/planner/placements (app/lvfr-aemt/planner/page.tsx:1303)"}, "properties": {"repobilityId": "dbf11022efc3ce1a", "scanner": "scanner-primary", "fingerprint": "9f8e442120ed4781", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-90d713d8fc1b7777", "level": "error", "message": {"text": "Dangling fetch: POST /api/lvfr-aemt/planner/placements/move (app/lvfr-aemt/planner/page.tsx:1366)"}, "properties": {"repobilityId": "6593a6f01ffa69c8", "scanner": "scanner-primary", "fingerprint": "90d713d8fc1b7777", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1477d7be0a004327", "level": "error", "message": {"text": "Dangling fetch: POST /api/lvfr-aemt/planner/placements/move (app/lvfr-aemt/planner/page.tsx:1410)"}, "properties": {"repobilityId": "1d365b0701d9e08c", "scanner": "scanner-primary", "fingerprint": "1477d7be0a004327", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-80a56c745ab38d8e", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lvfr-aemt/planner/placements/${placementId} (app/lvfr-aemt/planner/page.tsx:1459)"}, "properties": {"repobilityId": "b3f5f3350b80f501", "scanner": "scanner-primary", "fingerprint": "80a56c745ab38d8e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-63fb2741ec2020d4", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lvfr-aemt/planner/placements (app/lvfr-aemt/planner/page.tsx:1492)"}, "properties": {"repobilityId": "bfbf30c85fb88fe8", "scanner": "scanner-primary", "fingerprint": "63fb2741ec2020d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5b39aeb1214242f7", "level": "error", "message": {"text": "Dangling fetch: POST /api/lvfr-aemt/planner/validate (app/lvfr-aemt/planner/page.tsx:1520)"}, "properties": {"repobilityId": "cbd621000a7ccc59", "scanner": "scanner-primary", "fingerprint": "5b39aeb1214242f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6116e7e1a41900e3", "level": "error", "message": {"text": "Dangling fetch: POST /api/lvfr-aemt/planner/validate (app/lvfr-aemt/planner/page.tsx:1540)"}, "properties": {"repobilityId": "63b9f643ba524031", "scanner": "scanner-primary", "fingerprint": "6116e7e1a41900e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9d04f65bae01faf6", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lvfr-aemt/planner/instances/${instance.id}/publish (app/lvfr-aemt/planner/page.tsx:1558)"}, "properties": {"repobilityId": "9c2b463746999464", "scanner": "scanner-primary", "fingerprint": "9d04f65bae01faf6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-38d5cd15292cf58e", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lvfr-aemt/planner/instances/${instance.id}/publish (app/lvfr-aemt/planner/page.tsx:1574)"}, "properties": {"repobilityId": "f11ed5b68c6872ab", "scanner": "scanner-primary", "fingerprint": "38d5cd15292cf58e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1d1923a4c8492542", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/calendar (app/lvfr-aemt/calendar/page.tsx:112)"}, "properties": {"repobilityId": "a646ba33c97c3cda", "scanner": "scanner-primary", "fingerprint": "1d1923a4c8492542", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e94f6db0bc029f0", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/calendar/page.tsx:113)"}, "properties": {"repobilityId": "061013dd99e8b915", "scanner": "scanner-primary", "fingerprint": "5e94f6db0bc029f0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aa2c8d4c9c855c3d", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/scheduling (app/lvfr-aemt/calendar/page.tsx:139)"}, "properties": {"repobilityId": "b343e21eb9c200a5", "scanner": "scanner-primary", "fingerprint": "aa2c8d4c9c855c3d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-71ab5e8069b4812a", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lvfr-aemt/calendar (app/lvfr-aemt/calendar/page.tsx:178)"}, "properties": {"repobilityId": "712cb6aff7158b29", "scanner": "scanner-primary", "fingerprint": "71ab5e8069b4812a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5507a0cc7e43c55b", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/scheduling (app/lvfr-aemt/scheduling/page.tsx:68)"}, "properties": {"repobilityId": "b6e37addc259e5eb", "scanner": "scanner-primary", "fingerprint": "5507a0cc7e43c55b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fb4425b4c9456863", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/skills/page.tsx:127)"}, "properties": {"repobilityId": "fdcd3c8f5e377321", "scanner": "scanner-primary", "fingerprint": "fb4425b4c9456863", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-81556bfeb9b5cc1f", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/skills (app/lvfr-aemt/skills/page.tsx:152)"}, "properties": {"repobilityId": "f0a155ae8c61bf41", "scanner": "scanner-primary", "fingerprint": "81556bfeb9b5cc1f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-232119125279a9f1", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/lvfr-aemt/skills/page.tsx:157)"}, "properties": {"repobilityId": "ec20a59289e6cd3e", "scanner": "scanner-primary", "fingerprint": "232119125279a9f1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f5455c92fb049844", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/skills (app/lvfr-aemt/skills/page.tsx:162)"}, "properties": {"repobilityId": "2af77f4ecf91ab14", "scanner": "scanner-primary", "fingerprint": "f5455c92fb049844", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5716bfd3077d310c", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/skills/summary (app/lvfr-aemt/skills/page.tsx:194)"}, "properties": {"repobilityId": "86691a6a2166d499", "scanner": "scanner-primary", "fingerprint": "5716bfd3077d310c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-28acbdc4add83f56", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/skills/matrix?nremt_only=false (app/lvfr-aemt/skills/page.tsx:203)"}, "properties": {"repobilityId": "d2f36cc44aa55c88", "scanner": "scanner-primary", "fingerprint": "28acbdc4add83f56", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76d0445efde6065d", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/skills/summary (app/lvfr-aemt/skills/page.tsx:211)"}, "properties": {"repobilityId": "aef77937f83092c5", "scanner": "scanner-primary", "fingerprint": "76d0445efde6065d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-be12f1c3a26534a2", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/skills/${studentId} (app/lvfr-aemt/skills/page.tsx:221)"}, "properties": {"repobilityId": "1fd88864d9d4935e", "scanner": "scanner-primary", "fingerprint": "be12f1c3a26534a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3b42fcf73280fb7c", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/skills/matrix?${params} (app/lvfr-aemt/skills/page.tsx:237)"}, "properties": {"repobilityId": "9045eb80d905c841", "scanner": "scanner-primary", "fingerprint": "3b42fcf73280fb7c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8b2ba87f77017e99", "level": "error", "message": {"text": "Dangling fetch: POST /api/lvfr-aemt/skills/attempts (app/lvfr-aemt/skills/page.tsx:280)"}, "properties": {"repobilityId": "1d2f0bb6667927a6", "scanner": "scanner-primary", "fingerprint": "8b2ba87f77017e99", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3d4b058b0959d929", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/medications (app/lvfr-aemt/pharm/page.tsx:84)"}, "properties": {"repobilityId": "c9a086e5023fafe1", "scanner": "scanner-primary", "fingerprint": "3d4b058b0959d929", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-625f7af2c22ac777", "level": "error", "message": {"text": "Dangling fetch: GET /api/lvfr-aemt/pharm/checkpoints (app/lvfr-aemt/pharm/page.tsx:85)"}, "properties": {"repobilityId": "3d77ba743b5a37bd", "scanner": "scanner-primary", "fingerprint": "625f7af2c22ac777", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-47138f57c664f551", "level": "error", "message": {"text": "Dangling fetch: POST /api/lvfr-aemt/pharm/checkpoints (app/lvfr-aemt/pharm/page.tsx:126)"}, "properties": {"repobilityId": "f0af53667b9f59b8", "scanner": "scanner-primary", "fingerprint": "47138f57c664f551", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bbffaaf9638761ac", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/page.tsx:690)"}, "properties": {"repobilityId": "19065d38c88cd55e", "scanner": "scanner-primary", "fingerprint": "bbffaaf9638761ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-10ad214409ab55c0", "level": "error", "message": {"text": "Dangling fetch: GET /api/access-requests?status=pending (app/admin/page.tsx:699)"}, "properties": {"repobilityId": "8b4f7f26f238c07b", "scanner": "scanner-primary", "fingerprint": "10ad214409ab55c0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0da21b08918ac88c", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/dashboard-defaults/page.tsx:108)"}, "properties": {"repobilityId": "f063b8b35f0410cb", "scanner": "scanner-primary", "fingerprint": "0da21b08918ac88c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c07c3abd7417997a", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/dashboard-defaults (app/admin/dashboard-defaults/page.tsx:126)"}, "properties": {"repobilityId": "8e6a3878b8b9d1a2", "scanner": "scanner-primary", "fingerprint": "c07c3abd7417997a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8ef32295a3abd530", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/dashboard-defaults (app/admin/dashboard-defaults/page.tsx:208)"}, "properties": {"repobilityId": "576e0431bbb8e648", "scanner": "scanner-primary", "fingerprint": "8ef32295a3abd530", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b6ad94389a438d5", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/bulk-operations/page.tsx:262)"}, "properties": {"repobilityId": "163a41afe70a23ce", "scanner": "scanner-primary", "fingerprint": "0b6ad94389a438d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9d6d26732c1bf633", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/bulk-operations (app/admin/bulk-operations/page.tsx:284)"}, "properties": {"repobilityId": "3b745df9eacfeaeb", "scanner": "scanner-primary", "fingerprint": "9d6d26732c1bf633", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-23203f5d88f307e0", "level": "error", "message": {"text": "Dangling fetch: GET /api/cohorts (app/admin/bulk-operations/page.tsx:295)"}, "properties": {"repobilityId": "706746eb49bca089", "scanner": "scanner-primary", "fingerprint": "23203f5d88f307e0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-105b1dd89f7d8855", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/bulk-operations (app/admin/bulk-operations/page.tsx:369)"}, "properties": {"repobilityId": "d6c187ab98ba26f1", "scanner": "scanner-primary", "fingerprint": "105b1dd89f7d8855", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-121d8f1e1662b994", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/bulk-operations (app/admin/bulk-operations/page.tsx:405)"}, "properties": {"repobilityId": "9f56ac743edf2a9b", "scanner": "scanner-primary", "fingerprint": "121d8f1e1662b994", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d3a13b8851cddc81", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/bulk-operations (app/admin/bulk-operations/page.tsx:439)"}, "properties": {"repobilityId": "e675db9421a08846", "scanner": "scanner-primary", "fingerprint": "d3a13b8851cddc81", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e9702b8760fb387", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/bulk-operations/${operationId}/rollback (app/admin/bulk-operations/page.tsx:472)"}, "properties": {"repobilityId": "8e4175efb7d5caac", "scanner": "scanner-primary", "fingerprint": "5e9702b8760fb387", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6f7fca3430860236", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/equipment (app/admin/equipment/page.tsx:832)"}, "properties": {"repobilityId": "af3035814f512d98", "scanner": "scanner-primary", "fingerprint": "6f7fca3430860236", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6cf9dd23b65cdfa4", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/equipment/checkout (app/admin/equipment/page.tsx:847)"}, "properties": {"repobilityId": "c4c114dffc83f810", "scanner": "scanner-primary", "fingerprint": "6cf9dd23b65cdfa4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-97e7ea1b4df58111", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/equipment/page.tsx:864)"}, "properties": {"repobilityId": "b7f0a0664bd33b6a", "scanner": "scanner-primary", "fingerprint": "97e7ea1b4df58111", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5a8becf18271500f", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/equipment (app/admin/equipment/page.tsx:920)"}, "properties": {"repobilityId": "27f11ccfe16e9af5", "scanner": "scanner-primary", "fingerprint": "5a8becf18271500f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-581982c04ed8ed99", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/equipment?id=${id} (app/admin/equipment/page.tsx:942)"}, "properties": {"repobilityId": "ac76852cb3d9267f", "scanner": "scanner-primary", "fingerprint": "581982c04ed8ed99", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-20e4165e1e8658c2", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/equipment/checkout (app/admin/equipment/page.tsx:961)"}, "properties": {"repobilityId": "29ecd4512cd677b4", "scanner": "scanner-primary", "fingerprint": "20e4165e1e8658c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-932ee561d333dc6e", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/equipment/checkout (app/admin/equipment/page.tsx:994)"}, "properties": {"repobilityId": "907b2316147d7d57", "scanner": "scanner-primary", "fingerprint": "932ee561d333dc6e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-caf90bc7b7c34c6e", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/equipment (app/admin/equipment/page.tsx:1038)"}, "properties": {"repobilityId": "d86eb8aee9da8f08", "scanner": "scanner-primary", "fingerprint": "caf90bc7b7c34c6e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8e11a402d03bb64b", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/equipment/maintenance (app/admin/equipment/maintenance/page.tsx:729)"}, "properties": {"repobilityId": "f5b07bd19feb763c", "scanner": "scanner-primary", "fingerprint": "8e11a402d03bb64b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-584eedbc5d81ee50", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/equipment (app/admin/equipment/maintenance/page.tsx:744)"}, "properties": {"repobilityId": "2b6d65b67fcb0ee9", "scanner": "scanner-primary", "fingerprint": "584eedbc5d81ee50", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-468971a0e981850f", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/equipment/maintenance/page.tsx:756)"}, "properties": {"repobilityId": "e7df90355986e4ba", "scanner": "scanner-primary", "fingerprint": "468971a0e981850f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0f9160e8646efbef", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/equipment/maintenance/${editRecord.id} (app/admin/equipment/maintenance/page.tsx:814)"}, "properties": {"repobilityId": "b52c0fe26d570086", "scanner": "scanner-primary", "fingerprint": "0f9160e8646efbef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-35ead676f327cb39", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/equipment/maintenance (app/admin/equipment/maintenance/page.tsx:820)"}, "properties": {"repobilityId": "f80d180b5f20b1e1", "scanner": "scanner-primary", "fingerprint": "35ead676f327cb39", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-24d00703c2a48236", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/equipment/maintenance/${completeRecord.id} (app/admin/equipment/maintenance/page.tsx:845)"}, "properties": {"repobilityId": "9a4eb4e60b4fe682", "scanner": "scanner-primary", "fingerprint": "24d00703c2a48236", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-160501f7632de682", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/equipment/maintenance/${id} (app/admin/equipment/maintenance/page.tsx:872)"}, "properties": {"repobilityId": "b25a40b0684aaddc", "scanner": "scanner-primary", "fingerprint": "160501f7632de682", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-283746d2481673e8", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/user-activity/page.tsx:213)"}, "properties": {"repobilityId": "cc85a0ad36226854", "scanner": "scanner-primary", "fingerprint": "283746d2481673e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dfed159b27508f27", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/user-activity?period=${period} (app/admin/user-activity/page.tsx:230)"}, "properties": {"repobilityId": "dd3b771545ef1518", "scanner": "scanner-primary", "fingerprint": "dfed159b27508f27", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5c4cafe793ae81d9", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce/events (app/admin/osce-events/page.tsx:112)"}, "properties": {"repobilityId": "27059533c15cef9f", "scanner": "scanner-primary", "fingerprint": "5c4cafe793ae81d9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bc8d89dea1e0adec", "level": "error", "message": {"text": "Dangling fetch: POST /api/osce/events (app/admin/osce-events/page.tsx:146)"}, "properties": {"repobilityId": "c63bc16f477440e5", "scanner": "scanner-primary", "fingerprint": "bc8d89dea1e0adec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-59db65a7457b087c", "level": "error", "message": {"text": "Dangling fetch: POST /api/osce/events/${eventId}/time-blocks (app/admin/osce-events/page.tsx:213)"}, "properties": {"repobilityId": "b38b351b1d9d1b1e", "scanner": "scanner-primary", "fingerprint": "59db65a7457b087c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-36ebb0bda20210b4", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/osce/events/${id} (app/admin/osce-events/page.tsx:225)"}, "properties": {"repobilityId": "41b73221edb12853", "scanner": "scanner-primary", "fingerprint": "36ebb0bda20210b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c309fc76d2db9d5d", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce/events/${eventId} (app/admin/osce-events/[id]/page.tsx:152)"}, "properties": {"repobilityId": "33373be01562f76e", "scanner": "scanner-primary", "fingerprint": "c309fc76d2db9d5d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eaaf8f77fe9c5cbb", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/osce/events/${eventId}/test-data (app/admin/osce-events/[id]/page.tsx:187)"}, "properties": {"repobilityId": "9ed288e0a9c3365b", "scanner": "scanner-primary", "fingerprint": "eaaf8f77fe9c5cbb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a3d7fea29c66cf1e", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce/events/${eventId}/observers (app/admin/osce-events/[id]/page.tsx:382)"}, "properties": {"repobilityId": "7e1a378b826d37b9", "scanner": "scanner-primary", "fingerprint": "a3d7fea29c66cf1e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6f7de7a153c9bcf2", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce/events/${eventId}/time-blocks (app/admin/osce-events/[id]/page.tsx:393)"}, "properties": {"repobilityId": "f361a5c34a2a2ea2", "scanner": "scanner-primary", "fingerprint": "6f7de7a153c9bcf2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0e2d010a979d80dc", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/osce/events/${eventId}/observers/${observerId} (app/admin/osce-events/[id]/page.tsx:408)"}, "properties": {"repobilityId": "b8aad4d8eacbd80e", "scanner": "scanner-primary", "fingerprint": "0e2d010a979d80dc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-892b60053e3b6389", "level": "error", "message": {"text": "Dangling fetch: PUT /api/osce/events/${eventId}/observers/${showEditModal} (app/admin/osce-events/[id]/page.tsx:423)"}, "properties": {"repobilityId": "71fbd67d4923bf62", "scanner": "scanner-primary", "fingerprint": "892b60053e3b6389", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5a68a6112ad3d150", "level": "error", "message": {"text": "Dangling fetch: POST /api/osce/events/${eventId}/observers (app/admin/osce-events/[id]/page.tsx:445)"}, "properties": {"repobilityId": "7d1ce33d6c1993d7", "scanner": "scanner-primary", "fingerprint": "5a68a6112ad3d150", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9d8d786d3cbcd751", "level": "error", "message": {"text": "Dangling fetch: POST /api/osce/events/${eventId}/observers (app/admin/osce-events/[id]/page.tsx:500)"}, "properties": {"repobilityId": "b7e1199114d61f91", "scanner": "scanner-primary", "fingerprint": "9d8d786d3cbcd751", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-95ced29ded3f6247", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/osce/events/${eventId}/observers/${obs.id} (app/admin/osce-events/[id]/page.tsx:528)"}, "properties": {"repobilityId": "a770110b415a9ac9", "scanner": "scanner-primary", "fingerprint": "95ced29ded3f6247", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-67287fe34743cc63", "level": "error", "message": {"text": "Dangling fetch: PUT /api/osce/events/${eventId}/observers/${observerId} (app/admin/osce-events/[id]/page.tsx:571)"}, "properties": {"repobilityId": "4320d05c7f2026bc", "scanner": "scanner-primary", "fingerprint": "67287fe34743cc63", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ead157593a6c8f49", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce/events/${eventId}/schedule (app/admin/osce-events/[id]/page.tsx:946)"}, "properties": {"repobilityId": "d4c4d9787d213a2f", "scanner": "scanner-primary", "fingerprint": "ead157593a6c8f49", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1088a3158dc0991b", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce/events/${eventId}/student-agencies (app/admin/osce-events/[id]/page.tsx:1078)"}, "properties": {"repobilityId": "59ae0a9ff7d9eb18", "scanner": "scanner-primary", "fingerprint": "1088a3158dc0991b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e0ee66c07e041e6", "level": "error", "message": {"text": "Dangling fetch: POST /api/osce/events/${eventId}/student-agencies (app/admin/osce-events/[id]/page.tsx:1095)"}, "properties": {"repobilityId": "3e18308d89e2b8fb", "scanner": "scanner-primary", "fingerprint": "6e0ee66c07e041e6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eb385e70a62c8c30", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/osce/events/${eventId}/student-agencies (app/admin/osce-events/[id]/page.tsx:1109)"}, "properties": {"repobilityId": "e597425b93c7dcee", "scanner": "scanner-primary", "fingerprint": "eb385e70a62c8c30", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-15c9ca58b8f52b2c", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce/events/${eventId}/time-blocks (app/admin/osce-events/[id]/page.tsx:1245)"}, "properties": {"repobilityId": "85e46e751c97b3fd", "scanner": "scanner-primary", "fingerprint": "15c9ca58b8f52b2c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-03fa0ee6892e335d", "level": "error", "message": {"text": "Dangling fetch: POST /api/osce/events/${eventId}/time-blocks (app/admin/osce-events/[id]/page.tsx:1262)"}, "properties": {"repobilityId": "8069c7464cc023ef", "scanner": "scanner-primary", "fingerprint": "03fa0ee6892e335d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ec2b50f970f55d25", "level": "error", "message": {"text": "Dangling fetch: PUT /api/osce/events/${eventId}/time-blocks (app/admin/osce-events/[id]/page.tsx:1288)"}, "properties": {"repobilityId": "57beb99370f8bf38", "scanner": "scanner-primary", "fingerprint": "ec2b50f970f55d25", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f4409e1f45b21095", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/osce/events/${eventId}/time-blocks?id=${blockId} (app/admin/osce-events/[id]/page.tsx:1310)"}, "properties": {"repobilityId": "2dfdcf517c58e89a", "scanner": "scanner-primary", "fingerprint": "f4409e1f45b21095", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-075b5e2b8a728fd0", "level": "error", "message": {"text": "Dangling fetch: POST /api/osce/events/${eventId}/time-blocks (app/admin/osce-events/[id]/page.tsx:1347)"}, "properties": {"repobilityId": "9f179519d34e90da", "scanner": "scanner-primary", "fingerprint": "075b5e2b8a728fd0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cb77969c610a3178", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce/events/${eventId}/schedule (app/admin/osce-events/[id]/page.tsx:1544)"}, "properties": {"repobilityId": "506f5aa12b4d899a", "scanner": "scanner-primary", "fingerprint": "cb77969c610a3178", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-96fb9f10692081f6", "level": "error", "message": {"text": "Dangling fetch: POST /api/osce/events/${eventId}/students/reorder (app/admin/osce-events/[id]/page.tsx:1575)"}, "properties": {"repobilityId": "4f250831ce4102f0", "scanner": "scanner-primary", "fingerprint": "96fb9f10692081f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-82e342cbf338b371", "level": "error", "message": {"text": "Dangling fetch: PUT /api/osce/events/${event.id} (app/admin/osce-events/[id]/page.tsx:1679)"}, "properties": {"repobilityId": "df529231788d8b63", "scanner": "scanner-primary", "fingerprint": "82e342cbf338b371", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-06583f99a7409758", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/osce/events/${event.id} (app/admin/osce-events/[id]/page.tsx:1712)"}, "properties": {"repobilityId": "34b4dfc0f26b0d56", "scanner": "scanner-primary", "fingerprint": "06583f99a7409758", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-006aa53f6d83d6a4", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce/events/${eventId}/checklist (app/admin/osce-events/[id]/checklist/page.tsx:155)"}, "properties": {"repobilityId": "ad1903671308193d", "scanner": "scanner-primary", "fingerprint": "006aa53f6d83d6a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-40bf2e44e41c9701", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce/events/${eventId} (app/admin/osce-events/[id]/checklist/page.tsx:156)"}, "properties": {"repobilityId": "0175fc01edc29384", "scanner": "scanner-primary", "fingerprint": "40bf2e44e41c9701", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a2278cf7e3f6f7e6", "level": "error", "message": {"text": "Dangling fetch: PUT /api/osce/events/${eventId}/checklist (app/admin/osce-events/[id]/checklist/page.tsx:189)"}, "properties": {"repobilityId": "2e560969b9e4fe62", "scanner": "scanner-primary", "fingerprint": "a2278cf7e3f6f7e6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b056fd5b7566d70d", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/access-requests/page.tsx:331)"}, "properties": {"repobilityId": "8b7e2e9767a0fed0", "scanner": "scanner-primary", "fingerprint": "b056fd5b7566d70d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b89751360c904cc3", "level": "error", "message": {"text": "Dangling fetch: GET /api/access-requests?status=${statusFilter} (app/admin/access-requests/page.tsx:349)"}, "properties": {"repobilityId": "fd74f51bfbdf29f3", "scanner": "scanner-primary", "fingerprint": "b89751360c904cc3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-600274bb1e1b7238", "level": "error", "message": {"text": "Dangling fetch: PUT /api/access-requests/${id} (app/admin/access-requests/page.tsx:376)"}, "properties": {"repobilityId": "74e5e29c5e5f70cb", "scanner": "scanner-primary", "fingerprint": "600274bb1e1b7238", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-57f552c9946097c3", "level": "error", "message": {"text": "Dangling fetch: PUT /api/access-requests/${denyTarget.id} (app/admin/access-requests/page.tsx:398)"}, "properties": {"repobilityId": "f972dbf1b953a732", "scanner": "scanner-primary", "fingerprint": "57f552c9946097c3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c08f864d47236880", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/data-export/page.tsx:178)"}, "properties": {"repobilityId": "c6270d03d2df7f50", "scanner": "scanner-primary", "fingerprint": "c08f864d47236880", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd895bf0e6ba9094", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=false&include_archived=true (app/admin/data-export/page.tsx:202)"}, "properties": {"repobilityId": "3df00f87e7902360", "scanner": "scanner-primary", "fingerprint": "cd895bf0e6ba9094", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01f334da6552c636", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/data-export (app/admin/data-export/page.tsx:216)"}, "properties": {"repobilityId": "e9c69f3d8bed650f", "scanner": "scanner-primary", "fingerprint": "01f334da6552c636", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01d2a8aecc0cf7fd", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/data-export?${params} (app/admin/data-export/page.tsx:244)"}, "properties": {"repobilityId": "b4ffd57d8f1e8a4f", "scanner": "scanner-primary", "fingerprint": "01d2a8aecc0cf7fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-521c01ef2e73c525", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/feedback (app/admin/feedback/page.tsx:137)"}, "properties": {"repobilityId": "feed7361cb0eae18", "scanner": "scanner-primary", "fingerprint": "521c01ef2e73c525", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-54454a39ae9c8234", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/feedback (app/admin/feedback/page.tsx:156)"}, "properties": {"repobilityId": "f35b2c93fe36259b", "scanner": "scanner-primary", "fingerprint": "54454a39ae9c8234", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4541e465a60a3e7d", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/feedback (app/admin/feedback/page.tsx:175)"}, "properties": {"repobilityId": "86be0e26f6305d22", "scanner": "scanner-primary", "fingerprint": "4541e465a60a3e7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-514375d39f108476", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/feedback/import (app/admin/feedback/page.tsx:344)"}, "properties": {"repobilityId": "c21dcb129e59513c", "scanner": "scanner-primary", "fingerprint": "514375d39f108476", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5de0c74171dd3d45", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/users/page.tsx:67)"}, "properties": {"repobilityId": "cc3f854c6585436d", "scanner": "scanner-primary", "fingerprint": "5de0c74171dd3d45", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-59ee055ad1513f62", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/users?activeOnly=false (app/admin/users/page.tsx:86)"}, "properties": {"repobilityId": "69881ed15795db36", "scanner": "scanner-primary", "fingerprint": "59ee055ad1513f62", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3f0f076d6fe37f8b", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/users (app/admin/users/page.tsx:113)"}, "properties": {"repobilityId": "1f2a664c9e1302ee", "scanner": "scanner-primary", "fingerprint": "3f0f076d6fe37f8b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9409303ddd4ea056", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/users (app/admin/users/page.tsx:134)"}, "properties": {"repobilityId": "d5841198145f88ac", "scanner": "scanner-primary", "fingerprint": "9409303ddd4ea056", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-77e82d2f8989d8b4", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/users (app/admin/users/page.tsx:155)"}, "properties": {"repobilityId": "61e3353aa74f570d", "scanner": "scanner-primary", "fingerprint": "77e82d2f8989d8b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-821ebf8b3494269e", "level": "error", "message": {"text": "Dangling fetch: GET /api/academics/cohorts (app/admin/users/page.tsx:176)"}, "properties": {"repobilityId": "a557d233df14bf46", "scanner": "scanner-primary", "fingerprint": "821ebf8b3494269e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-562f29afe386a782", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/users (app/admin/users/page.tsx:194)"}, "properties": {"repobilityId": "3edd7dd880917dee", "scanner": "scanner-primary", "fingerprint": "562f29afe386a782", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-88414b5a3699ab95", "level": "error", "message": {"text": "Dangling fetch: GET /api/timer-display (app/admin/timer-displays/page.tsx:69)"}, "properties": {"repobilityId": "e6d90768151e7fb2", "scanner": "scanner-primary", "fingerprint": "88414b5a3699ab95", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-29bd3b4e2966e234", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/locations?type=room (app/admin/timer-displays/page.tsx:70)"}, "properties": {"repobilityId": "e022c726e44062d9", "scanner": "scanner-primary", "fingerprint": "29bd3b4e2966e234", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-17dd11a5eabf5fa2", "level": "error", "message": {"text": "Dangling fetch: POST /api/timer-display (app/admin/timer-displays/page.tsx:102)"}, "properties": {"repobilityId": "3a7f3ced5464b1e3", "scanner": "scanner-primary", "fingerprint": "17dd11a5eabf5fa2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dad8fa3f7f19f7b5", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/timer-display (app/admin/timer-displays/page.tsx:131)"}, "properties": {"repobilityId": "2e2aebf697b9c0c0", "scanner": "scanner-primary", "fingerprint": "dad8fa3f7f19f7b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83895976afe413a4", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/timer-display?id=${tokenId} (app/admin/timer-displays/page.tsx:155)"}, "properties": {"repobilityId": "776d4f6926ff15a3", "scanner": "scanner-primary", "fingerprint": "83895976afe413a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0fc782b0c085fbfd", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/users?role=student&limit=500 (app/admin/alumni/page.tsx:571)"}, "properties": {"repobilityId": "ad5c6950381e6f49", "scanner": "scanner-primary", "fingerprint": "0fc782b0c085fbfd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b6a2276aa531252b", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/alumni/page.tsx:937)"}, "properties": {"repobilityId": "c4bc06e13ff00679", "scanner": "scanner-primary", "fingerprint": "b6a2276aa531252b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ce5ce47a9953fa31", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/stats (app/admin/alumni/page.tsx:953)"}, "properties": {"repobilityId": "d58122d64b7dc2f9", "scanner": "scanner-primary", "fingerprint": "ce5ce47a9953fa31", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3b91a9a49fe94ed0", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/broadcast (app/admin/alumni/page.tsx:964)"}, "properties": {"repobilityId": "9199111013706c4d", "scanner": "scanner-primary", "fingerprint": "3b91a9a49fe94ed0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f7f804d736ef972c", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/alumni?${params.toString()} (app/admin/alumni/page.tsx:983)"}, "properties": {"repobilityId": "fe5cfceb36224f54", "scanner": "scanner-primary", "fingerprint": "f7f804d736ef972c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3e5d795a2bb2858b", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/alumni/${editRecord.id} (app/admin/alumni/page.tsx:1008)"}, "properties": {"repobilityId": "12c2087db6319783", "scanner": "scanner-primary", "fingerprint": "3e5d795a2bb2858b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-52a5896534a626c0", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/alumni (app/admin/alumni/page.tsx:1026)"}, "properties": {"repobilityId": "1ce8d8d8beb7addc", "scanner": "scanner-primary", "fingerprint": "52a5896534a626c0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3c4bc0566c6fcf29", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/alumni (app/admin/alumni/page.tsx:1043)"}, "properties": {"repobilityId": "d830faeaed2117da", "scanner": "scanner-primary", "fingerprint": "3c4bc0566c6fcf29", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fe61d4f0b1ef4ff0", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/alumni/${id} (app/admin/alumni/page.tsx:1061)"}, "properties": {"repobilityId": "77fb318254a16e2a", "scanner": "scanner-primary", "fingerprint": "fe61d4f0b1ef4ff0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-480e728c29ec434f", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/scenarios/page.tsx:35)"}, "properties": {"repobilityId": "0a98775dcdd6800d", "scanner": "scanner-primary", "fingerprint": "480e728c29ec434f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f77bfd59916f9853", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/scenarios/audit (app/admin/scenarios/audit/page.tsx:268)"}, "properties": {"repobilityId": "41d4f072a6b5f650", "scanner": "scanner-primary", "fingerprint": "f77bfd59916f9853", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-722dc12fc2511721", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/scenarios/generate-content?pending_review=true (app/admin/scenarios/audit/page.tsx:269)"}, "properties": {"repobilityId": "07f47b5e1af42489", "scanner": "scanner-primary", "fingerprint": "722dc12fc2511721", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa49e5185a5196e8", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/scenarios/auto-fill (app/admin/scenarios/audit/page.tsx:291)"}, "properties": {"repobilityId": "dac2b339043c669a", "scanner": "scanner-primary", "fingerprint": "fa49e5185a5196e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4ed9459d9174c5b0", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/scenarios/auto-fill (app/admin/scenarios/audit/page.tsx:314)"}, "properties": {"repobilityId": "9d633916f5fb0cb2", "scanner": "scanner-primary", "fingerprint": "4ed9459d9174c5b0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a1b38e02c6707b7", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/scenarios/generate-content (app/admin/scenarios/audit/page.tsx:362)"}, "properties": {"repobilityId": "48a1581492bd3cfc", "scanner": "scanner-primary", "fingerprint": "3a1b38e02c6707b7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3cccc5f27c5fd38c", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/scenarios/generate-content (app/admin/scenarios/audit/page.tsx:393)"}, "properties": {"repobilityId": "a642dbb97a9da8bb", "scanner": "scanner-primary", "fingerprint": "3cccc5f27c5fd38c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76eee9b225c1e168", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/scenarios/generate-content (app/admin/scenarios/audit/page.tsx:478)"}, "properties": {"repobilityId": "3e3313605946e858", "scanner": "scanner-primary", "fingerprint": "76eee9b225c1e168", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f0e538e47da0e4bb", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/scenarios/transform (app/admin/scenarios/transform/page.tsx:153)"}, "properties": {"repobilityId": "b6af37fa5a32a864", "scanner": "scanner-primary", "fingerprint": "f0e538e47da0e4bb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5ef8a5f10394bffd", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/scenarios/transform (app/admin/scenarios/transform/page.tsx:207)"}, "properties": {"repobilityId": "904727f8b8bc9978", "scanner": "scanner-primary", "fingerprint": "5ef8a5f10394bffd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-82259bc6919a1f19", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/scenarios/bulk-import/page.tsx:230)"}, "properties": {"repobilityId": "4b22076166093d72", "scanner": "scanner-primary", "fingerprint": "82259bc6919a1f19", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-defc0488fc7c598c", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/scenarios/bulk-import (app/admin/scenarios/bulk-import/page.tsx:264)"}, "properties": {"repobilityId": "90656886615e7fee", "scanner": "scanner-primary", "fingerprint": "defc0488fc7c598c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-35d783f61ef239cd", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/scenarios/bulk-import/commit (app/admin/scenarios/bulk-import/page.tsx:316)"}, "properties": {"repobilityId": "e05e0d99942ac4fd", "scanner": "scanner-primary", "fingerprint": "35d783f61ef239cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-89ce7cdc938f3117", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/scenarios/transform (app/admin/scenarios/bulk-import/page.tsx:398)"}, "properties": {"repobilityId": "99d8609dcc06fa55", "scanner": "scanner-primary", "fingerprint": "89ce7cdc938f3117", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0c306616600ad02c", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/scenarios/transform (app/admin/scenarios/bulk-import/page.tsx:417)"}, "properties": {"repobilityId": "66f536d66d38619f", "scanner": "scanner-primary", "fingerprint": "0c306616600ad02c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-05e85c23abb1c5c2", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/scenarios/cleanup/page.tsx:89)"}, "properties": {"repobilityId": "6f03c13250b05da1", "scanner": "scanner-primary", "fingerprint": "05e85c23abb1c5c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2f393455ccdbd069", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/scenarios/audit (app/admin/scenarios/cleanup/page.tsx:101)"}, "properties": {"repobilityId": "b3a63289c0642c1d", "scanner": "scanner-primary", "fingerprint": "2f393455ccdbd069", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6cec730e1b3027a3", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/scenarios/extract-demographics (app/admin/scenarios/cleanup/page.tsx:130)"}, "properties": {"repobilityId": "39d24fe4dae672fb", "scanner": "scanner-primary", "fingerprint": "6cec730e1b3027a3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-98a33b3ca8655a44", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/scenarios/extract-demographics (app/admin/scenarios/cleanup/page.tsx:158)"}, "properties": {"repobilityId": "2cf65968f524547b", "scanner": "scanner-primary", "fingerprint": "98a33b3ca8655a44", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ee8e125ad0c24411", "level": "error", "message": {"text": "Dangling fetch: GET /api/volunteer/events (app/admin/volunteer-events/page.tsx:183)"}, "properties": {"repobilityId": "307cc7134de81e26", "scanner": "scanner-primary", "fingerprint": "ee8e125ad0c24411", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0721d91424b26003", "level": "error", "message": {"text": "Dangling fetch: GET /api/volunteer/invites (app/admin/volunteer-events/page.tsx:184)"}, "properties": {"repobilityId": "9ad5f2dfba25be05", "scanner": "scanner-primary", "fingerprint": "0721d91424b26003", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-774e6ef67972745d", "level": "error", "message": {"text": "Dangling fetch: POST /api/volunteer/events (app/admin/volunteer-events/page.tsx:304)"}, "properties": {"repobilityId": "927af3eeca7a09ba", "scanner": "scanner-primary", "fingerprint": "774e6ef67972745d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-007d84541de4902e", "level": "error", "message": {"text": "Dangling fetch: POST /api/volunteer/events (app/admin/volunteer-events/page.tsx:320)"}, "properties": {"repobilityId": "5c680db51c5b04f8", "scanner": "scanner-primary", "fingerprint": "007d84541de4902e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b0b50a192ecb0dcf", "level": "error", "message": {"text": "Dangling fetch: POST /api/volunteer/events (app/admin/volunteer-events/page.tsx:355)"}, "properties": {"repobilityId": "12240994ed3ac9de", "scanner": "scanner-primary", "fingerprint": "b0b50a192ecb0dcf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cfdd5d0b6f9634c5", "level": "error", "message": {"text": "Dangling fetch: PUT /api/volunteer/events/${editingEvent.id} (app/admin/volunteer-events/page.tsx:438)"}, "properties": {"repobilityId": "1e23b110fefc14cc", "scanner": "scanner-primary", "fingerprint": "cfdd5d0b6f9634c5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9e96c19a63844bfd", "level": "error", "message": {"text": "Dangling fetch: GET /api/volunteer/events/${event.id} (app/admin/volunteer-events/page.tsx:484)"}, "properties": {"repobilityId": "e49a0b90a077bac9", "scanner": "scanner-primary", "fingerprint": "9e96c19a63844bfd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ecfcb8e3a9b6fa95", "level": "error", "message": {"text": "Dangling fetch: POST /api/volunteer/events/${correctionEvent.id}/send-correction (app/admin/volunteer-events/page.tsx:525)"}, "properties": {"repobilityId": "40008307da6e7b73", "scanner": "scanner-primary", "fingerprint": "ecfcb8e3a9b6fa95", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b5063bc91fd9ddc5", "level": "error", "message": {"text": "Dangling fetch: POST /api/volunteer/events (app/admin/volunteer-events/page.tsx:556)"}, "properties": {"repobilityId": "5eff41cf512f3cad", "scanner": "scanner-primary", "fingerprint": "b5063bc91fd9ddc5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-85605b3d734675a8", "level": "error", "message": {"text": "Dangling fetch: POST /api/volunteer/events (app/admin/volunteer-events/page.tsx:587)"}, "properties": {"repobilityId": "1919036166dc161b", "scanner": "scanner-primary", "fingerprint": "85605b3d734675a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7cdbba4b4dedf3e8", "level": "error", "message": {"text": "Dangling fetch: POST /api/volunteer/invites (app/admin/volunteer-events/page.tsx:625)"}, "properties": {"repobilityId": "f98b43d12fa9d395", "scanner": "scanner-primary", "fingerprint": "7cdbba4b4dedf3e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2bfad176d72c80e3", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/volunteer/events/${id} (app/admin/volunteer-events/page.tsx:659)"}, "properties": {"repobilityId": "fe6fe61cbe13f79f", "scanner": "scanner-primary", "fingerprint": "2bfad176d72c80e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d35ab86ea9b3c7c0", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/volunteer/invites?id=${id} (app/admin/volunteer-events/page.tsx:672)"}, "properties": {"repobilityId": "5decdf5a29323233", "scanner": "scanner-primary", "fingerprint": "d35ab86ea9b3c7c0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1b83b62d025529c6", "level": "error", "message": {"text": "Dangling fetch: GET /api/volunteer/lab-tokens (app/admin/volunteer-events/results/page.tsx:125)"}, "properties": {"repobilityId": "c7fea1bf6517c024", "scanner": "scanner-primary", "fingerprint": "1b83b62d025529c6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6ed47d5842c106e8", "level": "error", "message": {"text": "Dangling fetch: POST /api/volunteer/lab-tokens (app/admin/volunteer-events/results/page.tsx:148)"}, "properties": {"repobilityId": "2e0cdaf9d34206ec", "scanner": "scanner-primary", "fingerprint": "6ed47d5842c106e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-001b29772502fc8e", "level": "error", "message": {"text": "Dangling fetch: POST /api/volunteer/lab-tokens/bulk (app/admin/volunteer-events/results/page.tsx:174)"}, "properties": {"repobilityId": "5848d1758ec1f385", "scanner": "scanner-primary", "fingerprint": "001b29772502fc8e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1a05bdbefaaf2f5c", "level": "error", "message": {"text": "Dangling fetch: GET /api/volunteer/results${params} (app/admin/volunteer-events/results/page.tsx:203)"}, "properties": {"repobilityId": "4754c31f987966fb", "scanner": "scanner-primary", "fingerprint": "1a05bdbefaaf2f5c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-02a3411bd07f20e2", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/volunteer/register?id=${regId} (app/admin/volunteer-events/results/page.tsx:236)"}, "properties": {"repobilityId": "30368be9f09e9336", "scanner": "scanner-primary", "fingerprint": "02a3411bd07f20e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c4db53b93da0a7e", "level": "error", "message": {"text": "Dangling fetch: PUT /api/volunteer/register?id=${editingReg.id} (app/admin/volunteer-events/results/page.tsx:262)"}, "properties": {"repobilityId": "96e1cb5e2de70ffb", "scanner": "scanner-primary", "fingerprint": "2c4db53b93da0a7e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2836f825ede5dff7", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/broadcast/page.tsx:329)"}, "properties": {"repobilityId": "7d158ac85bec3fee", "scanner": "scanner-primary", "fingerprint": "2836f825ede5dff7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-edeba180efa448af", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/broadcast (app/admin/broadcast/page.tsx:347)"}, "properties": {"repobilityId": "d0cf7de2af655467", "scanner": "scanner-primary", "fingerprint": "edeba180efa448af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f3511022c93fb9e9", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/broadcast/history?limit=20 (app/admin/broadcast/page.tsx:362)"}, "properties": {"repobilityId": "009b5df081271cd4", "scanner": "scanner-primary", "fingerprint": "f3511022c93fb9e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b24a445273d4fba7", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/broadcast (app/admin/broadcast/page.tsx:466)"}, "properties": {"repobilityId": "1042dc3fb15e9ad1", "scanner": "scanner-primary", "fingerprint": "b24a445273d4fba7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5f537e6c500d0ef", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/open-labs/page.tsx:176)"}, "properties": {"repobilityId": "da52d3b8e3215abd", "scanner": "scanner-primary", "fingerprint": "c5f537e6c500d0ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e0057621fa4399f3", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/open-labs (app/admin/open-labs/page.tsx:192)"}, "properties": {"repobilityId": "5e63ca775bcd6255", "scanner": "scanner-primary", "fingerprint": "e0057621fa4399f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b2f3c3637a192f03", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/open-labs (app/admin/open-labs/page.tsx:217)"}, "properties": {"repobilityId": "b88b570cf7ed2bcc", "scanner": "scanner-primary", "fingerprint": "b2f3c3637a192f03", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4e2721862eb7aba", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/open-labs (app/admin/open-labs/page.tsx:239)"}, "properties": {"repobilityId": "ab1733f6a1c70707", "scanner": "scanner-primary", "fingerprint": "c4e2721862eb7aba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9851e04e2abe0630", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/open-labs/qr-code/page.tsx:34)"}, "properties": {"repobilityId": "ba8691849bbce91c", "scanner": "scanner-primary", "fingerprint": "9851e04e2abe0630", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f9f6b7de37568aa7", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/ferpa?${params} (app/admin/ferpa-compliance/page.tsx:108)"}, "properties": {"repobilityId": "e4dd4ba7bddf16a9", "scanner": "scanner-primary", "fingerprint": "f9f6b7de37568aa7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-18f5f862d9301a35", "level": "error", "message": {"text": "Dangling fetch: PUT /api/ferpa/release (app/admin/ferpa-compliance/page.tsx:320)"}, "properties": {"repobilityId": "e78e70dcb68cd515", "scanner": "scanner-primary", "fingerprint": "18f5f862d9301a35", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6791f7fa5d7a5042", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/ferpa (app/admin/ferpa-compliance/page.tsx:632)"}, "properties": {"repobilityId": "043b349f921fa66d", "scanner": "scanner-primary", "fingerprint": "6791f7fa5d7a5042", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cbb1df811a98229f", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/webhooks/${webhook.id}/logs?page=${page}&limit=25 (app/admin/webhooks/page.tsx:419)"}, "properties": {"repobilityId": "e244e2cf4a2b5d9b", "scanner": "scanner-primary", "fingerprint": "cbb1df811a98229f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5aa4cdd2a295aa27", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/webhooks/${webhook.id}/test (app/admin/webhooks/page.tsx:441)"}, "properties": {"repobilityId": "12a792ec0f5aff28", "scanner": "scanner-primary", "fingerprint": "5aa4cdd2a295aa27", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c26b708bfdf9db4f", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/webhooks/page.tsx:786)"}, "properties": {"repobilityId": "a3afa9e52ee2a393", "scanner": "scanner-primary", "fingerprint": "c26b708bfdf9db4f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f59d1ce619b07b7c", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/webhooks (app/admin/webhooks/page.tsx:804)"}, "properties": {"repobilityId": "1205db48fe320e33", "scanner": "scanner-primary", "fingerprint": "f59d1ce619b07b7c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1f8c6909333e794f", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/webhooks (app/admin/webhooks/page.tsx:813)"}, "properties": {"repobilityId": "cb381d3b3a618f84", "scanner": "scanner-primary", "fingerprint": "1f8c6909333e794f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-57c86f3af183c8c8", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/webhooks/${id} (app/admin/webhooks/page.tsx:826)"}, "properties": {"repobilityId": "d5d9f7c92e2ed274", "scanner": "scanner-primary", "fingerprint": "57c86f3af183c8c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-28a6de5d0ad38581", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/webhooks/${wh.id} (app/admin/webhooks/page.tsx:842)"}, "properties": {"repobilityId": "1873f23642ec1493", "scanner": "scanner-primary", "fingerprint": "28a6de5d0ad38581", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8de5c0aa9f22fb86", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/webhooks/${wh.id} (app/admin/webhooks/page.tsx:857)"}, "properties": {"repobilityId": "dfd15e2041dba067", "scanner": "scanner-primary", "fingerprint": "8de5c0aa9f22fb86", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e42621c10cbbbdee", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce/events (app/admin/osce-observers/page.tsx:13)"}, "properties": {"repobilityId": "782dd19b42939cf5", "scanner": "scanner-primary", "fingerprint": "e42621c10cbbbdee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b145851147b5d04", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/skill-drills/import (app/admin/skill-drills/import/page.tsx:110)"}, "properties": {"repobilityId": "0c137cecc060df6d", "scanner": "scanner-primary", "fingerprint": "9b145851147b5d04", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fc1ad7108e735599", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/rubrics/page.tsx:658)"}, "properties": {"repobilityId": "4386ab6ef13d5f98", "scanner": "scanner-primary", "fingerprint": "fc1ad7108e735599", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-78fc729f11c1f4f8", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/rubrics (app/admin/rubrics/page.tsx:681)"}, "properties": {"repobilityId": "f9e4b1be344d84a0", "scanner": "scanner-primary", "fingerprint": "78fc729f11c1f4f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-12ffd94f8515767c", "level": "error", "message": {"text": "Dangling fetch: GET /api/scenarios (app/admin/rubrics/page.tsx:695)"}, "properties": {"repobilityId": "50578dd400468986", "scanner": "scanner-primary", "fingerprint": "12ffd94f8515767c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd399adf173c8a45", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/skill-sheets/import/page.tsx:77)"}, "properties": {"repobilityId": "48c913af5f71875a", "scanner": "scanner-primary", "fingerprint": "cd399adf173c8a45", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b16234868a080ac", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/skill-sheets/counts (app/admin/skill-sheets/import/page.tsx:95)"}, "properties": {"repobilityId": "ec03c33871ff92b7", "scanner": "scanner-primary", "fingerprint": "0b16234868a080ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2a2d9bb68f4f8ac3", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/skill-sheets/seed-canonical (app/admin/skill-sheets/import/page.tsx:117)"}, "properties": {"repobilityId": "6e2a67e01f9d3769", "scanner": "scanner-primary", "fingerprint": "2a2d9bb68f4f8ac3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ba517c9ad2b0899e", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/skill-sheets/seed-aliases (app/admin/skill-sheets/import/page.tsx:136)"}, "properties": {"repobilityId": "19b7238b68f32d8a", "scanner": "scanner-primary", "fingerprint": "ba517c9ad2b0899e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1860475264f14f39", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/skill-sheets/import (app/admin/skill-sheets/import/page.tsx:155)"}, "properties": {"repobilityId": "e85e815745ca1e09", "scanner": "scanner-primary", "fingerprint": "1860475264f14f39", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-43e544a722b4d325", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/settings/page.tsx:59)"}, "properties": {"repobilityId": "05d6605fb2dd3d34", "scanner": "scanner-primary", "fingerprint": "43e544a722b4d325", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4804e637f04e42b3", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/stats (app/admin/settings/page.tsx:78)"}, "properties": {"repobilityId": "8052503337fe39bc", "scanner": "scanner-primary", "fingerprint": "4804e637f04e42b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e0679845dd3cd11", "level": "error", "message": {"text": "Dangling fetch: GET /api/system-settings/${f.key} (app/admin/settings/page.tsx:329)"}, "properties": {"repobilityId": "e05a0c36c9375332", "scanner": "scanner-primary", "fingerprint": "5e0679845dd3cd11", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e4433100b50265fa", "level": "error", "message": {"text": "Dangling fetch: PUT /api/system-settings/${key} (app/admin/settings/page.tsx:354)"}, "properties": {"repobilityId": "20a48ce89a2b12b5", "scanner": "scanner-primary", "fingerprint": "e4433100b50265fa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-08a4cba577538ce1", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/deep-links/page.tsx:123)"}, "properties": {"repobilityId": "2fac74c5779497ef", "scanner": "scanner-primary", "fingerprint": "08a4cba577538ce1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-41c97c0edd9d62a1", "level": "error", "message": {"text": "Dangling fetch: GET /api/deep-links (app/admin/deep-links/page.tsx:145)"}, "properties": {"repobilityId": "ae238c62eb6fdf40", "scanner": "scanner-primary", "fingerprint": "41c97c0edd9d62a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1b1170a45cd51504", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/deep-links (app/admin/deep-links/page.tsx:174)"}, "properties": {"repobilityId": "bd39def8d991f807", "scanner": "scanner-primary", "fingerprint": "1b1170a45cd51504", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bae27a3f92a398df", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/deep-links (app/admin/deep-links/page.tsx:199)"}, "properties": {"repobilityId": "f167f2e3e64f2ab8", "scanner": "scanner-primary", "fingerprint": "bae27a3f92a398df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3d0ba571a6b2830f", "level": "error", "message": {"text": "Dangling fetch: POST /api/deep-links (app/admin/deep-links/page.tsx:230)"}, "properties": {"repobilityId": "6b0fb65243284d39", "scanner": "scanner-primary", "fingerprint": "3d0ba571a6b2830f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7a5ba9f2d8f86af8", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/certifications/page.tsx:334)"}, "properties": {"repobilityId": "edb5080ffe04d5d7", "scanner": "scanner-primary", "fingerprint": "7a5ba9f2d8f86af8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e875c123d09ea7aa", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/certifications/import (app/admin/certifications/page.tsx:462)"}, "properties": {"repobilityId": "006b895f605ce672", "scanner": "scanner-primary", "fingerprint": "e875c123d09ea7aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0814e6f83fe70b80", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/certifications/compliance/page.tsx:59)"}, "properties": {"repobilityId": "65afa7e92480e8b0", "scanner": "scanner-primary", "fingerprint": "0814e6f83fe70b80", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a20902893bae3e7d", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/certification-compliance (app/admin/certifications/compliance/page.tsx:78)"}, "properties": {"repobilityId": "44a40baeecb0a57f", "scanner": "scanner-primary", "fingerprint": "a20902893bae3e7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-602ce2877fc4e92d", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/certifications/verification/page.tsx:161)"}, "properties": {"repobilityId": "1f5138e027b23f1b", "scanner": "scanner-primary", "fingerprint": "602ce2877fc4e92d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-24de0837e44a8f2f", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/certifications${params} (app/admin/certifications/verification/page.tsx:185)"}, "properties": {"repobilityId": "e017acefbb90df3b", "scanner": "scanner-primary", "fingerprint": "24de0837e44a8f2f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-21d7120dd39ef0f1", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/certifications/verify (app/admin/certifications/verification/page.tsx:233)"}, "properties": {"repobilityId": "087507eb62073ea0", "scanner": "scanner-primary", "fingerprint": "21d7120dd39ef0f1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4eebe2fef33138c2", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/seed-availability/page.tsx:74)"}, "properties": {"repobilityId": "66b258adcec47deb", "scanner": "scanner-primary", "fingerprint": "4eebe2fef33138c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4ec2ab4f5bfc527d", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/seed-instructor-availability (app/admin/seed-availability/page.tsx:88)"}, "properties": {"repobilityId": "e1b3974d74776c8c", "scanner": "scanner-primary", "fingerprint": "4ec2ab4f5bfc527d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b30e6d2b976d379a", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/semesters/page.tsx:100)"}, "properties": {"repobilityId": "3a32e7676a978a08", "scanner": "scanner-primary", "fingerprint": "b30e6d2b976d379a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ec8663ddd60f17ca", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/academic-years (app/admin/semesters/page.tsx:115)"}, "properties": {"repobilityId": "1f6c00e6751ab60c", "scanner": "scanner-primary", "fingerprint": "ec8663ddd60f17ca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e9fd6b95f99e3861", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/academic-years (app/admin/semesters/page.tsx:152)"}, "properties": {"repobilityId": "863588ccef98e44c", "scanner": "scanner-primary", "fingerprint": "e9fd6b95f99e3861", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cc72d3a41dd5b2f3", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/academic-years/${year.id} (app/admin/semesters/page.tsx:182)"}, "properties": {"repobilityId": "372e1e768dc67386", "scanner": "scanner-primary", "fingerprint": "cc72d3a41dd5b2f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-09483d1ec9e4af75", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/academic-years/${year.id} (app/admin/semesters/page.tsx:203)"}, "properties": {"repobilityId": "8b055df7f8414901", "scanner": "scanner-primary", "fingerprint": "09483d1ec9e4af75", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5035815b79870f59", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters/${semester.id} (app/admin/semesters/page.tsx:488)"}, "properties": {"repobilityId": "65996a53cb46ec13", "scanner": "scanner-primary", "fingerprint": "5035815b79870f59", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9640dc0eb647b151", "level": "error", "message": {"text": "Dangling fetch: PUT /api/scheduling/planner/semesters/${semester.id} (app/admin/semesters/page.tsx:529)"}, "properties": {"repobilityId": "9eaa801107361787", "scanner": "scanner-primary", "fingerprint": "9640dc0eb647b151", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1862fa8b7bdb6951", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/lab-templates/apply (app/admin/lab-templates/page.tsx:572)"}, "properties": {"repobilityId": "3388269a9174622b", "scanner": "scanner-primary", "fingerprint": "1862fa8b7bdb6951", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e1d497fb3baf59ac", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/lab-templates/${templateId}/versions (app/admin/lab-templates/page.tsx:785)"}, "properties": {"repobilityId": "90273c054071d95a", "scanner": "scanner-primary", "fingerprint": "e1d497fb3baf59ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-525935d4871dcf30", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/lab-templates/${templateId}/versions (app/admin/lab-templates/page.tsx:803)"}, "properties": {"repobilityId": "8d8ee9b413276fab", "scanner": "scanner-primary", "fingerprint": "525935d4871dcf30", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-508f2063a876dd65", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/lab-templates/page.tsx:1022)"}, "properties": {"repobilityId": "a79e0622a4dfd97c", "scanner": "scanner-primary", "fingerprint": "508f2063a876dd65", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f9bcf72768b62bf7", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/scenarios?limit=100 (app/admin/lab-templates/page.tsx:1040)"}, "properties": {"repobilityId": "bf0b2467ccdb8794", "scanner": "scanner-primary", "fingerprint": "f9bcf72768b62bf7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e9660fe25ec9f5d", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/admin/lab-templates/page.tsx:1050)"}, "properties": {"repobilityId": "860659935c2a68a5", "scanner": "scanner-primary", "fingerprint": "2e9660fe25ec9f5d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0509a1d8c3ef8253", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/programs (app/admin/lab-templates/page.tsx:1060)"}, "properties": {"repobilityId": "e99b41a36499040a", "scanner": "scanner-primary", "fingerprint": "0509a1d8c3ef8253", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-adfc21f2227ede47", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/lab-templates?${params} (app/admin/lab-templates/page.tsx:1074)"}, "properties": {"repobilityId": "f18d182ab5363ce3", "scanner": "scanner-primary", "fingerprint": "adfc21f2227ede47", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c49682a70fa8ebf1", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/lab-templates/${deletingTemplate.id} (app/admin/lab-templates/page.tsx:1111)"}, "properties": {"repobilityId": "53f2e68bcf282df6", "scanner": "scanner-primary", "fingerprint": "c49682a70fa8ebf1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-19113954aa7d43a1", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/lab-templates/import (app/admin/lab-templates/import/page.tsx:292)"}, "properties": {"repobilityId": "35f5866dec0a022c", "scanner": "scanner-primary", "fingerprint": "19113954aa7d43a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-77a8c6dd240d1253", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/lab-templates/seed (app/admin/lab-templates/import/page.tsx:324)"}, "properties": {"repobilityId": "8e9dcdcd1b2e35c8", "scanner": "scanner-primary", "fingerprint": "77a8c6dd240d1253", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d0195dac0d5a5385", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/lab-templates/seed (app/admin/lab-templates/import/page.tsx:360)"}, "properties": {"repobilityId": "375693de72c10af5", "scanner": "scanner-primary", "fingerprint": "d0195dac0d5a5385", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dab425fc9096f755", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce/guest-tokens (app/admin/osce-tokens/page.tsx:31)"}, "properties": {"repobilityId": "0819dc1ceb0285cf", "scanner": "scanner-primary", "fingerprint": "dab425fc9096f755", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d0ad66e06c869457", "level": "error", "message": {"text": "Dangling fetch: POST /api/osce/guest-tokens (app/admin/osce-tokens/page.tsx:42)"}, "properties": {"repobilityId": "bdcb880e5e187655", "scanner": "scanner-primary", "fingerprint": "d0ad66e06c869457", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5b47935a1a4680fc", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/osce/guest-tokens?id=${id} (app/admin/osce-tokens/page.tsx:69)"}, "properties": {"repobilityId": "8835fb7198578ecd", "scanner": "scanner-primary", "fingerprint": "5b47935a1a4680fc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-591dbcbeae45c361", "level": "error", "message": {"text": "Dangling fetch: POST /api/osce/guest-tokens (app/admin/osce-tokens/page.tsx:83)"}, "properties": {"repobilityId": "cd900cd1d55edb64", "scanner": "scanner-primary", "fingerprint": "591dbcbeae45c361", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-607d6ba7b9972f79", "level": "error", "message": {"text": "Dangling fetch: GET /api/exam-scheduling/sessions?admin=1 (app/admin/exam-sessions/page.tsx:91)"}, "properties": {"repobilityId": "728e794e87209b16", "scanner": "scanner-primary", "fingerprint": "607d6ba7b9972f79", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bf6e5f882979afcd", "level": "error", "message": {"text": "Dangling fetch: POST /api/exam-scheduling/sessions (app/admin/exam-sessions/page.tsx:112)"}, "properties": {"repobilityId": "0d334939710d7882", "scanner": "scanner-primary", "fingerprint": "bf6e5f882979afcd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c1ee54ccf30a3a1b", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/exam-scheduling/sessions/${id} (app/admin/exam-sessions/page.tsx:140)"}, "properties": {"repobilityId": "af349e6cf9c9156e", "scanner": "scanner-primary", "fingerprint": "c1ee54ccf30a3a1b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa56e425506c7f3d", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/exam-scheduling/sessions/${id} (app/admin/exam-sessions/page.tsx:160)"}, "properties": {"repobilityId": "9067e96d1e3f5fac", "scanner": "scanner-primary", "fingerprint": "fa56e425506c7f3d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a2a7a97e91e58299", "level": "error", "message": {"text": "Dangling fetch: POST /api/exam-scheduling/signups/${signupId}/decision (app/admin/exam-sessions/page.tsx:175)"}, "properties": {"repobilityId": "3a75a8e051eb9139", "scanner": "scanner-primary", "fingerprint": "a2a7a97e91e58299", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9784a3df33b0b646", "level": "error", "message": {"text": "Dangling fetch: POST /api/exam-scheduling/signups/${signupId}/result (app/admin/exam-sessions/page.tsx:194)"}, "properties": {"repobilityId": "df51ff951f8f2201", "scanner": "scanner-primary", "fingerprint": "9784a3df33b0b646", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83e4a37ee8d7a532", "level": "error", "message": {"text": "Dangling fetch: POST /api/exam-scheduling/signups/admin (app/admin/exam-sessions/page.tsx:214)"}, "properties": {"repobilityId": "cb15924502331f46", "scanner": "scanner-primary", "fingerprint": "83e4a37ee8d7a532", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ab154844b38f42b7", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters (app/admin/instructor-workload/page.tsx:123)"}, "properties": {"repobilityId": "887a8b5afaba4fca", "scanner": "scanner-primary", "fingerprint": "ab154844b38f42b7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-32c8975fd047b618", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/workload?semester_id=${activeSem.id} (app/admin/instructor-workload/page.tsx:137)"}, "properties": {"repobilityId": "aee4891247680233", "scanner": "scanner-primary", "fingerprint": "32c8975fd047b618", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d51156c3302b5886", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/workload?semester_id=${semId} (app/admin/instructor-workload/page.tsx:155)"}, "properties": {"repobilityId": "91be2cd6df074fac", "scanner": "scanner-primary", "fingerprint": "d51156c3302b5886", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1dd2210d0b2d177f", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/attendance-appeals/page.tsx:109)"}, "properties": {"repobilityId": "9c5377d5b9f0f7a7", "scanner": "scanner-primary", "fingerprint": "1dd2210d0b2d177f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4675c0735f2f79be", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/attendance-appeals/${appealId} (app/admin/attendance-appeals/page.tsx:167)"}, "properties": {"repobilityId": "8d2f7a92e1f46929", "scanner": "scanner-primary", "fingerprint": "4675c0735f2f79be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d85471da2e8d718a", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/compliance?log=true&limit=100 (app/admin/compliance/page.tsx:154)"}, "properties": {"repobilityId": "7e9f5f2de9a4a1da", "scanner": "scanner-primary", "fingerprint": "d85471da2e8d718a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-08a404142098dd54", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/compliance (app/admin/compliance/page.tsx:179)"}, "properties": {"repobilityId": "6760af8bb06e93d3", "scanner": "scanner-primary", "fingerprint": "08a404142098dd54", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-931b06eb148d26f8", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/compliance (app/admin/compliance/page.tsx:208)"}, "properties": {"repobilityId": "976d3c9e661c57a9", "scanner": "scanner-primary", "fingerprint": "931b06eb148d26f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd0560ad887c194c", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/database-tools/page.tsx:252)"}, "properties": {"repobilityId": "d70db85288b704ed", "scanner": "scanner-primary", "fingerprint": "cd0560ad887c194c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fd4eac3fb4137094", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/database-tools/audit-logs?retention_days=${auditRetention}&dry_run=false (app/admin/database-tools/page.tsx:289)"}, "properties": {"repobilityId": "ec63688bc8b2345b", "scanner": "scanner-primary", "fingerprint": "fd4eac3fb4137094", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-28ea25231819f0fd", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/database-tools/notifications?days=${notifDays}&include_unread=${notifIncludeUnread}&dry_run=false (app/admin/database-tools/page.tsx:328)"}, "properties": {"repobilityId": "ea8626a959664e73", "scanner": "scanner-primary", "fingerprint": "28ea25231819f0fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fb19e00f2656ac7d", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/database-tools/cohorts (app/admin/database-tools/page.tsx:349)"}, "properties": {"repobilityId": "bfe5c736c0ed9e0c", "scanner": "scanner-primary", "fingerprint": "fb19e00f2656ac7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3bed1cc4294c2e30", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/database-tools/cohorts (app/admin/database-tools/page.tsx:387)"}, "properties": {"repobilityId": "db7776c8470f589b", "scanner": "scanner-primary", "fingerprint": "3bed1cc4294c2e30", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b99834b678f20a65", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/database-tools/orphans (app/admin/database-tools/page.tsx:410)"}, "properties": {"repobilityId": "605b7f6db651fff7", "scanner": "scanner-primary", "fingerprint": "b99834b678f20a65", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-38b1a03baaee66de", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/database-tools/orphans?dry_run=false (app/admin/database-tools/page.tsx:427)"}, "properties": {"repobilityId": "7c4cd5b9a3267d32", "scanner": "scanner-primary", "fingerprint": "38b1a03baaee66de", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5ca7ba4689e18f00", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/database-tools/stats (app/admin/database-tools/page.tsx:448)"}, "properties": {"repobilityId": "6149975aee2eed1c", "scanner": "scanner-primary", "fingerprint": "5ca7ba4689e18f00", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2be086f5e199be21", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/system-alerts/page.tsx:255)"}, "properties": {"repobilityId": "91557b8fb279d1c1", "scanner": "scanner-primary", "fingerprint": "2be086f5e199be21", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-06dd099c097f457f", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/system-alerts?${params.toString()} (app/admin/system-alerts/page.tsx:277)"}, "properties": {"repobilityId": "08c49f15ba9ebd4f", "scanner": "scanner-primary", "fingerprint": "06dd099c097f457f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2a0b6b7807e353fb", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/system-alerts (app/admin/system-alerts/page.tsx:301)"}, "properties": {"repobilityId": "f7b4a41eda9b0ea3", "scanner": "scanner-primary", "fingerprint": "2a0b6b7807e353fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-558defbdc78cb60f", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/guests/page.tsx:90)"}, "properties": {"repobilityId": "b8fc5812a24f1c1d", "scanner": "scanner-primary", "fingerprint": "558defbdc78cb60f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a5c9952cb1415cef", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/guests (app/admin/guests/page.tsx:109)"}, "properties": {"repobilityId": "e2b33d9c165839b0", "scanner": "scanner-primary", "fingerprint": "a5c9952cb1415cef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a58e38c3324a8115", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days?startDate=${today} (app/admin/guests/page.tsx:123)"}, "properties": {"repobilityId": "c81fa2ec1c03b761", "scanner": "scanner-primary", "fingerprint": "a58e38c3324a8115", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e0d6fe7aca71a6bf", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/guests (app/admin/guests/page.tsx:147)"}, "properties": {"repobilityId": "3df0874b9d932403", "scanner": "scanner-primary", "fingerprint": "e0d6fe7aca71a6bf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1e25947231465062", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/guests?id=${guestId} (app/admin/guests/page.tsx:177)"}, "properties": {"repobilityId": "32ba8fffe35a6a92", "scanner": "scanner-primary", "fingerprint": "1e25947231465062", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d8aa8b678b472c94", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/announcements/page.tsx:345)"}, "properties": {"repobilityId": "5c36f48fd0698645", "scanner": "scanner-primary", "fingerprint": "d8aa8b678b472c94", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5cb0b821e5cbb2d", "level": "error", "message": {"text": "Dangling fetch: GET /api/announcements (app/admin/announcements/page.tsx:363)"}, "properties": {"repobilityId": "4dcfd8a082e39d97", "scanner": "scanner-primary", "fingerprint": "c5cb0b821e5cbb2d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4751306a24294b62", "level": "error", "message": {"text": "Dangling fetch: GET /api/announcements (app/admin/announcements/page.tsx:403)"}, "properties": {"repobilityId": "239647f555ebaa38", "scanner": "scanner-primary", "fingerprint": "4751306a24294b62", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7e51b70b6031c682", "level": "error", "message": {"text": "Dangling fetch: PUT /api/announcements (app/admin/announcements/page.tsx:427)"}, "properties": {"repobilityId": "4fe9b459cd75f77b", "scanner": "scanner-primary", "fingerprint": "7e51b70b6031c682", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9c4eb374240ea38c", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/announcements (app/admin/announcements/page.tsx:444)"}, "properties": {"repobilityId": "616a078e726be344", "scanner": "scanner-primary", "fingerprint": "9c4eb374240ea38c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4fd7c6679fb0897e", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/incidents/page.tsx:209)"}, "properties": {"repobilityId": "ec867bb9f77871c8", "scanner": "scanner-primary", "fingerprint": "4fd7c6679fb0897e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a0b8d800ed210872", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/incidents (app/admin/incidents/page.tsx:280)"}, "properties": {"repobilityId": "974834aa87ce6d59", "scanner": "scanner-primary", "fingerprint": "a0b8d800ed210872", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5cd774944845203", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/incidents/${id} (app/admin/incidents/page.tsx:341)"}, "properties": {"repobilityId": "51016c65729a1f49", "scanner": "scanner-primary", "fingerprint": "c5cd774944845203", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-81f7d259a59ed472", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/qa-checklist/page.tsx:450)"}, "properties": {"repobilityId": "bafb9835a8478b30", "scanner": "scanner-primary", "fingerprint": "81f7d259a59ed472", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e05b313b57573934", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/deletion-requests/page.tsx:54)"}, "properties": {"repobilityId": "1f6f2b2ba5e6d87b", "scanner": "scanner-primary", "fingerprint": "e05b313b57573934", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0bea6345d33373ea", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/deletion-requests (app/admin/deletion-requests/page.tsx:72)"}, "properties": {"repobilityId": "a3d02c2db435a4db", "scanner": "scanner-primary", "fingerprint": "0bea6345d33373ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c1bec2af9e80fde", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/deletion-requests (app/admin/deletion-requests/page.tsx:85)"}, "properties": {"repobilityId": "a6d5b5c64c2bf476", "scanner": "scanner-primary", "fingerprint": "4c1bec2af9e80fde", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e2e1fe4a9f7e61cb", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/config/page.tsx:302)"}, "properties": {"repobilityId": "fc4124f82de2ba5e", "scanner": "scanner-primary", "fingerprint": "e2e1fe4a9f7e61cb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-79463d508e219254", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/config (app/admin/config/page.tsx:320)"}, "properties": {"repobilityId": "2de676dec5bcc009", "scanner": "scanner-primary", "fingerprint": "79463d508e219254", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6211c9dbadbad525", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/config (app/admin/config/page.tsx:372)"}, "properties": {"repobilityId": "4dd55ddf3d3b3047", "scanner": "scanner-primary", "fingerprint": "6211c9dbadbad525", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3c8fe005e139026c", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/email-templates/page.tsx:1002)"}, "properties": {"repobilityId": "81be7b94809e975f", "scanner": "scanner-primary", "fingerprint": "3c8fe005e139026c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0bdd2feb1be86788", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/email-templates (app/admin/email-templates/page.tsx:1021)"}, "properties": {"repobilityId": "dc4b6b549949771e", "scanner": "scanner-primary", "fingerprint": "0bdd2feb1be86788", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e9799cc45bf6f56f", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/email-stats (app/admin/email-templates/page.tsx:1032)"}, "properties": {"repobilityId": "ca1e31a12a3c6ca8", "scanner": "scanner-primary", "fingerprint": "e9799cc45bf6f56f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9dfa8ad9eb007e2e", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/email-templates (app/admin/email-templates/page.tsx:1043)"}, "properties": {"repobilityId": "032127b30a1769bd", "scanner": "scanner-primary", "fingerprint": "9dfa8ad9eb007e2e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-26db743b75ded832", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/email-templates (app/admin/email-templates/page.tsx:1060)"}, "properties": {"repobilityId": "fc24cb73ed5198ee", "scanner": "scanner-primary", "fingerprint": "26db743b75ded832", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76d8360a2014d680", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/email-templates/test (app/admin/email-templates/page.tsx:1079)"}, "properties": {"repobilityId": "53872701ec9d6543", "scanner": "scanner-primary", "fingerprint": "76d8360a2014d680", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e3e574cde309ec16", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/roles/page.tsx:161)"}, "properties": {"repobilityId": "8d3c843b62a05a35", "scanner": "scanner-primary", "fingerprint": "e3e574cde309ec16", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ffefbc7ede3a7620", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/system-health/page.tsx:233)"}, "properties": {"repobilityId": "274f34ef15707ecb", "scanner": "scanner-primary", "fingerprint": "ffefbc7ede3a7620", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-46a61f2f83cf28a8", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/system-health (app/admin/system-health/page.tsx:253)"}, "properties": {"repobilityId": "f445bbfee0137eb9", "scanner": "scanner-primary", "fingerprint": "46a61f2f83cf28a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d4c48d7755f55c87", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/time-clock/page.tsx:167)"}, "properties": {"repobilityId": "82ee1b78e9ed5d74", "scanner": "scanner-primary", "fingerprint": "d4c48d7755f55c87", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d671d8780744f3f5", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/time-clock?${params.toString()} (app/admin/time-clock/page.tsx:203)"}, "properties": {"repobilityId": "5719035ecc20077b", "scanner": "scanner-primary", "fingerprint": "d671d8780744f3f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c157594d5f4fe161", "level": "error", "message": {"text": "Dangling fetch: PUT /api/instructor/time-clock/${id} (app/admin/time-clock/page.tsx:228)"}, "properties": {"repobilityId": "be1e6ffac88a51b9", "scanner": "scanner-primary", "fingerprint": "c157594d5f4fe161", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-548f9ec247285f25", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/instructor/time-clock/${id} (app/admin/time-clock/page.tsx:256)"}, "properties": {"repobilityId": "961ace9ca5e0c01c", "scanner": "scanner-primary", "fingerprint": "548f9ec247285f25", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-38779d2b1b0c19af", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/scheduled-exports/page.tsx:395)"}, "properties": {"repobilityId": "27f0e48794432b04", "scanner": "scanner-primary", "fingerprint": "38779d2b1b0c19af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aded786b5baefb46", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/scheduled-exports (app/admin/scheduled-exports/page.tsx:413)"}, "properties": {"repobilityId": "f8aeaeeb790ca406", "scanner": "scanner-primary", "fingerprint": "aded786b5baefb46", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-31df627097b28ed3", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/scheduled-exports (app/admin/scheduled-exports/page.tsx:423)"}, "properties": {"repobilityId": "7125645ab69ef85e", "scanner": "scanner-primary", "fingerprint": "31df627097b28ed3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-de269a07c231363b", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/scheduled-exports/${id} (app/admin/scheduled-exports/page.tsx:440)"}, "properties": {"repobilityId": "b529d86e15df49e8", "scanner": "scanner-primary", "fingerprint": "de269a07c231363b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-37afaab7329af0d1", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/scheduled-exports/${id} (app/admin/scheduled-exports/page.tsx:459)"}, "properties": {"repobilityId": "440b034fa6f2a9aa", "scanner": "scanner-primary", "fingerprint": "37afaab7329af0d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f9e273450ad35daa", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/scheduled-exports/${exp.id} (app/admin/scheduled-exports/page.tsx:473)"}, "properties": {"repobilityId": "b96d1ccb87d53b5f", "scanner": "scanner-primary", "fingerprint": "f9e273450ad35daa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-59042a123b80a78a", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/cases/generate/page.tsx:195)"}, "properties": {"repobilityId": "496a29c350d9c7c0", "scanner": "scanner-primary", "fingerprint": "59042a123b80a78a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-84433ddd3cc863c2", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/cases/briefs?${params.toString()} (app/admin/cases/generate/page.tsx:221)"}, "properties": {"repobilityId": "44de4a12ce56d24c", "scanner": "scanner-primary", "fingerprint": "84433ddd3cc863c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-af4957722611e7ae", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/cases/coverage (app/admin/cases/generate/page.tsx:234)"}, "properties": {"repobilityId": "6a47921a67794ba8", "scanner": "scanner-primary", "fingerprint": "af4957722611e7ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-474373bb61d0072e", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/cases/prompt-template (app/admin/cases/generate/page.tsx:247)"}, "properties": {"repobilityId": "df1f6a9dbb2ed890", "scanner": "scanner-primary", "fingerprint": "474373bb61d0072e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-20defcba90afc3a7", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/cases/seed-briefs (app/admin/cases/generate/page.tsx:277)"}, "properties": {"repobilityId": "429d3a55c003fc88", "scanner": "scanner-primary", "fingerprint": "20defcba90afc3a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-87b89e2d45c883ff", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/cases/seed-prompt (app/admin/cases/generate/page.tsx:295)"}, "properties": {"repobilityId": "862570f8cde67872", "scanner": "scanner-primary", "fingerprint": "87b89e2d45c883ff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1478e703440d136b", "level": "error", "message": {"text": "Dangling fetch: POST /api/cases/generate/bulk (app/admin/cases/generate/page.tsx:332)"}, "properties": {"repobilityId": "220e204e271f070a", "scanner": "scanner-primary", "fingerprint": "1478e703440d136b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-181ed8f48f1c63b4", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/cases/briefs (app/admin/cases/generate/page.tsx:406)"}, "properties": {"repobilityId": "4cec2b2dc4bb6eb8", "scanner": "scanner-primary", "fingerprint": "181ed8f48f1c63b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5535d8a730d5d179", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/cases/prompt-template (app/admin/cases/generate/page.tsx:442)"}, "properties": {"repobilityId": "72588aa2ab45ed30", "scanner": "scanner-primary", "fingerprint": "5535d8a730d5d179", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4d6b7c453936d316", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/calendar-sync/page.tsx:196)"}, "properties": {"repobilityId": "edc5de403b937618", "scanner": "scanner-primary", "fingerprint": "4d6b7c453936d316", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5ed05a53f97e5f52", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/calendar-sync/status (app/admin/calendar-sync/page.tsx:214)"}, "properties": {"repobilityId": "43462a44b0f41a30", "scanner": "scanner-primary", "fingerprint": "5ed05a53f97e5f52", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-20e688625909921e", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/calendar-sync (app/admin/calendar-sync/page.tsx:243)"}, "properties": {"repobilityId": "d9cd64d6eaa94c55", "scanner": "scanner-primary", "fingerprint": "20e688625909921e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-04eb1bc7a19a3f52", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/calendar-sync/remind (app/admin/calendar-sync/page.tsx:286)"}, "properties": {"repobilityId": "58321f32615c753a", "scanner": "scanner-primary", "fingerprint": "04eb1bc7a19a3f52", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ceed21948e9b9ee0", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/calendar-sync/cleanup-duplicates (app/admin/calendar-sync/page.tsx:309)"}, "properties": {"repobilityId": "f336dc0411f2896b", "scanner": "scanner-primary", "fingerprint": "ceed21948e9b9ee0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7486ff9a2663f1b1", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/calendar-sync/cleanup-duplicates (app/admin/calendar-sync/page.tsx:329)"}, "properties": {"repobilityId": "4a4a2510020406e7", "scanner": "scanner-primary", "fingerprint": "7486ff9a2663f1b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd43016cd3a4d065", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/calendar-sync/remind (app/admin/calendar-sync/page.tsx:359)"}, "properties": {"repobilityId": "6f99fc42d8327b4e", "scanner": "scanner-primary", "fingerprint": "cd43016cd3a4d065", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3453c1b3fce79c4e", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/calendar-sync (app/admin/calendar-sync/page.tsx:383)"}, "properties": {"repobilityId": "7944e435cf49a24a", "scanner": "scanner-primary", "fingerprint": "3453c1b3fce79c4e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0122a0f1ec9539eb", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/calendar-sync/force-resync (app/admin/calendar-sync/page.tsx:440)"}, "properties": {"repobilityId": "e3c117d8b43fe9a8", "scanner": "scanner-primary", "fingerprint": "0122a0f1ec9539eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-42dc823c17953466", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/audit-log/page.tsx:190)"}, "properties": {"repobilityId": "04eb0a61aaeea4de", "scanner": "scanner-primary", "fingerprint": "42dc823c17953466", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fb8612d8eb961347", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/audit-log?${buildParams()} (app/admin/audit-log/page.tsx:225)"}, "properties": {"repobilityId": "00c20f9410fda302", "scanner": "scanner-primary", "fingerprint": "fb8612d8eb961347", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6873bf69a4c913d8", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/audit-log?mode=stats (app/admin/audit-log/page.tsx:240)"}, "properties": {"repobilityId": "0dba423246746615", "scanner": "scanner-primary", "fingerprint": "6873bf69a4c913d8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2b3b1f3a716ef035", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/audit-log?days=${days} (app/admin/audit-log/page.tsx:296)"}, "properties": {"repobilityId": "696eda31ba359c69", "scanner": "scanner-primary", "fingerprint": "2b3b1f3a716ef035", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6073cd29d0a726be", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce/results (app/admin/osce-results/page.tsx:93)"}, "properties": {"repobilityId": "f97d2a0926c86871", "scanner": "scanner-primary", "fingerprint": "6073cd29d0a726be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ca3eccd6f7cc7ec6", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/external-access/page.tsx:72)"}, "properties": {"repobilityId": "25a1e1c7d6e9200f", "scanner": "scanner-primary", "fingerprint": "ca3eccd6f7cc7ec6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6d01dbb9d15b635f", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/external-access (app/admin/external-access/page.tsx:86)"}, "properties": {"repobilityId": "720fc0e0822a457d", "scanner": "scanner-primary", "fingerprint": "6d01dbb9d15b635f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c025c125df56bac5", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/admin/external-access/page.tsx:97)"}, "properties": {"repobilityId": "653ce9570b5d2c35", "scanner": "scanner-primary", "fingerprint": "c025c125df56bac5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3353e204f34ccb94", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/external-access (app/admin/external-access/page.tsx:122)"}, "properties": {"repobilityId": "6a31d5ac162843a3", "scanner": "scanner-primary", "fingerprint": "3353e204f34ccb94", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c775a825a869a227", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/external-access (app/admin/external-access/page.tsx:146)"}, "properties": {"repobilityId": "6255401c5f312f95", "scanner": "scanner-primary", "fingerprint": "c775a825a869a227", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-63254040e69af3c0", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/external-access/import (app/admin/external-access/page.tsx:192)"}, "properties": {"repobilityId": "3acb108431912682", "scanner": "scanner-primary", "fingerprint": "63254040e69af3c0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1ce10f0c49fb0517", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/data-import/page.tsx:364)"}, "properties": {"repobilityId": "45b2f6ebed927a00", "scanner": "scanner-primary", "fingerprint": "1ce10f0c49fb0517", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e96d1580ffe59a6", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/data-import/history?importType=${activeTab}&limit=10 (app/admin/data-import/page.tsx:383)"}, "properties": {"repobilityId": "f9cd9cbee129eb06", "scanner": "scanner-primary", "fingerprint": "6e96d1580ffe59a6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e2d73531a7b75b41", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/data-import/preview (app/admin/data-import/page.tsx:472)"}, "properties": {"repobilityId": "ba5f29b701616ae3", "scanner": "scanner-primary", "fingerprint": "e2d73531a7b75b41", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e574e0781c84542", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/data-import/execute (app/admin/data-import/page.tsx:511)"}, "properties": {"repobilityId": "9e9f9fad9984d2ed", "scanner": "scanner-primary", "fingerprint": "2e574e0781c84542", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f07e57a5404af6f3", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/admin/program-requirements/page.tsx:351)"}, "properties": {"repobilityId": "bb282fd043674b2e", "scanner": "scanner-primary", "fingerprint": "f07e57a5404af6f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-32a93f9db0ba5a6e", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/program-requirements (app/admin/program-requirements/page.tsx:369)"}, "properties": {"repobilityId": "43362f0971776bbd", "scanner": "scanner-primary", "fingerprint": "32a93f9db0ba5a6e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-22aecdc5e1eac1f9", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/program-requirements?includeHistory=true (app/admin/program-requirements/page.tsx:383)"}, "properties": {"repobilityId": "d559d77ad7bb4862", "scanner": "scanner-primary", "fingerprint": "22aecdc5e1eac1f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-57e98b7a73dfc97c", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/program-requirements (app/admin/program-requirements/page.tsx:409)"}, "properties": {"repobilityId": "289e6e67dde90254", "scanner": "scanner-primary", "fingerprint": "57e98b7a73dfc97c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-02c3e84e0dd9ce44", "level": "error", "message": {"text": "Dangling fetch: GET /api/checkin/${token} (app/checkin/[token]/page.tsx:51)"}, "properties": {"repobilityId": "3137e6893e2401b4", "scanner": "scanner-primary", "fingerprint": "02c3e84e0dd9ce44", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5588572d5fb8244f", "level": "error", "message": {"text": "Dangling fetch: POST /api/checkin/${token} (app/checkin/[token]/page.tsx:95)"}, "properties": {"repobilityId": "6e8b59332bdbe1b5", "scanner": "scanner-primary", "fingerprint": "5588572d5fb8244f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a0d8579c769dce0e", "level": "error", "message": {"text": "Dangling fetch: GET /api/feedback/my-submissions?${params.toString()} (app/feedback/my-submissions/page.tsx:174)"}, "properties": {"repobilityId": "c5d51f153f6084be", "scanner": "scanner-primary", "fingerprint": "a0d8579c769dce0e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f23b27b064cc291c", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/timer (app/timer-display/live/[labDayId]/page.tsx:239)"}, "properties": {"repobilityId": "8d65872283693c05", "scanner": "scanner-primary", "fingerprint": "f23b27b064cc291c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ae9e992ede8dd712", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/timer/adjust (app/timer-display/live/[labDayId]/page.tsx:259)"}, "properties": {"repobilityId": "2dea3c01f12ac5f8", "scanner": "scanner-primary", "fingerprint": "ae9e992ede8dd712", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c1e5c29f62e12ee6", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/timer/ready?labDayId=${labDayId} (app/timer-display/live/[labDayId]/page.tsx:345)"}, "properties": {"repobilityId": "05bf5f0af12da3cb", "scanner": "scanner-primary", "fingerprint": "c1e5c29f62e12ee6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-daa085ab0720a6eb", "level": "error", "message": {"text": "Dangling fetch: GET /api/timer-display/${token} (app/timer-display/[token]/page.tsx:266)"}, "properties": {"repobilityId": "51613af96bcd8a72", "scanner": "scanner-primary", "fingerprint": "daa085ab0720a6eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1f60e26ebb03fc3b", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/clinical-placements (app/reports/clinical-placements/page.tsx:63)"}, "properties": {"repobilityId": "f5551ecc71c6536a", "scanner": "scanner-primary", "fingerprint": "1f60e26ebb03fc3b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b4aad5b63922ee2e", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/program-overview?${params} (app/reports/program-overview/page.tsx:63)"}, "properties": {"repobilityId": "c93241115dc03d5a", "scanner": "scanner-primary", "fingerprint": "b4aad5b63922ee2e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d936d4159ac34c5", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/reports/internship-status/page.tsx:91)"}, "properties": {"repobilityId": "37060cba0fb36331", "scanner": "scanner-primary", "fingerprint": "0d936d4159ac34c5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-015ad761fdaa2bb7", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/internship-status?${params} (app/reports/internship-status/page.tsx:118)"}, "properties": {"repobilityId": "43fba8fc48a8c1f5", "scanner": "scanner-primary", "fingerprint": "015ad761fdaa2bb7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e49e28d2873cd2e6", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/instructor-analytics?${params} (app/reports/instructor-analytics/page.tsx:73)"}, "properties": {"repobilityId": "983631378ee3d601", "scanner": "scanner-primary", "fingerprint": "e49e28d2873cd2e6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-077cc63eeff30a86", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/availability-patterns?${params} (app/reports/availability-patterns/page.tsx:360)"}, "properties": {"repobilityId": "6b8724fcc8661b36", "scanner": "scanner-primary", "fingerprint": "077cc63eeff30a86", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f265fac9f5645911", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/onboarding-status (app/reports/onboarding-status/page.tsx:73)"}, "properties": {"repobilityId": "c1767aa8d58da53f", "scanner": "scanner-primary", "fingerprint": "f265fac9f5645911", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fcbd07bc68d3c084", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/scenario-usage?${params} (app/reports/scenario-usage/page.tsx:107)"}, "properties": {"repobilityId": "c5b64f60c2f2de8a", "scanner": "scanner-primary", "fingerprint": "fcbd07bc68d3c084", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-518a910bd45de008", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/reports/lab-progress/page.tsx:118)"}, "properties": {"repobilityId": "bf42baf03ce5a530", "scanner": "scanner-primary", "fingerprint": "518a910bd45de008", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-de2a7e34811947b6", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/lab-progress?${params} (app/reports/lab-progress/page.tsx:150)"}, "properties": {"repobilityId": "0bdf99310c8601e8", "scanner": "scanner-primary", "fingerprint": "de2a7e34811947b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-75c9017d7834cf54", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/reports/builder/page.tsx:157)"}, "properties": {"repobilityId": "dec22aa1a797ed71", "scanner": "scanner-primary", "fingerprint": "75c9017d7834cf54", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7d16c6928148426c", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/builder?action=schema (app/reports/builder/page.tsx:167)"}, "properties": {"repobilityId": "7776a75858e103be", "scanner": "scanner-primary", "fingerprint": "7d16c6928148426c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-62f416645668f1df", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/builder?action=templates (app/reports/builder/page.tsx:180)"}, "properties": {"repobilityId": "c93e03f6feeaf972", "scanner": "scanner-primary", "fingerprint": "62f416645668f1df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-14a43bf1d39f9268", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/builder?${params.toString()} (app/reports/builder/page.tsx:295)"}, "properties": {"repobilityId": "53ad9d2388cded86", "scanner": "scanner-primary", "fingerprint": "14a43bf1d39f9268", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1e8f77f61655f358", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/builder (app/reports/builder/page.tsx:331)"}, "properties": {"repobilityId": "51c172d02225fcda", "scanner": "scanner-primary", "fingerprint": "1e8f77f61655f358", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c14347797aa61cea", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/reports/builder?id=${id} (app/reports/builder/page.tsx:381)"}, "properties": {"repobilityId": "27b9da9d610d8231", "scanner": "scanner-primary", "fingerprint": "c14347797aa61cea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a99d31dc298f6c2c", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/reports/lab-costs/page.tsx:125)"}, "properties": {"repobilityId": "ba8c7b2a1f4146ea", "scanner": "scanner-primary", "fingerprint": "a99d31dc298f6c2c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7362b695135a5cf1", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/costs?${params} (app/reports/lab-costs/page.tsx:149)"}, "properties": {"repobilityId": "1ce23b35983aa0c3", "scanner": "scanner-primary", "fingerprint": "7362b695135a5cf1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-52f0d87e300552f2", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/student-dashboard?${params} (app/reports/student-dashboard/page.tsx:89)"}, "properties": {"repobilityId": "8bdb7270543363a1", "scanner": "scanner-primary", "fingerprint": "52f0d87e300552f2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f87df001dbbdc670", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/closeout-surveys?${params} (app/reports/closeout-surveys/page.tsx:151)"}, "properties": {"repobilityId": "ab205a68dedf32eb", "scanner": "scanner-primary", "fingerprint": "f87df001dbbdc670", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7b7565e668d44590", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/reports/team-leads/page.tsx:97)"}, "properties": {"repobilityId": "bdb73eb29acf30a1", "scanner": "scanner-primary", "fingerprint": "7b7565e668d44590", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0c877e0ba26f19f0", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/team-leads?${params} (app/reports/team-leads/page.tsx:126)"}, "properties": {"repobilityId": "ae08398756bc98df", "scanner": "scanner-primary", "fingerprint": "0c877e0ba26f19f0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e13720bd2592aed", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/reports/student-progress/page.tsx:150)"}, "properties": {"repobilityId": "8110b64c6a17d471", "scanner": "scanner-primary", "fingerprint": "6e13720bd2592aed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a4ba50778835b5f0", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/reports/student-progress/page.tsx:165)"}, "properties": {"repobilityId": "48b8add69773b7e5", "scanner": "scanner-primary", "fingerprint": "a4ba50778835b5f0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c339450aba7f44e", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/student-progress?${params} (app/reports/student-progress/page.tsx:191)"}, "properties": {"repobilityId": "36ffd8b62bc9a519", "scanner": "scanner-primary", "fingerprint": "4c339450aba7f44e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-af06728c6f02565c", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/reports/instructor-workload/page.tsx:106)"}, "properties": {"repobilityId": "6480fae916d971d4", "scanner": "scanner-primary", "fingerprint": "af06728c6f02565c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-05e6f9e9f4d35a1d", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/instructor-workload?${params} (app/reports/instructor-workload/page.tsx:129)"}, "properties": {"repobilityId": "501cf963afa70e30", "scanner": "scanner-primary", "fingerprint": "05e6f9e9f4d35a1d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1cb8f93fe32a6ead", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/skill-trends?${params} (app/reports/skill-trends/page.tsx:211)"}, "properties": {"repobilityId": "885777b310fa6408", "scanner": "scanner-primary", "fingerprint": "1cb8f93fe32a6ead", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2a26116b2465e76d", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/scenario-usage-overview (app/reports/scenario-usage-overview/page.tsx:58)"}, "properties": {"repobilityId": "8d51ac1798804938", "scanner": "scanner-primary", "fingerprint": "2a26116b2465e76d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-93e9d02cab90c3c3", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=false (app/reports/cohort-comparison/page.tsx:173)"}, "properties": {"repobilityId": "e536e5b3805eda3f", "scanner": "scanner-primary", "fingerprint": "93e9d02cab90c3c3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4fd71b117132dccc", "level": "error", "message": {"text": "Dangling fetch: POST /api/reports/cohort-comparison (app/reports/cohort-comparison/page.tsx:203)"}, "properties": {"repobilityId": "ae961ed166bee5cb", "scanner": "scanner-primary", "fingerprint": "4fd71b117132dccc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-34983015b57cfbff", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/reports/program-outcomes/page.tsx:441)"}, "properties": {"repobilityId": "ecf571b84ba05243", "scanner": "scanner-primary", "fingerprint": "34983015b57cfbff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8475206587c3021d", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/program-outcomes (app/reports/program-outcomes/page.tsx:455)"}, "properties": {"repobilityId": "393d5c681a764618", "scanner": "scanner-primary", "fingerprint": "8475206587c3021d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c3318ec761a92e13", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=false (app/reports/program-outcomes/page.tsx:456)"}, "properties": {"repobilityId": "235b0d30bf46e0bb", "scanner": "scanner-primary", "fingerprint": "c3318ec761a92e13", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-295f11c080ae918f", "level": "error", "message": {"text": "Dangling fetch: POST /api/reports/program-outcomes (app/reports/program-outcomes/page.tsx:572)"}, "properties": {"repobilityId": "2bbb5a45a503e26e", "scanner": "scanner-primary", "fingerprint": "295f11c080ae918f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1ad6e2c9815172c2", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/reports/program-outcomes?id=${id} (app/reports/program-outcomes/page.tsx:597)"}, "properties": {"repobilityId": "5616b97bb12fda25", "scanner": "scanner-primary", "fingerprint": "1ad6e2c9815172c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9357e43cabed4e36", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=false&include_archived=false (app/reports/gradebook/page.tsx:201)"}, "properties": {"repobilityId": "bc492f09e4e83824", "scanner": "scanner-primary", "fingerprint": "9357e43cabed4e36", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-50c219c190bee2d1", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/gradebook?cohortId=${encodeURIComponent(cohortId)} (app/reports/gradebook/page.tsx:216)"}, "properties": {"repobilityId": "b31db82876896735", "scanner": "scanner-primary", "fingerprint": "50c219c190bee2d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-711efc2317795f41", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/reports/attendance/page.tsx:93)"}, "properties": {"repobilityId": "d08081a38c1cf4cb", "scanner": "scanner-primary", "fingerprint": "711efc2317795f41", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0cd8ae60b090cb0b", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/attendance?${params} (app/reports/attendance/page.tsx:121)"}, "properties": {"repobilityId": "cf818bf480f1fb34", "scanner": "scanner-primary", "fingerprint": "0cd8ae60b090cb0b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-18d8382534473126", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/scenario-analytics?${params} (app/reports/scenario-analytics/page.tsx:152)"}, "properties": {"repobilityId": "0cfd466cee218452", "scanner": "scanner-primary", "fingerprint": "18d8382534473126", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7d01680806037e21", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=false (app/reports/clinical-hours/page.tsx:106)"}, "properties": {"repobilityId": "7f76e25bdcf7f035", "scanner": "scanner-primary", "fingerprint": "7d01680806037e21", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7163998392e2e221", "level": "error", "message": {"text": "Dangling fetch: GET /api/reports/clinical-hours?${params} (app/reports/clinical-hours/page.tsx:135)"}, "properties": {"repobilityId": "baf100f3c9361c78", "scanner": "scanner-primary", "fingerprint": "7163998392e2e221", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4bf586e837827ff6", "level": "error", "message": {"text": "Dangling fetch: POST /api/analytics/link-click (app/auth/signin/page.tsx:105)"}, "properties": {"repobilityId": "fce2e4e928e15b74", "scanner": "scanner-primary", "fingerprint": "4bf586e837827ff6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b1dfd3e6affba116", "level": "error", "message": {"text": "Dangling fetch: GET /api/access-requests/status (app/request-access/page.tsx:65)"}, "properties": {"repobilityId": "62f63d00b5d1db84", "scanner": "scanner-primary", "fingerprint": "b1dfd3e6affba116", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa893d9ede7699c1", "level": "error", "message": {"text": "Dangling fetch: POST /api/access-requests (app/request-access/page.tsx:112)"}, "properties": {"repobilityId": "07c570201d0b3662", "scanner": "scanner-primary", "fingerprint": "fa893d9ede7699c1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e270b77bf37512a1", "level": "error", "message": {"text": "Dangling fetch: GET /api/resources/versions?resourceId=${resourceId} (app/resources/page.tsx:433)"}, "properties": {"repobilityId": "ae8000d4257ab795", "scanner": "scanner-primary", "fingerprint": "e270b77bf37512a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5eb6dfedcde528e4", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/resources/page.tsx:706)"}, "properties": {"repobilityId": "e1ce9f448a743961", "scanner": "scanner-primary", "fingerprint": "5eb6dfedcde528e4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-34b83eaf7bd44eef", "level": "error", "message": {"text": "Dangling fetch: GET /api/resources?${params.toString()} (app/resources/page.tsx:726)"}, "properties": {"repobilityId": "a8537c15823a5758", "scanner": "scanner-primary", "fingerprint": "34b83eaf7bd44eef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b0bc032f02e2bab", "level": "error", "message": {"text": "Dangling fetch: POST /api/resources (app/resources/page.tsx:760)"}, "properties": {"repobilityId": "e03d7120689163ec", "scanner": "scanner-primary", "fingerprint": "9b0bc032f02e2bab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e826687b4da51c9d", "level": "error", "message": {"text": "Dangling fetch: PUT /api/resources (app/resources/page.tsx:782)"}, "properties": {"repobilityId": "2b612e634eff970b", "scanner": "scanner-primary", "fingerprint": "e826687b4da51c9d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ffa5455238bc8e65", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/resources?id=${deletingResource.id} (app/resources/page.tsx:805)"}, "properties": {"repobilityId": "a651ba5d53a47cb7", "scanner": "scanner-primary", "fingerprint": "ffa5455238bc8e65", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2a8732553eeb86fe", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/resources/medications/page.tsx:842)"}, "properties": {"repobilityId": "012f3287c771b559", "scanner": "scanner-primary", "fingerprint": "2a8732553eeb86fe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-378096b60bf73a07", "level": "error", "message": {"text": "Dangling fetch: GET /api/resources/medications?${params.toString()} (app/resources/medications/page.tsx:858)"}, "properties": {"repobilityId": "dde5305c313c76b3", "scanner": "scanner-primary", "fingerprint": "378096b60bf73a07", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-167340b968a2ebc6", "level": "error", "message": {"text": "Dangling fetch: POST /api/resources/medications (app/resources/medications/page.tsx:892)"}, "properties": {"repobilityId": "f5eb53f4d55f89f5", "scanner": "scanner-primary", "fingerprint": "167340b968a2ebc6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b20f23b5fb595787", "level": "error", "message": {"text": "Dangling fetch: PUT /api/resources/medications/${editingMed.id} (app/resources/medications/page.tsx:905)"}, "properties": {"repobilityId": "93ecfcd7ec545bdd", "scanner": "scanner-primary", "fingerprint": "b20f23b5fb595787", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-27c6be374b33d0d3", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/resources/medications/${deletingMed.id} (app/resources/medications/page.tsx:918)"}, "properties": {"repobilityId": "662de73061cf929a", "scanner": "scanner-primary", "fingerprint": "27c6be374b33d0d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0e6038bb4a6f07d2", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce/assessments?${params.toString()} (app/osce-scoring/dashboard/page.tsx:78)"}, "properties": {"repobilityId": "e81b304efe5c5fe1", "scanner": "scanner-primary", "fingerprint": "0e6038bb4a6f07d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0063052b8f69eed5", "level": "error", "message": {"text": "Dangling fetch: POST /api/osce/validate-pin (app/osce-scoring/enter/page.tsx:94)"}, "properties": {"repobilityId": "7a20557a4466e20d", "scanner": "scanner-primary", "fingerprint": "0063052b8f69eed5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8e1023bc053145c8", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce/validate-token?token=${encodeURIComponent(t)} (app/osce-scoring/enter/page.tsx:144)"}, "properties": {"repobilityId": "3f58774c9c8f8f26", "scanner": "scanner-primary", "fingerprint": "8e1023bc053145c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-11b71ebb90bf31df", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce/scenario/${letter} (app/osce-scoring/[assessmentId]/page.tsx:416)"}, "properties": {"repobilityId": "dd8601979042a77a", "scanner": "scanner-primary", "fingerprint": "11b71ebb90bf31df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ce4cc0504e3b7412", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce/scores/${assessmentId}?evaluator=${encodeURIComponent(evaluatorName)} (app/osce-scoring/[assessmentId]/page.tsx:442)"}, "properties": {"repobilityId": "38071a0944dd8000", "scanner": "scanner-primary", "fingerprint": "ce4cc0504e3b7412", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b2676b7cd285e3cd", "level": "error", "message": {"text": "Dangling fetch: PUT /api/osce/scores/${assessmentId} (app/osce-scoring/[assessmentId]/page.tsx:467)"}, "properties": {"repobilityId": "a5d2076ff8dcc1ac", "scanner": "scanner-primary", "fingerprint": "b2676b7cd285e3cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-724e1d89297be3ba", "level": "error", "message": {"text": "Dangling fetch: PUT /api/osce/scores/${assessmentId} (app/osce-scoring/[assessmentId]/page.tsx:491)"}, "properties": {"repobilityId": "39f9ae7cec24b71d", "scanner": "scanner-primary", "fingerprint": "724e1d89297be3ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-72aa83950d9ff1dd", "level": "error", "message": {"text": "Dangling fetch: POST /api/osce/scores/${assessmentId}/submit (app/osce-scoring/[assessmentId]/page.tsx:610)"}, "properties": {"repobilityId": "7abd0bc49123e2d6", "scanner": "scanner-primary", "fingerprint": "72aa83950d9ff1dd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aa7d769972fe6c0c", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce-scenarios (app/osce-scenario/page.tsx:22)"}, "properties": {"repobilityId": "e9d9853cdf8291da", "scanner": "scanner-primary", "fingerprint": "aa7d769972fe6c0c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0ffd5ae53563eacf", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce-scenarios/${letter} (app/osce-scenario/[letter]/page.tsx:67)"}, "properties": {"repobilityId": "86b723df5b26d950", "scanner": "scanner-primary", "fingerprint": "0ffd5ae53563eacf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ab976c4c3021cce7", "level": "error", "message": {"text": "Dangling fetch: GET /api/ride-along-poll/${token} (app/ride-along-poll/[token]/page.tsx:63)"}, "properties": {"repobilityId": "f3e59221dd31c3a1", "scanner": "scanner-primary", "fingerprint": "ab976c4c3021cce7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e1a3519b8ee45215", "level": "error", "message": {"text": "Dangling fetch: POST /api/ride-along-poll/${token} (app/ride-along-poll/[token]/page.tsx:138)"}, "properties": {"repobilityId": "e5b740d4c464cd86", "scanner": "scanner-primary", "fingerprint": "e1a3519b8ee45215", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eb1eb1df9fa66cdb", "level": "error", "message": {"text": "Dangling fetch: POST /api/polls (app/poll/create/page.tsx:63)"}, "properties": {"repobilityId": "92c1b8062f7cae8b", "scanner": "scanner-primary", "fingerprint": "eb1eb1df9fa66cdb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b14420725e85e5e9", "level": "error", "message": {"text": "Dangling fetch: GET /api/students/${studentId}/progress (app/students/[id]/progress/page.tsx:639)"}, "properties": {"repobilityId": "311de24009d62a41", "scanner": "scanner-primary", "fingerprint": "b14420725e85e5e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9830559279ba4cf5", "level": "error", "message": {"text": "Dangling fetch: GET /api/students/${studentId}/skill-evaluations (app/students/[id]/progress/page.tsx:657)"}, "properties": {"repobilityId": "606f05672a8fc963", "scanner": "scanner-primary", "fingerprint": "9830559279ba4cf5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cb6d287b78b7d900", "level": "error", "message": {"text": "Dangling fetch: GET /api/skill-sheets/${sheetId} (app/skill-sheets/[id]/page.tsx:193)"}, "properties": {"repobilityId": "245dff3b24c6876d", "scanner": "scanner-primary", "fingerprint": "cb6d287b78b7d900", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9ad8110d7ab931f9", "level": "error", "message": {"text": "Dangling fetch: GET /api/students?role=student (app/skill-sheets/[id]/page.tsx:209)"}, "properties": {"repobilityId": "96b8b0ddff630db4", "scanner": "scanner-primary", "fingerprint": "9ad8110d7ab931f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ee180e3ca399b04d", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days?limit=20 (app/skill-sheets/[id]/page.tsx:221)"}, "properties": {"repobilityId": "bd43ad10cc6e8648", "scanner": "scanner-primary", "fingerprint": "ee180e3ca399b04d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-765263f53accd9d3", "level": "error", "message": {"text": "Dangling fetch: POST /api/skill-sheets/${sheetId}/evaluate (app/skill-sheets/[id]/page.tsx:381)"}, "properties": {"repobilityId": "b0e40fa5b79bf42c", "scanner": "scanner-primary", "fingerprint": "765263f53accd9d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f656563ecfdfef81", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce/public/${slug} (app/osce/[slug]/page.tsx:53)"}, "properties": {"repobilityId": "ac4c344e007c981a", "scanner": "scanner-primary", "fingerprint": "f656563ecfdfef81", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-50a001256326ea3e", "level": "error", "message": {"text": "Dangling fetch: POST /api/osce/public/${slug}/register (app/osce/[slug]/page.tsx:125)"}, "properties": {"repobilityId": "0c6447cf205d28b1", "scanner": "scanner-primary", "fingerprint": "50a001256326ea3e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5e202394814be5e8", "level": "error", "message": {"text": "Dangling fetch: GET /api/notifications/digest-preview (app/settings/page.tsx:183)"}, "properties": {"repobilityId": "b2fc1e0f64dbb474", "scanner": "scanner-primary", "fingerprint": "5e202394814be5e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e493d4711a1f18b2", "level": "error", "message": {"text": "Dangling fetch: GET /api/notifications/preferences (app/settings/page.tsx:205)"}, "properties": {"repobilityId": "a5d9b4dfda564ef9", "scanner": "scanner-primary", "fingerprint": "e493d4711a1f18b2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-149a187cfaf9a5be", "level": "error", "message": {"text": "Dangling fetch: GET /api/notifications/email-preferences (app/settings/page.tsx:206)"}, "properties": {"repobilityId": "cdd999229432d2b7", "scanner": "scanner-primary", "fingerprint": "149a187cfaf9a5be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-004dfdfa810f6019", "level": "error", "message": {"text": "Dangling fetch: GET /api/user/preferences (app/settings/page.tsx:207)"}, "properties": {"repobilityId": "4134b3e0a44ef5b5", "scanner": "scanner-primary", "fingerprint": "004dfdfa810f6019", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a24068afb099f96f", "level": "error", "message": {"text": "Dangling fetch: GET /api/user/preferences (app/settings/page.tsx:248)"}, "properties": {"repobilityId": "f4cf28c870aebad4", "scanner": "scanner-primary", "fingerprint": "a24068afb099f96f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-55773c5f085ff1f0", "level": "error", "message": {"text": "Dangling fetch: PUT /api/user/preferences (app/settings/page.tsx:252)"}, "properties": {"repobilityId": "1298978563bce44f", "scanner": "scanner-primary", "fingerprint": "55773c5f085ff1f0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e7e1ba99a7f3e85a", "level": "error", "message": {"text": "Dangling fetch: PUT /api/notifications/preferences (app/settings/page.tsx:276)"}, "properties": {"repobilityId": "e0bc2efae75dbb20", "scanner": "scanner-primary", "fingerprint": "e7e1ba99a7f3e85a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2caaf16f6b208fdf", "level": "error", "message": {"text": "Dangling fetch: PUT /api/notifications/email-preferences (app/settings/page.tsx:301)"}, "properties": {"repobilityId": "d75a81a7cb8b2f72", "scanner": "scanner-primary", "fingerprint": "2caaf16f6b208fdf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-317b344c26a09c8d", "level": "error", "message": {"text": "Dangling fetch: PUT /api/notifications/email-preferences (app/settings/page.tsx:323)"}, "properties": {"repobilityId": "5f5861f79302d5bc", "scanner": "scanner-primary", "fingerprint": "317b344c26a09c8d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-550b039cb72b0ec3", "level": "error", "message": {"text": "Dangling fetch: GET /api/settings/notifications (app/settings/page.tsx:764)"}, "properties": {"repobilityId": "aa116a5cd725734f", "scanner": "scanner-primary", "fingerprint": "550b039cb72b0ec3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8798f486d71ec677", "level": "error", "message": {"text": "Dangling fetch: PUT /api/settings/notifications (app/settings/page.tsx:781)"}, "properties": {"repobilityId": "4c1010ef6b7c5239", "scanner": "scanner-primary", "fingerprint": "8798f486d71ec677", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-afa469858ec68464", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/settings/page.tsx:1259)"}, "properties": {"repobilityId": "876066a5d1571c53", "scanner": "scanner-primary", "fingerprint": "afa469858ec68464", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-995a6237d6e85e01", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/instructor/me (app/settings/page.tsx:1308)"}, "properties": {"repobilityId": "1f196c6a803c011f", "scanner": "scanner-primary", "fingerprint": "995a6237d6e85e01", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8c5aa480d5f61134", "level": "error", "message": {"text": "Dangling fetch: GET /api/calendar/sync-my-blocks (app/settings/page.tsx:1454)"}, "properties": {"repobilityId": "dc1de06320d4d1eb", "scanner": "scanner-primary", "fingerprint": "8c5aa480d5f61134", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0c8ca4039db53969", "level": "error", "message": {"text": "Dangling fetch: POST /api/calendar/sync-my-blocks (app/settings/page.tsx:1467)"}, "properties": {"repobilityId": "750954a43d60c1da", "scanner": "scanner-primary", "fingerprint": "0c8ca4039db53969", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-58e5a79ae2acb4b5", "level": "error", "message": {"text": "Dangling fetch: GET /api/calendar/status (app/settings/page.tsx:1493)"}, "properties": {"repobilityId": "edb7de446d1c67d8", "scanner": "scanner-primary", "fingerprint": "58e5a79ae2acb4b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d3c27b960a57b26", "level": "error", "message": {"text": "Dangling fetch: GET /api/settings/calendar-sync (app/settings/page.tsx:1506)"}, "properties": {"repobilityId": "c928bb72f0f6ccd5", "scanner": "scanner-primary", "fingerprint": "0d3c27b960a57b26", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-37fb7c68a973f01d", "level": "error", "message": {"text": "Dangling fetch: GET /api/calendar/calendars (app/settings/page.tsx:1519)"}, "properties": {"repobilityId": "d9233553476771c9", "scanner": "scanner-primary", "fingerprint": "37fb7c68a973f01d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-85410ec154efd2f4", "level": "error", "message": {"text": "Dangling fetch: PUT /api/calendar/calendars (app/settings/page.tsx:1538)"}, "properties": {"repobilityId": "640ef9d607a484ba", "scanner": "scanner-primary", "fingerprint": "85410ec154efd2f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b4272d3717165725", "level": "error", "message": {"text": "Dangling fetch: PUT /api/settings/calendar-sync (app/settings/page.tsx:1554)"}, "properties": {"repobilityId": "4318e33a13b6eacb", "scanner": "scanner-primary", "fingerprint": "b4272d3717165725", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-92ce056b637cd388", "level": "error", "message": {"text": "Dangling fetch: POST /api/calendar/disconnect (app/settings/page.tsx:1571)"}, "properties": {"repobilityId": "1aaba3a965c7a94f", "scanner": "scanner-primary", "fingerprint": "92ce056b637cd388", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d3d3415653bd83f6", "level": "error", "message": {"text": "Dangling fetch: GET /api/user-preferences/tour (app/settings/page.tsx:1832)"}, "properties": {"repobilityId": "bd8dcf9738970ec6", "scanner": "scanner-primary", "fingerprint": "d3d3415653bd83f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-84460a33b0987308", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/settings/page.tsx:1833)"}, "properties": {"repobilityId": "833fda5c6b5208b6", "scanner": "scanner-primary", "fingerprint": "84460a33b0987308", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ad30657be70e1bfd", "level": "error", "message": {"text": "Dangling fetch: POST /api/user-preferences/tour (app/settings/page.tsx:1852)"}, "properties": {"repobilityId": "4808159e1f0b00b0", "scanner": "scanner-primary", "fingerprint": "ad30657be70e1bfd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4405fbd331f70641", "level": "error", "message": {"text": "Dangling fetch: POST /api/settings/sessions (app/settings/sessions/page.tsx:196)"}, "properties": {"repobilityId": "74cf2cb4ce21c8b0", "scanner": "scanner-primary", "fingerprint": "4405fbd331f70641", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ab8886b7c0b25514", "level": "error", "message": {"text": "Dangling fetch: GET /api/settings/sessions (app/settings/sessions/page.tsx:216)"}, "properties": {"repobilityId": "0effe67fbef29e1d", "scanner": "scanner-primary", "fingerprint": "ab8886b7c0b25514", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0a01731fc862e192", "level": "error", "message": {"text": "Dangling fetch: GET /api/user/preferences (app/settings/sessions/page.tsx:236)"}, "properties": {"repobilityId": "80dad0adb8ee29d5", "scanner": "scanner-primary", "fingerprint": "0a01731fc862e192", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0816cab02fdba9b5", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/settings/sessions/${id} (app/settings/sessions/page.tsx:265)"}, "properties": {"repobilityId": "3632ced9df716f8a", "scanner": "scanner-primary", "fingerprint": "0816cab02fdba9b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76b8cb3f95fda661", "level": "error", "message": {"text": "Dangling fetch: POST /api/settings/sessions/revoke-all (app/settings/sessions/page.tsx:282)"}, "properties": {"repobilityId": "4b03b098c2616dff", "scanner": "scanner-primary", "fingerprint": "76b8cb3f95fda661", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e6625adb362b9751", "level": "error", "message": {"text": "Dangling fetch: GET /api/user/preferences (app/settings/sessions/page.tsx:312)"}, "properties": {"repobilityId": "db0c1841dde49b84", "scanner": "scanner-primary", "fingerprint": "e6625adb362b9751", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fe8192eadd1a858f", "level": "error", "message": {"text": "Dangling fetch: PUT /api/user/preferences (app/settings/sessions/page.tsx:319)"}, "properties": {"repobilityId": "06e397ff6efd0285", "scanner": "scanner-primary", "fingerprint": "fe8192eadd1a858f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c30e236846c04566", "level": "error", "message": {"text": "Dangling fetch: GET /api/calendar/status (app/settings/calendar-setup/page.tsx:91)"}, "properties": {"repobilityId": "15544a0844df2ba9", "scanner": "scanner-primary", "fingerprint": "c30e236846c04566", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-38dccb902dc6dd20", "level": "error", "message": {"text": "Dangling fetch: GET /api/calendar/my-assignments (app/settings/calendar-setup/page.tsx:124)"}, "properties": {"repobilityId": "afd62bbe67c80061", "scanner": "scanner-primary", "fingerprint": "38dccb902dc6dd20", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-55241b2023cada0d", "level": "error", "message": {"text": "Dangling fetch: POST /api/calendar/sync-my-blocks (app/settings/calendar-setup/page.tsx:155)"}, "properties": {"repobilityId": "93a8dc23f1fc8ffb", "scanner": "scanner-primary", "fingerprint": "55241b2023cada0d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c93d1e4298426712", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/instructor/page.tsx:124)"}, "properties": {"repobilityId": "3364e6053d918e89", "scanner": "scanner-primary", "fingerprint": "c93d1e4298426712", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9fff61201d0a1b02", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/certifications?instructorId=${userData.user.id} (app/instructor/page.tsx:130)"}, "properties": {"repobilityId": "75e0608fe3beeb35", "scanner": "scanner-primary", "fingerprint": "9fff61201d0a1b02", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-11f43d855eaea117", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/upcoming-labs (app/instructor/page.tsx:165)"}, "properties": {"repobilityId": "35f367668fbd0914", "scanner": "scanner-primary", "fingerprint": "11f43d855eaea117", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aea75d52fb31b0b5", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/instructor/ce/page.tsx:87)"}, "properties": {"repobilityId": "24a8f994110591dc", "scanner": "scanner-primary", "fingerprint": "aea75d52fb31b0b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9ce581f392c2bbf9", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/certifications?instructorId=${userData.user.id}&includeExpired=true (app/instructor/ce/page.tsx:93)"}, "properties": {"repobilityId": "cab2b1773717d30c", "scanner": "scanner-primary", "fingerprint": "9ce581f392c2bbf9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6cbfe60ab05e6894", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/ce-records (app/instructor/ce/page.tsx:100)"}, "properties": {"repobilityId": "03af1bda12a5e0c7", "scanner": "scanner-primary", "fingerprint": "6cbfe60ab05e6894", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8a8e8cb678b5c0c8", "level": "error", "message": {"text": "Dangling fetch: POST /api/instructor/ce-records (app/instructor/ce/page.tsx:127)"}, "properties": {"repobilityId": "7120caa2621626ff", "scanner": "scanner-primary", "fingerprint": "8a8e8cb678b5c0c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-77313b19c5fc3f91", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/instructor/ce-records/${id} (app/instructor/ce/page.tsx:159)"}, "properties": {"repobilityId": "20e62698c8f02802", "scanner": "scanner-primary", "fingerprint": "77313b19c5fc3f91", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b1c0954d1ee9a1d8", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/instructor/my-stats/page.tsx:319)"}, "properties": {"repobilityId": "4e32d0f19d8e8e40", "scanner": "scanner-primary", "fingerprint": "b1c0954d1ee9a1d8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6328599c06708747", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/my-stats?period=${p} (app/instructor/my-stats/page.tsx:332)"}, "properties": {"repobilityId": "ab123984883c185a", "scanner": "scanner-primary", "fingerprint": "6328599c06708747", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a56490699e91d950", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/instructor/email-history/page.tsx:117)"}, "properties": {"repobilityId": "2de57245452fda91", "scanner": "scanner-primary", "fingerprint": "a56490699e91d950", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-abae948b0057afc0", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/email-history?limit=${PAGE_SIZE}&offset=${offset} (app/instructor/email-history/page.tsx:124)"}, "properties": {"repobilityId": "0c4bc74d46942119", "scanner": "scanner-primary", "fingerprint": "abae948b0057afc0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1cc42643a69383c9", "level": "error", "message": {"text": "Dangling fetch: POST /api/instructor/email-history (app/instructor/email-history/page.tsx:147)"}, "properties": {"repobilityId": "f60937181ddd72aa", "scanner": "scanner-primary", "fingerprint": "1cc42643a69383c9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e2ecea9b2792b4a", "level": "error", "message": {"text": "Dangling fetch: POST /api/instructor/email-history (app/instructor/email-history/page.tsx:173)"}, "properties": {"repobilityId": "29aa57680607cac5", "scanner": "scanner-primary", "fingerprint": "2e2ecea9b2792b4a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a60ad363279d97f9", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/instructor/certifications/page.tsx:128)"}, "properties": {"repobilityId": "973a7acde3459171", "scanner": "scanner-primary", "fingerprint": "a60ad363279d97f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-298b7356b5d1c264", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/certifications?instructorId=${userData.user.id}&includeExpired=true (app/instructor/certifications/page.tsx:134)"}, "properties": {"repobilityId": "60753f83b047243b", "scanner": "scanner-primary", "fingerprint": "298b7356b5d1c264", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8c0856d52832ca4a", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/certifications/${editingCert.id} (app/instructor/certifications/page.tsx:208)"}, "properties": {"repobilityId": "6203e0be3bb844eb", "scanner": "scanner-primary", "fingerprint": "8c0856d52832ca4a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-918884c4ca778de8", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/certifications (app/instructor/certifications/page.tsx:214)"}, "properties": {"repobilityId": "67ab9d4f6425f2bf", "scanner": "scanner-primary", "fingerprint": "918884c4ca778de8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d7ec1520e48e73fb", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/certifications/${id} (app/instructor/certifications/page.tsx:239)"}, "properties": {"repobilityId": "9352192bd09a93c9", "scanner": "scanner-primary", "fingerprint": "d7ec1520e48e73fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f8158745b4998275", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/instructor/teaching/page.tsx:94)"}, "properties": {"repobilityId": "22f146c80f51be8b", "scanner": "scanner-primary", "fingerprint": "f8158745b4998275", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-90cf42eb3755eae3", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/teaching-log?year=${selectedYear} (app/instructor/teaching/page.tsx:100)"}, "properties": {"repobilityId": "5b8cf254e531b2b7", "scanner": "scanner-primary", "fingerprint": "90cf42eb3755eae3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ac49248a77ed5481", "level": "error", "message": {"text": "Dangling fetch: POST /api/instructor/teaching-log (app/instructor/teaching/page.tsx:129)"}, "properties": {"repobilityId": "5f77871f1fc4b5a2", "scanner": "scanner-primary", "fingerprint": "ac49248a77ed5481", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b602ca8608a3a7ac", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/instructor/teaching-log/${id} (app/instructor/teaching/page.tsx:169)"}, "properties": {"repobilityId": "a9bcc4988f1cbfbb", "scanner": "scanner-primary", "fingerprint": "b602ca8608a3a7ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8c46b9281762f7b3", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/instructor/time-clock/page.tsx:132)"}, "properties": {"repobilityId": "d5105551bf3b1b58", "scanner": "scanner-primary", "fingerprint": "8c46b9281762f7b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f4e853d5d49d455e", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/time-clock (app/instructor/time-clock/page.tsx:150)"}, "properties": {"repobilityId": "9cec22ac34bd452a", "scanner": "scanner-primary", "fingerprint": "f4e853d5d49d455e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0adb09f484d9b9a6", "level": "error", "message": {"text": "Dangling fetch: POST /api/instructor/time-clock (app/instructor/time-clock/page.tsx:193)"}, "properties": {"repobilityId": "4ac4fe93142b4857", "scanner": "scanner-primary", "fingerprint": "0adb09f484d9b9a6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-882955dbf6dd280e", "level": "error", "message": {"text": "Dangling fetch: PUT /api/instructor/time-clock (app/instructor/time-clock/page.tsx:216)"}, "properties": {"repobilityId": "52086949f995b8e7", "scanner": "scanner-primary", "fingerprint": "882955dbf6dd280e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6512e0ec443f3e4b", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/history?${params.toString()} (app/instructor/history/page.tsx:190)"}, "properties": {"repobilityId": "edb26381037428cc", "scanner": "scanner-primary", "fingerprint": "6512e0ec443f3e4b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4797efa9479c218", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/student/layout.tsx:70)"}, "properties": {"repobilityId": "dc857f6df82e9a5a", "scanner": "scanner-primary", "fingerprint": "c4797efa9479c218", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-94c1b26a985df813", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/student/page.tsx:143)"}, "properties": {"repobilityId": "d9d64cbcf3439893", "scanner": "scanner-primary", "fingerprint": "94c1b26a985df813", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9fd5bbab99a736f1", "level": "error", "message": {"text": "Dangling fetch: GET /api/student/completions (app/student/page.tsx:150)"}, "properties": {"repobilityId": "23793f4463290a08", "scanner": "scanner-primary", "fingerprint": "9fd5bbab99a736f1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f895b78f679dfe0d", "level": "error", "message": {"text": "Dangling fetch: GET /api/student/ekg-scenarios (app/student/page.tsx:172)"}, "properties": {"repobilityId": "8acd9ab6293966e9", "scanner": "scanner-primary", "fingerprint": "f895b78f679dfe0d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c591c75d161fe969", "level": "error", "message": {"text": "Dangling fetch: GET /api/student/labs (app/student/labs/page.tsx:164)"}, "properties": {"repobilityId": "82dcebe119219253", "scanner": "scanner-primary", "fingerprint": "c591c75d161fe969", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9241115738d61b90", "level": "error", "message": {"text": "Dangling fetch: GET /api/student/profile (app/student/profile/page.tsx:270)"}, "properties": {"repobilityId": "7ebad8d7a806ebf9", "scanner": "scanner-primary", "fingerprint": "9241115738d61b90", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-33c8234f2a729d20", "level": "error", "message": {"text": "Dangling fetch: GET /api/student/my-progress (app/student/my-progress/page.tsx:269)"}, "properties": {"repobilityId": "679d55153f6a1799", "scanner": "scanner-primary", "fingerprint": "33c8234f2a729d20", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5f57caf50659b138", "level": "error", "message": {"text": "Dangling fetch: GET /api/student/skill-sheets (app/student/skill-sheets/page.tsx:135)"}, "properties": {"repobilityId": "a533df827d8afb6d", "scanner": "scanner-primary", "fingerprint": "5f57caf50659b138", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-469f294937f45315", "level": "error", "message": {"text": "Dangling fetch: GET /api/student/completions (app/student/completions/page.tsx:97)"}, "properties": {"repobilityId": "275c089a25d7035a", "scanner": "scanner-primary", "fingerprint": "469f294937f45315", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-126eaeeb34fb7f4b", "level": "error", "message": {"text": "Dangling fetch: GET /api/student/attendance-appeals (app/student/attendance-appeals/page.tsx:91)"}, "properties": {"repobilityId": "cf759f14f5f44731", "scanner": "scanner-primary", "fingerprint": "126eaeeb34fb7f4b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0abf0b1842bd36c3", "level": "error", "message": {"text": "Dangling fetch: POST /api/student/attendance-appeals (app/student/attendance-appeals/page.tsx:130)"}, "properties": {"repobilityId": "6c918404d7ce0959", "scanner": "scanner-primary", "fingerprint": "0abf0b1842bd36c3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f9ecba69020757a0", "level": "error", "message": {"text": "Dangling fetch: GET /api/peer-evaluations (app/student/peer-eval/page.tsx:205)"}, "properties": {"repobilityId": "e1405fdc49ab59cc", "scanner": "scanner-primary", "fingerprint": "f9ecba69020757a0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-688b109baa381248", "level": "error", "message": {"text": "Dangling fetch: POST /api/peer-evaluations (app/student/peer-eval/page.tsx:283)"}, "properties": {"repobilityId": "5d2f653d6899ad65", "scanner": "scanner-primary", "fingerprint": "688b109baa381248", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dd7aea27ee759b3e", "level": "error", "message": {"text": "Dangling fetch: GET /api/student/skill-evaluations?evaluation_id=${evaluationId} (app/student/skill-evaluations/[id]/page.tsx:78)"}, "properties": {"repobilityId": "5dbf92f444c255fa", "scanner": "scanner-primary", "fingerprint": "dd7aea27ee759b3e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8b92ee8a80c8d0cd", "level": "error", "message": {"text": "Dangling fetch: GET /api/skill-sheets/${eval_.skill_sheet.id} (app/student/skill-evaluations/[id]/page.tsx:86)"}, "properties": {"repobilityId": "2eb3f0e4755ca8a6", "scanner": "scanner-primary", "fingerprint": "8b92ee8a80c8d0cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3774d05d5723639b", "level": "error", "message": {"text": "Dangling fetch: GET /api/student/available-labs?${params.toString()} (app/student/available-labs/page.tsx:168)"}, "properties": {"repobilityId": "ee946a21a164453c", "scanner": "scanner-primary", "fingerprint": "3774d05d5723639b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-deb2219a76bd3482", "level": "error", "message": {"text": "Dangling fetch: GET /api/student/available-labs/my-signups (app/student/available-labs/page.tsx:180)"}, "properties": {"repobilityId": "c9fb0a678fba7bce", "scanner": "scanner-primary", "fingerprint": "deb2219a76bd3482", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0e6730b794c11210", "level": "error", "message": {"text": "Dangling fetch: POST /api/student/available-labs/signup (app/student/available-labs/page.tsx:214)"}, "properties": {"repobilityId": "4764aa6ac7cd9049", "scanner": "scanner-primary", "fingerprint": "0e6730b794c11210", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2db7718795e78bf8", "level": "error", "message": {"text": "Dangling fetch: POST /api/student/available-labs/cancel (app/student/available-labs/page.tsx:251)"}, "properties": {"repobilityId": "4b88ee5737e4e685", "scanner": "scanner-primary", "fingerprint": "2db7718795e78bf8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2bf49234dde4d8e1", "level": "error", "message": {"text": "Dangling fetch: GET /api/student/documents (app/student/documents/page.tsx:180)"}, "properties": {"repobilityId": "017f32f344fb0921", "scanner": "scanner-primary", "fingerprint": "2bf49234dde4d8e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1fb0420c75c56b7f", "level": "error", "message": {"text": "Dangling fetch: GET /api/student/documents/requests (app/student/documents/page.tsx:181)"}, "properties": {"repobilityId": "4ba9d2a45edb232e", "scanner": "scanner-primary", "fingerprint": "1fb0420c75c56b7f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-06ff287f5f29ad76", "level": "error", "message": {"text": "Dangling fetch: POST /api/student/documents (app/student/documents/page.tsx:216)"}, "properties": {"repobilityId": "50dc6242f64567a4", "scanner": "scanner-primary", "fingerprint": "06ff287f5f29ad76", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-636ea9a39e342755", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/student/documents/${docId} (app/student/documents/page.tsx:244)"}, "properties": {"repobilityId": "3b4807a4bcf473d1", "scanner": "scanner-primary", "fingerprint": "636ea9a39e342755", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-23fd847acd79d6e2", "level": "error", "message": {"text": "Dangling fetch: POST /api/student/documents/requests (app/student/documents/page.tsx:262)"}, "properties": {"repobilityId": "f933f6c3bd3d8a6e", "scanner": "scanner-primary", "fingerprint": "23fd847acd79d6e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7d7dd88802f5893f", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/onboarding/page.tsx:197)"}, "properties": {"repobilityId": "8143c0dea1d12d24", "scanner": "scanner-primary", "fingerprint": "7d7dd88802f5893f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8f52748a9c784d9d", "level": "error", "message": {"text": "Dangling fetch: GET /api/onboarding/assignments (app/onboarding/page.tsx:216)"}, "properties": {"repobilityId": "973f6cfaafa6b2f4", "scanner": "scanner-primary", "fingerprint": "8f52748a9c784d9d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0e4b3eeceab1455a", "level": "error", "message": {"text": "Dangling fetch: GET /api/onboarding/templates (app/onboarding/page.tsx:217)"}, "properties": {"repobilityId": "524be15decf69d15", "scanner": "scanner-primary", "fingerprint": "0e4b3eeceab1455a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bb82150908d06110", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/instructors (app/onboarding/page.tsx:218)"}, "properties": {"repobilityId": "37bfa27a22fc4491", "scanner": "scanner-primary", "fingerprint": "bb82150908d06110", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cbb3ace1a01bbe35", "level": "error", "message": {"text": "Dangling fetch: GET /api/onboarding/dashboard (app/onboarding/page.tsx:243)"}, "properties": {"repobilityId": "7e48793198756ea2", "scanner": "scanner-primary", "fingerprint": "cbb3ace1a01bbe35", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-de921ed59a2612df", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/onboarding/tasks/${task.progressId}/progress (app/onboarding/page.tsx:290)"}, "properties": {"repobilityId": "babcfa4910c46978", "scanner": "scanner-primary", "fingerprint": "de921ed59a2612df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cfda8db94b36057c", "level": "error", "message": {"text": "Dangling fetch: POST /api/onboarding/assignments (app/onboarding/page.tsx:360)"}, "properties": {"repobilityId": "8ced3a627247b23b", "scanner": "scanner-primary", "fingerprint": "cfda8db94b36057c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-716c13e1b382e952", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/onboarding/assignments?id=${assignmentId} (app/onboarding/page.tsx:390)"}, "properties": {"repobilityId": "2aa38e354c572163", "scanner": "scanner-primary", "fingerprint": "716c13e1b382e952", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e7aab57885729f52", "level": "error", "message": {"text": "Dangling fetch: GET /api/open-lab/sessions (app/open-lab/page.tsx:86)"}, "properties": {"repobilityId": "45b8bd56a5653046", "scanner": "scanner-primary", "fingerprint": "e7aab57885729f52", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4a82a970c5b00abc", "level": "error", "message": {"text": "Dangling fetch: GET /api/open-lab/instructors (app/open-lab/page.tsx:87)"}, "properties": {"repobilityId": "9d83ba7df68d6c9f", "scanner": "scanner-primary", "fingerprint": "4a82a970c5b00abc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1e81178aa311f7ab", "level": "error", "message": {"text": "Dangling fetch: POST /api/open-lab/signup (app/open-lab/page.tsx:116)"}, "properties": {"repobilityId": "1f2f5fcdda3be6ff", "scanner": "scanner-primary", "fingerprint": "1e81178aa311f7ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-380563d2611b2b9d", "level": "error", "message": {"text": "Dangling fetch: GET /api/open-lab/signup/${token} (app/open-lab/edit/[token]/page.tsx:89)"}, "properties": {"repobilityId": "c2f59eb0efa8f489", "scanner": "scanner-primary", "fingerprint": "380563d2611b2b9d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-47c6f4e458db4898", "level": "error", "message": {"text": "Dangling fetch: GET /api/open-lab/sessions (app/open-lab/edit/[token]/page.tsx:90)"}, "properties": {"repobilityId": "3ea177b04be245c5", "scanner": "scanner-primary", "fingerprint": "47c6f4e458db4898", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4bed989afd8c5808", "level": "error", "message": {"text": "Dangling fetch: GET /api/open-lab/instructors (app/open-lab/edit/[token]/page.tsx:91)"}, "properties": {"repobilityId": "68e5cd3141cc5a62", "scanner": "scanner-primary", "fingerprint": "4bed989afd8c5808", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f6d904cd79c8149f", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/open-lab/signup/${token} (app/open-lab/edit/[token]/page.tsx:139)"}, "properties": {"repobilityId": "e9f4f8b0359c67d4", "scanner": "scanner-primary", "fingerprint": "f6d904cd79c8149f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-94a7f06e75a40173", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/open-lab/signup/${token} (app/open-lab/edit/[token]/page.tsx:169)"}, "properties": {"repobilityId": "a7248898f849183f", "scanner": "scanner-primary", "fingerprint": "94a7f06e75a40173", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c58fd32f100b8f87", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/calendar/page.tsx:253)"}, "properties": {"repobilityId": "aed5f42a17b10098", "scanner": "scanner-primary", "fingerprint": "c58fd32f100b8f87", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d9a595fcadf9d0d4", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=false (app/calendar/page.tsx:254)"}, "properties": {"repobilityId": "57554ef148c970ba", "scanner": "scanner-primary", "fingerprint": "d9a595fcadf9d0d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-855f1e46299150a1", "level": "error", "message": {"text": "Dangling fetch: GET /api/calendar/unified?${params} (app/calendar/page.tsx:670)"}, "properties": {"repobilityId": "b1c5cc12bc625957", "scanner": "scanner-primary", "fingerprint": "855f1e46299150a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d5242c56e51b736b", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/lvfr-platoons?start_date=${dateRange.start}&end_date=${dateRange.end} (app/calendar/page.tsx:702)"}, "properties": {"repobilityId": "7403089adcab3df9", "scanner": "scanner-primary", "fingerprint": "d5242c56e51b736b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-625189acec8784fb", "level": "error", "message": {"text": "Dangling fetch: GET /api/calendar/instructor-filter-options (app/calendar/page.tsx:735)"}, "properties": {"repobilityId": "ba14e98e7ed1a889", "scanner": "scanner-primary", "fingerprint": "625189acec8784fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c6dadfab58682e6d", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/instructors (app/calendar/page.tsx:754)"}, "properties": {"repobilityId": "49a83f0aeb29d9ae", "scanner": "scanner-primary", "fingerprint": "c6dadfab58682e6d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2a484632acba2b8a", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/tasks/page.tsx:158)"}, "properties": {"repobilityId": "75b4bb9bc7630d8d", "scanner": "scanner-primary", "fingerprint": "2a484632acba2b8a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fab88f0a942696c0", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/list?activeOnly=true (app/tasks/page.tsx:170)"}, "properties": {"repobilityId": "3b3e3bdb921b0a89", "scanner": "scanner-primary", "fingerprint": "fab88f0a942696c0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ba0e9f6555281ce3", "level": "error", "message": {"text": "Dangling fetch: GET /api/tasks?${params} (app/tasks/page.tsx:191)"}, "properties": {"repobilityId": "458d0ff3f4ca2971", "scanner": "scanner-primary", "fingerprint": "ba0e9f6555281ce3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-911eb821c41babce", "level": "error", "message": {"text": "Dangling fetch: POST /api/tasks (app/tasks/page.tsx:224)"}, "properties": {"repobilityId": "97d61a02f12a13ca", "scanner": "scanner-primary", "fingerprint": "911eb821c41babce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6ab406676bd5f75c", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/tasks/${taskId} (app/tasks/page.tsx:272)"}, "properties": {"repobilityId": "003a508689821ebc", "scanner": "scanner-primary", "fingerprint": "6ab406676bd5f75c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-14f7e71d3c860b6d", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/tasks/${taskId} (app/tasks/page.tsx:292)"}, "properties": {"repobilityId": "7ec0704b5471be8b", "scanner": "scanner-primary", "fingerprint": "14f7e71d3c860b6d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-064d05458637548b", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/tasks/bulk (app/tasks/page.tsx:347)"}, "properties": {"repobilityId": "ba6957041fde042d", "scanner": "scanner-primary", "fingerprint": "064d05458637548b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-42a3bcc26262c1dd", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/tasks/bulk (app/tasks/page.tsx:370)"}, "properties": {"repobilityId": "681264e803142a18", "scanner": "scanner-primary", "fingerprint": "42a3bcc26262c1dd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-07df93482db5cfbf", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/tasks/[id]/page.tsx:95)"}, "properties": {"repobilityId": "4d6c5b1f9e666e4c", "scanner": "scanner-primary", "fingerprint": "07df93482db5cfbf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d5c741df4b8a6cf5", "level": "error", "message": {"text": "Dangling fetch: GET /api/tasks/${taskId} (app/tasks/[id]/page.tsx:108)"}, "properties": {"repobilityId": "ae9403e61fd880cc", "scanner": "scanner-primary", "fingerprint": "d5c741df4b8a6cf5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6052c026258dac3e", "level": "error", "message": {"text": "Dangling fetch: POST /api/tasks/${taskId}/comments (app/tasks/[id]/page.tsx:137)"}, "properties": {"repobilityId": "751bb1aaad5b24dc", "scanner": "scanner-primary", "fingerprint": "6052c026258dac3e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d3d52843a75bb00", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/tasks/${taskId} (app/tasks/[id]/page.tsx:156)"}, "properties": {"repobilityId": "6acfc891f9023ac1", "scanner": "scanner-primary", "fingerprint": "0d3d52843a75bb00", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-58fcb72a7bd96fd1", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/tasks/${taskId} (app/tasks/[id]/page.tsx:177)"}, "properties": {"repobilityId": "0acf0782e797e8ee", "scanner": "scanner-primary", "fingerprint": "58fcb72a7bd96fd1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9dbf8e7df8c187ee", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/tasks/${taskId} (app/tasks/[id]/page.tsx:197)"}, "properties": {"repobilityId": "9ae7e4b163f74f14", "scanner": "scanner-primary", "fingerprint": "9dbf8e7df8c187ee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a377936c1dbefbad", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/tasks/${taskId} (app/tasks/[id]/page.tsx:225)"}, "properties": {"repobilityId": "336818b3fde84c1d", "scanner": "scanner-primary", "fingerprint": "a377936c1dbefbad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-178410cf24459142", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduling/page.tsx:178)"}, "properties": {"repobilityId": "430712a459e6e16e", "scanner": "scanner-primary", "fingerprint": "178410cf24459142", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ffdb1d7a10112fcd", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/substitute-requests?status=pending (app/scheduling/page.tsx:202)"}, "properties": {"repobilityId": "e8687d77e6f94f74", "scanner": "scanner-primary", "fingerprint": "ffdb1d7a10112fcd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5bb96fa987f40dc9", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/part-timer-status (app/scheduling/page.tsx:224)"}, "properties": {"repobilityId": "65721a1c43e453cf", "scanner": "scanner-primary", "fingerprint": "5bb96fa987f40dc9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7f1942f605545733", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/hours-target (app/scheduling/page.tsx:252)"}, "properties": {"repobilityId": "c446d4ab7f3eec97", "scanner": "scanner-primary", "fingerprint": "7f1942f605545733", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8715a900ed41a970", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/unavailable-days (app/scheduling/page.tsx:269)"}, "properties": {"repobilityId": "1296c5c8ec48e27b", "scanner": "scanner-primary", "fingerprint": "8715a900ed41a970", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ced7db48fad9d8be", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/notify-lab-availability (app/scheduling/page.tsx:315)"}, "properties": {"repobilityId": "2fc841ccab4e9d50", "scanner": "scanner-primary", "fingerprint": "ced7db48fad9d8be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a90608412e07a0d9", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/scheduling/coverage-requests/${id} (app/scheduling/page.tsx:332)"}, "properties": {"repobilityId": "480598332bcf1c99", "scanner": "scanner-primary", "fingerprint": "a90608412e07a0d9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-485c379e9b182b3a", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/shifts?start_date=${monthStart}&end_date=${monthEnd}&include_filled=true (app/scheduling/shifts/page.tsx:179)"}, "properties": {"repobilityId": "3bac7da75d23136f", "scanner": "scanner-primary", "fingerprint": "485c379e9b182b3a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9ee817855951da26", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/shifts/${shiftId} (app/scheduling/shifts/page.tsx:279)"}, "properties": {"repobilityId": "37e486e207278182", "scanner": "scanner-primary", "fingerprint": "9ee817855951da26", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6ba2d370f6e6a412", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduling/shifts/page.tsx:309)"}, "properties": {"repobilityId": "682e41e2e5b8e340", "scanner": "scanner-primary", "fingerprint": "6ba2d370f6e6a412", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6a90fc54f2a0135f", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/shifts?${params} (app/scheduling/shifts/page.tsx:334)"}, "properties": {"repobilityId": "7fe77e1295f97a2c", "scanner": "scanner-primary", "fingerprint": "6a90fc54f2a0135f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea169eaef9cc15b1", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/trades?mine=true (app/scheduling/shifts/page.tsx:356)"}, "properties": {"repobilityId": "db27baf89c0f259e", "scanner": "scanner-primary", "fingerprint": "ea169eaef9cc15b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2a7753c7bc4e2269", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/trades (app/scheduling/shifts/page.tsx:377)"}, "properties": {"repobilityId": "0b81578c62f6f124", "scanner": "scanner-primary", "fingerprint": "2a7753c7bc4e2269", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6b538b119244ad0f", "level": "error", "message": {"text": "Dangling fetch: PUT /api/scheduling/trades (app/scheduling/shifts/page.tsx:410)"}, "properties": {"repobilityId": "5d49312aad495061", "scanner": "scanner-primary", "fingerprint": "6b538b119244ad0f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9dade5ac4c3bf027", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/shifts/${selectedShift.id}/signup (app/scheduling/shifts/page.tsx:447)"}, "properties": {"repobilityId": "60195bd7e4a38afb", "scanner": "scanner-primary", "fingerprint": "9dade5ac4c3bf027", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9fc2719ef7298ec9", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/scheduling/shifts/${shiftId}/signup (app/scheduling/shifts/page.tsx:474)"}, "properties": {"repobilityId": "a82d4baa9fec816a", "scanner": "scanner-primary", "fingerprint": "9fc2719ef7298ec9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-547e29777b94306d", "level": "error", "message": {"text": "Dangling fetch: PUT /api/scheduling/shifts/${editingShift.id} (app/scheduling/shifts/page.tsx:515)"}, "properties": {"repobilityId": "d611c0b964c9f5ab", "scanner": "scanner-primary", "fingerprint": "547e29777b94306d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3c1f3ef28e9f33d0", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/scheduling/shifts/${shiftId} (app/scheduling/shifts/page.tsx:552)"}, "properties": {"repobilityId": "bc2224e02f84d762", "scanner": "scanner-primary", "fingerprint": "3c1f3ef28e9f33d0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b42a5961b70dc7d2", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduling/shifts/new/page.tsx:166)"}, "properties": {"repobilityId": "65523e7438bfce99", "scanner": "scanner-primary", "fingerprint": "b42a5961b70dc7d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1f182daa2bbcbecf", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days?startDate=${today}&endDate=${endDate}&limit=100 (app/scheduling/shifts/new/page.tsx:195)"}, "properties": {"repobilityId": "918762bcde7c7926", "scanner": "scanner-primary", "fingerprint": "1f182daa2bbcbecf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f40efe84b0bcd7ab", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/shifts?start_date=${today}&end_date=${endDate} (app/scheduling/shifts/new/page.tsx:196)"}, "properties": {"repobilityId": "d73b0b232081dc99", "scanner": "scanner-primary", "fingerprint": "f40efe84b0bcd7ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f980c15ce30792c6", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/shifts (app/scheduling/shifts/new/page.tsx:451)"}, "properties": {"repobilityId": "372fff2692c36d1d", "scanner": "scanner-primary", "fingerprint": "f980c15ce30792c6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f184c6764d3eb88d", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/shifts (app/scheduling/shifts/new/page.tsx:477)"}, "properties": {"repobilityId": "ebb7179d3aae73c5", "scanner": "scanner-primary", "fingerprint": "f184c6764d3eb88d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3884389d8556ba63", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduling/polls/page.tsx:38)"}, "properties": {"repobilityId": "cc5a442312faa6a2", "scanner": "scanner-primary", "fingerprint": "3884389d8556ba63", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-787011477b3363d9", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/polls?id=${pollId} (app/scheduling/polls/page.tsx:79)"}, "properties": {"repobilityId": "c8ec617f3a1fb7bc", "scanner": "scanner-primary", "fingerprint": "787011477b3363d9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3b93122086ed17d8", "level": "error", "message": {"text": "Dangling fetch: POST /api/polls (app/scheduling/polls/create/page.tsx:29)"}, "properties": {"repobilityId": "7bcb7242cd8cb3a6", "scanner": "scanner-primary", "fingerprint": "3b93122086ed17d8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-22f77afb5ad1f0a9", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/scheduling/resource-bookings/resources (app/scheduling/resource-bookings/page.tsx:194)"}, "properties": {"repobilityId": "4bebe234d7d80a1f", "scanner": "scanner-primary", "fingerprint": "22f77afb5ad1f0a9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b36304f54999a667", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/resource-bookings/resources (app/scheduling/resource-bookings/page.tsx:200)"}, "properties": {"repobilityId": "3b85ed76ba0223e8", "scanner": "scanner-primary", "fingerprint": "b36304f54999a667", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-499f6f351b72b46c", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/resource-bookings (app/scheduling/resource-bookings/page.tsx:377)"}, "properties": {"repobilityId": "e66b15d71d86f7ba", "scanner": "scanner-primary", "fingerprint": "499f6f351b72b46c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-433a8056aa14ad58", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduling/resource-bookings/page.tsx:689)"}, "properties": {"repobilityId": "d62203d80877cf57", "scanner": "scanner-primary", "fingerprint": "433a8056aa14ad58", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-17814b8121aa1c24", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/resource-bookings/resources?${params} (app/scheduling/resource-bookings/page.tsx:707)"}, "properties": {"repobilityId": "1538c75cb605a3bd", "scanner": "scanner-primary", "fingerprint": "17814b8121aa1c24", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f26f2d5f97081adf", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/resource-bookings?${params} (app/scheduling/resource-bookings/page.tsx:728)"}, "properties": {"repobilityId": "8f7068ccb72ba398", "scanner": "scanner-primary", "fingerprint": "f26f2d5f97081adf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b5cfc13cd427a4be", "level": "error", "message": {"text": "Dangling fetch: PUT /api/scheduling/resource-bookings/${booking.id} (app/scheduling/resource-bookings/page.tsx:747)"}, "properties": {"repobilityId": "6654afab26f4fa8d", "scanner": "scanner-primary", "fingerprint": "b5cfc13cd427a4be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2872829e280cd49d", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/scheduling/resource-bookings/${booking.id} (app/scheduling/resource-bookings/page.tsx:767)"}, "properties": {"repobilityId": "29f00b00df69582d", "scanner": "scanner-primary", "fingerprint": "2872829e280cd49d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5977490ac4acec6", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduling/availability/page.tsx:266)"}, "properties": {"repobilityId": "4dce6b3c057d0a8c", "scanner": "scanner-primary", "fingerprint": "c5977490ac4acec6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ba2cc26d6d6a76a4", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/availability?${params} (app/scheduling/availability/page.tsx:296)"}, "properties": {"repobilityId": "438597262a337b1d", "scanner": "scanner-primary", "fingerprint": "ba2cc26d6d6a76a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b1ff0945c563b902", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/availability/suggestions (app/scheduling/availability/page.tsx:308)"}, "properties": {"repobilityId": "f6aca576a8164ec8", "scanner": "scanner-primary", "fingerprint": "b1ff0945c563b902", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-819c7d5ebf1b5977", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/availability (app/scheduling/availability/page.tsx:338)"}, "properties": {"repobilityId": "08c668776c52f750", "scanner": "scanner-primary", "fingerprint": "819c7d5ebf1b5977", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2f6e666b0633bd1b", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/availability/bulk (app/scheduling/availability/page.tsx:373)"}, "properties": {"repobilityId": "7f3cffdf941c3a60", "scanner": "scanner-primary", "fingerprint": "2f6e666b0633bd1b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6d08e6be6bd6efc4", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/availability/bulk (app/scheduling/availability/page.tsx:481)"}, "properties": {"repobilityId": "d76fc56ed3a9461c", "scanner": "scanner-primary", "fingerprint": "6d08e6be6bd6efc4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4f55bce300357ce4", "level": "error", "message": {"text": "Dangling fetch: PUT /api/scheduling/availability/${editingEntry.id} (app/scheduling/availability/page.tsx:493)"}, "properties": {"repobilityId": "1e67d2579c053934", "scanner": "scanner-primary", "fingerprint": "4f55bce300357ce4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ffacea14c22696e2", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/availability (app/scheduling/availability/page.tsx:511)"}, "properties": {"repobilityId": "a124b6d3bd4640f4", "scanner": "scanner-primary", "fingerprint": "ffacea14c22696e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2abc6a43ff3ae511", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/scheduling/availability/${editingEntry.id} (app/scheduling/availability/page.tsx:543)"}, "properties": {"repobilityId": "119e5cf1d2b5f8bf", "scanner": "scanner-primary", "fingerprint": "2abc6a43ff3ae511", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b8fcf2d50974cbf", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/availability-status?week=${selectedWeek} (app/scheduling/availability/all/page.tsx:270)"}, "properties": {"repobilityId": "5697334b8b2f7470", "scanner": "scanner-primary", "fingerprint": "9b8fcf2d50974cbf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-45752a4289728188", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/send-availability-reminders (app/scheduling/availability/all/page.tsx:290)"}, "properties": {"repobilityId": "bc45adff6f987b20", "scanner": "scanner-primary", "fingerprint": "45752a4289728188", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b90eafd1a7102525", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/send-availability-reminders (app/scheduling/availability/all/page.tsx:311)"}, "properties": {"repobilityId": "7d6e100d0d64aced", "scanner": "scanner-primary", "fingerprint": "b90eafd1a7102525", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-960f78d74367e755", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduling/availability/all/page.tsx:1408)"}, "properties": {"repobilityId": "9d5d7ebc38d7de6b", "scanner": "scanner-primary", "fingerprint": "960f78d74367e755", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1713ac733a4bfcc2", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/availability/all?${params} (app/scheduling/availability/all/page.tsx:1435)"}, "properties": {"repobilityId": "21d69c8475641cc9", "scanner": "scanner-primary", "fingerprint": "1713ac733a4bfcc2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6dcfa9f42696da13", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/users?activeOnly=true&limit=100 (app/scheduling/team-availability/page.tsx:154)"}, "properties": {"repobilityId": "1783c1166c92bf1b", "scanner": "scanner-primary", "fingerprint": "6dcfa9f42696da13", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6b0a8bd05638bdbd", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/team-availability/saved (app/scheduling/team-availability/page.tsx:173)"}, "properties": {"repobilityId": "b3a08ea5982fe110", "scanner": "scanner-primary", "fingerprint": "6b0a8bd05638bdbd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-45b1153d67cf4a02", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/team-availability?${params} (app/scheduling/team-availability/page.tsx:208)"}, "properties": {"repobilityId": "4b158464bd90aabb", "scanner": "scanner-primary", "fingerprint": "45b1153d67cf4a02", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-24ebb0a3344d20d2", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/scheduling/team-availability/saved?id=${viewId} (app/scheduling/team-availability/page.tsx:253)"}, "properties": {"repobilityId": "b3e8ba4ab6cbbc45", "scanner": "scanner-primary", "fingerprint": "24ebb0a3344d20d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b1588cad64dd6483", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/team-availability (app/scheduling/team-availability/page.tsx:269)"}, "properties": {"repobilityId": "f918453d6cd3e2d6", "scanner": "scanner-primary", "fingerprint": "b1588cad64dd6483", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c65d3f9b7f2abc85", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduling/substitute-requests/page.tsx:176)"}, "properties": {"repobilityId": "55457d97db0de235", "scanner": "scanner-primary", "fingerprint": "c65d3f9b7f2abc85", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1f838b82e86eeb21", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/substitute-requests?${params.toString()} (app/scheduling/substitute-requests/page.tsx:197)"}, "properties": {"repobilityId": "df0621eaab24ea8b", "scanner": "scanner-primary", "fingerprint": "1f838b82e86eeb21", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-68652c269b72c210", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/history?startDate=${today} (app/scheduling/substitute-requests/page.tsx:218)"}, "properties": {"repobilityId": "6b943e983475cbd1", "scanner": "scanner-primary", "fingerprint": "68652c269b72c210", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-31c7cae38330ef34", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/substitute-requests (app/scheduling/substitute-requests/page.tsx:257)"}, "properties": {"repobilityId": "eb24f6e353ed56cd", "scanner": "scanner-primary", "fingerprint": "31c7cae38330ef34", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4648d38b47082298", "level": "error", "message": {"text": "Dangling fetch: PUT /api/scheduling/substitute-requests/${requestId} (app/scheduling/substitute-requests/page.tsx:289)"}, "properties": {"repobilityId": "4dbe4a87fffe35a7", "scanner": "scanner-primary", "fingerprint": "4648d38b47082298", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5f40f91c6714ef0f", "level": "error", "message": {"text": "Dangling fetch: PUT /api/scheduling/substitute-requests/${reviewingRequest.id} (app/scheduling/substitute-requests/page.tsx:318)"}, "properties": {"repobilityId": "7f6d0f82de9a087a", "scanner": "scanner-primary", "fingerprint": "5f40f91c6714ef0f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a38280b696b4950", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days?date=${blockDate} (app/scheduling/planner/page.tsx:618)"}, "properties": {"repobilityId": "570a431cae44d60c", "scanner": "scanner-primary", "fingerprint": "3a38280b696b4950", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f1bfee03bc8e087e", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/planner/blocks/link-lab-day (app/scheduling/planner/page.tsx:1141)"}, "properties": {"repobilityId": "9701b8c9a281ae01", "scanner": "scanner-primary", "fingerprint": "f1bfee03bc8e087e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-db9a8586f859ed03", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/planner/programs (app/scheduling/planner/page.tsx:1513)"}, "properties": {"repobilityId": "67ce2036ffedd4d1", "scanner": "scanner-primary", "fingerprint": "db9a8586f859ed03", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a5173e3cfbe91338", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/planner/generate (app/scheduling/planner/page.tsx:1530)"}, "properties": {"repobilityId": "3076def1ab8c3a0f", "scanner": "scanner-primary", "fingerprint": "a5173e3cfbe91338", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0da03154a29d53a1", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=false (app/scheduling/planner/page.tsx:2395)"}, "properties": {"repobilityId": "c9dac0fcdd34303c", "scanner": "scanner-primary", "fingerprint": "0da03154a29d53a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5f4746959835a9b6", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/rooms (app/scheduling/planner/page.tsx:2396)"}, "properties": {"repobilityId": "f05b059fc7cbc69c", "scanner": "scanner-primary", "fingerprint": "5f4746959835a9b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6d0d4c893756ef88", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/instructors (app/scheduling/planner/page.tsx:2397)"}, "properties": {"repobilityId": "ed86563a776ee4ff", "scanner": "scanner-primary", "fingerprint": "6d0d4c893756ef88", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6c7d2282887112b5", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/planner/semesters (app/scheduling/planner/page.tsx:2469)"}, "properties": {"repobilityId": "ea2d286d4324a8d6", "scanner": "scanner-primary", "fingerprint": "6c7d2282887112b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-016dea9849d30c0a", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=false (app/scheduling/planner/page.tsx:2480)"}, "properties": {"repobilityId": "76fddc339534829b", "scanner": "scanner-primary", "fingerprint": "016dea9849d30c0a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f3eb735710ea5f13", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/programs?semester_id=${selectedSemesterId} (app/scheduling/planner/page.tsx:2519)"}, "properties": {"repobilityId": "2c009b1804c09d46", "scanner": "scanner-primary", "fingerprint": "f3eb735710ea5f13", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c951063131dd4405", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/blocks?semester_id=${selectedSemesterId}&date_from=${dateFrom}&date_to=${dateTo} (app/scheduling/planner/page.tsx:2520)"}, "properties": {"repobilityId": "ef1b8c88aad81812", "scanner": "scanner-primary", "fingerprint": "c951063131dd4405", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f87a2b4f6846b1d9", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/conflicts?semester_id=${selectedSemesterId} (app/scheduling/planner/page.tsx:2521)"}, "properties": {"repobilityId": "db9cd5b66c545155", "scanner": "scanner-primary", "fingerprint": "f87a2b4f6846b1d9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8f253f86e8f8c5a5", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days?startDate=${dateFrom}&endDate=${dateTo}&limit=100 (app/scheduling/planner/page.tsx:2522)"}, "properties": {"repobilityId": "cbf39f93ed70b0b2", "scanner": "scanner-primary", "fingerprint": "8f253f86e8f8c5a5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3ae472657de0e64b", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/blocks?semester_id=${selectedSemesterId}&status=draft&count_only=true (app/scheduling/planner/page.tsx:2523)"}, "properties": {"repobilityId": "268c373605730ba4", "scanner": "scanner-primary", "fingerprint": "3ae472657de0e64b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-86a979a451513f84", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/planner/blocks/recurring (app/scheduling/planner/page.tsx:2644)"}, "properties": {"repobilityId": "07bd2ec126dc3a96", "scanner": "scanner-primary", "fingerprint": "86a979a451513f84", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9c1b8c50a8c956f2", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/scheduling/planner/blocks/${editingBlock.id}${modeParam} (app/scheduling/planner/page.tsx:2669)"}, "properties": {"repobilityId": "1fdf75f4c604ac5d", "scanner": "scanner-primary", "fingerprint": "9c1b8c50a8c956f2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cb1503082117f25d", "level": "error", "message": {"text": "Dangling fetch: PUT /api/scheduling/planner/blocks/${blockId} (app/scheduling/planner/page.tsx:2757)"}, "properties": {"repobilityId": "cfc7c2d969489b08", "scanner": "scanner-primary", "fingerprint": "cb1503082117f25d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6451da3059f0f629", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/planner/blocks/publish-all (app/scheduling/planner/page.tsx:2935)"}, "properties": {"repobilityId": "79ffd4622095e36e", "scanner": "scanner-primary", "fingerprint": "6451da3059f0f629", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c471fad1663cc10", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/workload?semester_id=${semesterId} (app/scheduling/planner/workload/page.tsx:778)"}, "properties": {"repobilityId": "28fa9bdcc9bc11a6", "scanner": "scanner-primary", "fingerprint": "2c471fad1663cc10", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e7699456afd471eb", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters (app/scheduling/planner/workload/page.tsx:793)"}, "properties": {"repobilityId": "052b688055e3b973", "scanner": "scanner-primary", "fingerprint": "e7699456afd471eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5fc97932c042d55d", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/planner/workload (app/scheduling/planner/workload/page.tsx:834)"}, "properties": {"repobilityId": "2e9c4107e6da7a94", "scanner": "scanner-primary", "fingerprint": "5fc97932c042d55d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3473cf8c5937705b", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/list (app/scheduling/planner/templates/page.tsx:135)"}, "properties": {"repobilityId": "5f9bc107a45b1cc9", "scanner": "scanner-primary", "fingerprint": "3473cf8c5937705b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-74e0c2d23c239cc4", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/scheduling/planner/templates/${id} (app/scheduling/planner/templates/page.tsx:216)"}, "properties": {"repobilityId": "fa7753f44eb8111d", "scanner": "scanner-primary", "fingerprint": "74e0c2d23c239cc4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b02169c0d092d17c", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduling/signups/pending/page.tsx:88)"}, "properties": {"repobilityId": "850e5d01a1fde04a", "scanner": "scanner-primary", "fingerprint": "b02169c0d092d17c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76ea086cb74f1e7c", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/signups/pending (app/scheduling/signups/pending/page.tsx:101)"}, "properties": {"repobilityId": "95a95354a2214982", "scanner": "scanner-primary", "fingerprint": "76ea086cb74f1e7c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e7bb10517888de5d", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/shifts/${signup.shift_id}/signup/${signup.id} (app/scheduling/signups/pending/page.tsx:116)"}, "properties": {"repobilityId": "2c6551fb69bc4597", "scanner": "scanner-primary", "fingerprint": "e7bb10517888de5d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e93c5e1c8e296fd0", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/shifts/${declineModal.signup.shift_id}/signup/${declineModal.signup.id} (app/scheduling/signups/pending/page.tsx:149)"}, "properties": {"repobilityId": "fda4e3aad9ee6bdb", "scanner": "scanner-primary", "fingerprint": "e93c5e1c8e296fd0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7fdf5ffaa499f8ed", "level": "error", "message": {"text": "Dangling fetch: GET /api/user/preferences (app/notifications/page.tsx:232)"}, "properties": {"repobilityId": "50f2cfe85a5be9e3", "scanner": "scanner-primary", "fingerprint": "7fdf5ffaa499f8ed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d44d6cbd31e62740", "level": "error", "message": {"text": "Dangling fetch: PUT /api/user/preferences (app/notifications/page.tsx:247)"}, "properties": {"repobilityId": "d839535da34ac905", "scanner": "scanner-primary", "fingerprint": "d44d6cbd31e62740", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-90a27c8151304dec", "level": "error", "message": {"text": "Dangling fetch: GET /api/notifications?${params.toString()} (app/notifications/page.tsx:279)"}, "properties": {"repobilityId": "dcab25f209a6c1fe", "scanner": "scanner-primary", "fingerprint": "90a27c8151304dec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd8eb086793675e3", "level": "error", "message": {"text": "Dangling fetch: PUT /api/notifications/read (app/notifications/page.tsx:295)"}, "properties": {"repobilityId": "b48b449afe6d556f", "scanner": "scanner-primary", "fingerprint": "cd8eb086793675e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-98aef420f990305c", "level": "error", "message": {"text": "Dangling fetch: PUT /api/notifications/read (app/notifications/page.tsx:309)"}, "properties": {"repobilityId": "433805be13642519", "scanner": "scanner-primary", "fingerprint": "98aef420f990305c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-017ebb7a897e2e27", "level": "error", "message": {"text": "Dangling fetch: PUT /api/notifications/read (app/notifications/page.tsx:336)"}, "properties": {"repobilityId": "1dd5f15c35d5ccfe", "scanner": "scanner-primary", "fingerprint": "017ebb7a897e2e27", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-580bc100090f46ec", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/notifications (app/notifications/page.tsx:363)"}, "properties": {"repobilityId": "b820041811fc043b", "scanner": "scanner-primary", "fingerprint": "580bc100090f46ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-baeebf4cc063d7ee", "level": "error", "message": {"text": "Dangling fetch: PUT /api/notifications/archive (app/notifications/page.tsx:390)"}, "properties": {"repobilityId": "7f504f776da42431", "scanner": "scanner-primary", "fingerprint": "baeebf4cc063d7ee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6bc178370286981c", "level": "error", "message": {"text": "Dangling fetch: PUT /api/notifications/archive (app/notifications/page.tsx:418)"}, "properties": {"repobilityId": "32bc9b213f887abe", "scanner": "scanner-primary", "fingerprint": "6bc178370286981c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cbb9db6ecb609c7d", "level": "error", "message": {"text": "Dangling fetch: GET /api/exam-scheduling/signups (app/exam-scheduling/page.tsx:78)"}, "properties": {"repobilityId": "365507ab4d242302", "scanner": "scanner-primary", "fingerprint": "cbb9db6ecb609c7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dc3f836b7b0d8ec4", "level": "error", "message": {"text": "Dangling fetch: GET /api/exam-scheduling/sessions (app/exam-scheduling/page.tsx:79)"}, "properties": {"repobilityId": "8fe13dce0ce28162", "scanner": "scanner-primary", "fingerprint": "dc3f836b7b0d8ec4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1c88f19aadf2ec0b", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/exam-scheduling/signups/${me.signup.id} (app/exam-scheduling/page.tsx:135)"}, "properties": {"repobilityId": "d1f9f42b2d6f599d", "scanner": "scanner-primary", "fingerprint": "1c88f19aadf2ec0b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d623feaa3eff09b3", "level": "error", "message": {"text": "Dangling fetch: GET /api/student/skill-evaluations?evaluation_id=${evaluationId} (app/skill-evaluations/[id]/page.tsx:108)"}, "properties": {"repobilityId": "85c76556ccb8c1a7", "scanner": "scanner-primary", "fingerprint": "d623feaa3eff09b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1f081b03d6452db8", "level": "error", "message": {"text": "Dangling fetch: GET /api/skill-sheets/${eval_.skill_sheet.id} (app/skill-evaluations/[id]/page.tsx:114)"}, "properties": {"repobilityId": "ec2ac8c72590f58c", "scanner": "scanner-primary", "fingerprint": "1f081b03d6452db8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b8136a3a5f88b509", "level": "error", "message": {"text": "Dangling fetch: GET /api/volunteer/invites/${token} (app/volunteer/[token]/page.tsx:78)"}, "properties": {"repobilityId": "a7223e3feda986c1", "scanner": "scanner-primary", "fingerprint": "b8136a3a5f88b509", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2f084bce142d3957", "level": "error", "message": {"text": "Dangling fetch: POST /api/volunteer/register (app/volunteer/[token]/page.tsx:119)"}, "properties": {"repobilityId": "b4c9f3f8fc0339c5", "scanner": "scanner-primary", "fingerprint": "2f084bce142d3957", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-04a5bf9939285cee", "level": "error", "message": {"text": "Dangling fetch: GET /api/volunteer/lab-tokens/${token} (app/volunteer-lab/[token]/page.tsx:100)"}, "properties": {"repobilityId": "f9174e9d4a6f4a6f", "scanner": "scanner-primary", "fingerprint": "04a5bf9939285cee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1f91a0b53885568e", "level": "error", "message": {"text": "Dangling fetch: POST /api/volunteer/lab-tokens/${token}/evaluate (app/volunteer-lab/[token]/page.tsx:164)"}, "properties": {"repobilityId": "bf9735b7f20c6cae", "scanner": "scanner-primary", "fingerprint": "1f91a0b53885568e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e50da454616ec33", "level": "error", "message": {"text": "Dangling fetch: POST /api/guest/login (app/guest/page.tsx:88)"}, "properties": {"repobilityId": "0d91033e48658d83", "scanner": "scanner-primary", "fingerprint": "2e50da454616ec33", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cfc84c5669568a96", "level": "error", "message": {"text": "Dangling fetch: GET /api/osce/time-blocks (app/osce-evaluator-signup/page.tsx:32)"}, "properties": {"repobilityId": "9349b615b38cffad", "scanner": "scanner-primary", "fingerprint": "cfc84c5669568a96", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9373b011188ec1b1", "level": "error", "message": {"text": "Dangling fetch: POST /api/osce/register (app/osce-evaluator-signup/page.tsx:87)"}, "properties": {"repobilityId": "622d99cc4d4f98db", "scanner": "scanner-primary", "fingerprint": "9373b011188ec1b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-45b4b5a27b51be1f", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/academics/page.tsx:45)"}, "properties": {"repobilityId": "c70301e24495f216", "scanner": "scanner-primary", "fingerprint": "45b4b5a27b51be1f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8a7c17bb040769f4", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/academics/admin/smc/page.tsx:160)"}, "properties": {"repobilityId": "6b9268f0cfc3c07c", "scanner": "scanner-primary", "fingerprint": "8a7c17bb040769f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f695e285e22c2707", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/smc-admin/${id} (app/academics/admin/smc/page.tsx:258)"}, "properties": {"repobilityId": "7924c300594e836e", "scanner": "scanner-primary", "fingerprint": "f695e285e22c2707", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-66b3cc081b1b867d", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/smc-admin (app/academics/admin/smc/page.tsx:279)"}, "properties": {"repobilityId": "1099baeb8dfb836b", "scanner": "scanner-primary", "fingerprint": "66b3cc081b1b867d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d3408c2e42090d4", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/smc-admin/${id} (app/academics/admin/smc/page.tsx:303)"}, "properties": {"repobilityId": "5bdf24d44bdf482b", "scanner": "scanner-primary", "fingerprint": "0d3408c2e42090d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3576f2ec256b5133", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/smc-admin/${smcId} (app/academics/admin/smc/page.tsx:1233)"}, "properties": {"repobilityId": "756c04345be68950", "scanner": "scanner-primary", "fingerprint": "3576f2ec256b5133", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f5a03ab3959f2bf9", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/smc-admin/${s.smc_id} (app/academics/admin/smc/page.tsx:1276)"}, "properties": {"repobilityId": "b5b1439e5700d02c", "scanner": "scanner-primary", "fingerprint": "f5a03ab3959f2bf9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-55d2622487736b75", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days?date=${blockDate} (app/academics/planner/page.tsx:600)"}, "properties": {"repobilityId": "e44927c585cc4cf8", "scanner": "scanner-primary", "fingerprint": "55d2622487736b75", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ee80dd33c97c2c3a", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=false (app/academics/planner/page.tsx:1356)"}, "properties": {"repobilityId": "a77cb5448238429f", "scanner": "scanner-primary", "fingerprint": "ee80dd33c97c2c3a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b94abe50ca20e0fe", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/blocks/check-existing?${params.toString()} (app/academics/planner/page.tsx:1481)"}, "properties": {"repobilityId": "2de23e29dc3770ce", "scanner": "scanner-primary", "fingerprint": "b94abe50ca20e0fe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5ad3249432b8345", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/planner/programs (app/academics/planner/page.tsx:1536)"}, "properties": {"repobilityId": "325d02a2eb4c6666", "scanner": "scanner-primary", "fingerprint": "c5ad3249432b8345", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c97ee5321be31244", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/planner/generate (app/academics/planner/page.tsx:1563)"}, "properties": {"repobilityId": "98a7f1e1b31181e9", "scanner": "scanner-primary", "fingerprint": "c97ee5321be31244", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-190b211ca41cf9a9", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/planner/generate (app/academics/planner/page.tsx:1626)"}, "properties": {"repobilityId": "369312531454ba5c", "scanner": "scanner-primary", "fingerprint": "190b211ca41cf9a9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f5599192d0c24b29", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=false (app/academics/planner/page.tsx:2585)"}, "properties": {"repobilityId": "3a6ea36ecc0cc8d9", "scanner": "scanner-primary", "fingerprint": "f5599192d0c24b29", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-93add056895ea228", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/rooms (app/academics/planner/page.tsx:2586)"}, "properties": {"repobilityId": "514d75b50710811a", "scanner": "scanner-primary", "fingerprint": "93add056895ea228", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b06c9a78c9fd801f", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/instructors (app/academics/planner/page.tsx:2587)"}, "properties": {"repobilityId": "1def1ae3abe146cf", "scanner": "scanner-primary", "fingerprint": "b06c9a78c9fd801f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6f6fb5d126b4c9b9", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/planner/semesters (app/academics/planner/page.tsx:2672)"}, "properties": {"repobilityId": "c435d08110dce631", "scanner": "scanner-primary", "fingerprint": "6f6fb5d126b4c9b9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-80cf78c418dff53f", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=false (app/academics/planner/page.tsx:2683)"}, "properties": {"repobilityId": "38eeffa132881057", "scanner": "scanner-primary", "fingerprint": "80cf78c418dff53f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-43c00d4f07f791f2", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/programs?semester_id=${selectedSemesterId} (app/academics/planner/page.tsx:2722)"}, "properties": {"repobilityId": "af4c84e12ff76735", "scanner": "scanner-primary", "fingerprint": "43c00d4f07f791f2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0dc15104d944d9d5", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/blocks?semester_id=${selectedSemesterId}&date_from=${dateFrom}&date_to=${dateTo} (app/academics/planner/page.tsx:2723)"}, "properties": {"repobilityId": "f5ee25b689e86341", "scanner": "scanner-primary", "fingerprint": "0dc15104d944d9d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-901863a75be00c52", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/conflicts?semester_id=${selectedSemesterId} (app/academics/planner/page.tsx:2724)"}, "properties": {"repobilityId": "650217c85b527009", "scanner": "scanner-primary", "fingerprint": "901863a75be00c52", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-64b96150c20d2824", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days?startDate=${dateFrom}&endDate=${dateTo}&limit=100 (app/academics/planner/page.tsx:2725)"}, "properties": {"repobilityId": "2243324f5f5ba02b", "scanner": "scanner-primary", "fingerprint": "64b96150c20d2824", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-13c4d2fbe999695d", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/blocks?semester_id=${selectedSemesterId}&status=draft&count_only=true (app/academics/planner/page.tsx:2728)"}, "properties": {"repobilityId": "80150e081b7c8fa1", "scanner": "scanner-primary", "fingerprint": "13c4d2fbe999695d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fcbf9e679815d1f8", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/planner/blocks/recurring (app/academics/planner/page.tsx:2849)"}, "properties": {"repobilityId": "576a5604d185c455", "scanner": "scanner-primary", "fingerprint": "fcbf9e679815d1f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f0cc180e8a8172c8", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/scheduling/planner/blocks/${editingBlock.id}${modeParam} (app/academics/planner/page.tsx:2874)"}, "properties": {"repobilityId": "cea7bb39d1621031", "scanner": "scanner-primary", "fingerprint": "f0cc180e8a8172c8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d44076f390377247", "level": "error", "message": {"text": "Dangling fetch: PUT /api/scheduling/planner/blocks/${blockId} (app/academics/planner/page.tsx:2982)"}, "properties": {"repobilityId": "abe2dc7ead7e77fd", "scanner": "scanner-primary", "fingerprint": "d44076f390377247", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1425107273fbe5c2", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/planner/blocks/publish-all (app/academics/planner/page.tsx:3165)"}, "properties": {"repobilityId": "bb1e5daddb8961ab", "scanner": "scanner-primary", "fingerprint": "1425107273fbe5c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7c88e0b2e3140a6e", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/workload?semester_id=${semesterId} (app/academics/planner/workload/page.tsx:778)"}, "properties": {"repobilityId": "9831d16088dd63aa", "scanner": "scanner-primary", "fingerprint": "7c88e0b2e3140a6e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-567990f3cd6d07b6", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters (app/academics/planner/workload/page.tsx:793)"}, "properties": {"repobilityId": "79fa70bf77cc4d44", "scanner": "scanner-primary", "fingerprint": "567990f3cd6d07b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f0d3bc808400ac34", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/planner/workload (app/academics/planner/workload/page.tsx:834)"}, "properties": {"repobilityId": "931fe48b637617b6", "scanner": "scanner-primary", "fingerprint": "f0d3bc808400ac34", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-28ff9f17909c52a9", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/list (app/academics/planner/templates/page.tsx:135)"}, "properties": {"repobilityId": "8c906a95e192c30c", "scanner": "scanner-primary", "fingerprint": "28ff9f17909c52a9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f7be886fdc6abd2f", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/scheduling/planner/templates/${id} (app/academics/planner/templates/page.tsx:216)"}, "properties": {"repobilityId": "10f1103519a66657", "scanner": "scanner-primary", "fingerprint": "f7be886fdc6abd2f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8c2bb906938545be", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/academics/students/page.tsx:124)"}, "properties": {"repobilityId": "4ad843242d42289d", "scanner": "scanner-primary", "fingerprint": "8c2bb906938545be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a4fbbf877ba054ef", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/academics/students/[id]/page.tsx:400)"}, "properties": {"repobilityId": "c1aeb787a82fa163", "scanner": "scanner-primary", "fingerprint": "a4fbbf877ba054ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-566eb21283039506", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students/${studentId}/notes (app/academics/students/[id]/page.tsx:414)"}, "properties": {"repobilityId": "8508660f1e21ec1b", "scanner": "scanner-primary", "fingerprint": "566eb21283039506", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-41742886022c8c48", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students/${studentId} (app/academics/students/[id]/page.tsx:427)"}, "properties": {"repobilityId": "eb6d95c85e7b3fc1", "scanner": "scanner-primary", "fingerprint": "41742886022c8c48", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa2906a71fc09795", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/team-leads?studentId=${studentId} (app/academics/students/[id]/page.tsx:454)"}, "properties": {"repobilityId": "1fb6e26b0c02e160", "scanner": "scanner-primary", "fingerprint": "fa2906a71fc09795", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cc50f7d2c743120b", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/assessments/scenario?studentId=${studentId} (app/academics/students/[id]/page.tsx:467)"}, "properties": {"repobilityId": "4e2ab8229dab7e15", "scanner": "scanner-primary", "fingerprint": "cc50f7d2c743120b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c8f4e18aeb045cde", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/assessments/skill?studentId=${studentId} (app/academics/students/[id]/page.tsx:471)"}, "properties": {"repobilityId": "2c0b8c6d0b194ff3", "scanner": "scanner-primary", "fingerprint": "c8f4e18aeb045cde", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7c7dcf1002d273b4", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students/${studentId}/clinical-tasks (app/academics/students/[id]/page.tsx:487)"}, "properties": {"repobilityId": "cee88cf12f89f8f9", "scanner": "scanner-primary", "fingerprint": "7c7dcf1002d273b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e0c7321e1eb7d7d7", "level": "error", "message": {"text": "Dangling fetch: GET /api/seating/learning-styles?studentId=${studentId} (app/academics/students/[id]/page.tsx:499)"}, "properties": {"repobilityId": "ad19be9b09ff5c92", "scanner": "scanner-primary", "fingerprint": "e0c7321e1eb7d7d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5c4ff64f4a1f0016", "level": "error", "message": {"text": "Dangling fetch: GET /api/compliance?student_id=${studentId} (app/academics/students/[id]/page.tsx:516)"}, "properties": {"repobilityId": "1e97045b7ae2d207", "scanner": "scanner-primary", "fingerprint": "5c4ff64f4a1f0016", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ca56a2453a627b8e", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students/${studentId}/ratings (app/academics/students/[id]/page.tsx:530)"}, "properties": {"repobilityId": "5767f1b4c3ae9b40", "scanner": "scanner-primary", "fingerprint": "ca56a2453a627b8e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7f8cebe8c92f6e0b", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skill-signoffs?student_id=${studentId} (app/academics/students/[id]/page.tsx:546)"}, "properties": {"repobilityId": "5e0f70e1f83f8797", "scanner": "scanner-primary", "fingerprint": "7f8cebe8c92f6e0b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-89b61edb2cd35d87", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skills (app/academics/students/[id]/page.tsx:559)"}, "properties": {"repobilityId": "09cfda30ba39f01f", "scanner": "scanner-primary", "fingerprint": "89b61edb2cd35d87", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ede2f3157b15f615", "level": "error", "message": {"text": "Dangling fetch: GET /api/students/${studentId}/skill-evaluations (app/academics/students/[id]/page.tsx:572)"}, "properties": {"repobilityId": "954c4a5e13f23f67", "scanner": "scanner-primary", "fingerprint": "ede2f3157b15f615", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-821bcb6ffc981372", "level": "error", "message": {"text": "Dangling fetch: POST /api/compliance (app/academics/students/[id]/page.tsx:586)"}, "properties": {"repobilityId": "c82b281c31690e02", "scanner": "scanner-primary", "fingerprint": "821bcb6ffc981372", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d146c1db726dfd9", "level": "error", "message": {"text": "Dangling fetch: PUT /api/compliance (app/academics/students/[id]/page.tsx:614)"}, "properties": {"repobilityId": "c4ddf962cc901905", "scanner": "scanner-primary", "fingerprint": "0d146c1db726dfd9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2811c17c582ee910", "level": "error", "message": {"text": "Dangling fetch: POST /api/seating/learning-styles (app/academics/students/[id]/page.tsx:647)"}, "properties": {"repobilityId": "5e41e3c1e37ed874", "scanner": "scanner-primary", "fingerprint": "2811c17c582ee910", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-44874d9cf4046e38", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/students/${studentId}/notes (app/academics/students/[id]/page.tsx:675)"}, "properties": {"repobilityId": "663e1c93beb29aab", "scanner": "scanner-primary", "fingerprint": "44874d9cf4046e38", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8a4ef53ccf0aace0", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/students/${studentId}/notes (app/academics/students/[id]/page.tsx:711)"}, "properties": {"repobilityId": "80a176d5f3608a35", "scanner": "scanner-primary", "fingerprint": "8a4ef53ccf0aace0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d7b14b804d357c08", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/students/${studentId}/notes?noteId=${noteId} (app/academics/students/[id]/page.tsx:738)"}, "properties": {"repobilityId": "2692697fe79b43df", "scanner": "scanner-primary", "fingerprint": "d7b14b804d357c08", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-26a5fa41fc76928d", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/students/${studentId}/photo (app/academics/students/[id]/page.tsx:804)"}, "properties": {"repobilityId": "6a1e93bdf682a5cf", "scanner": "scanner-primary", "fingerprint": "26a5fa41fc76928d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2a58d0de1b7008be", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/students/${studentId} (app/academics/students/[id]/page.tsx:855)"}, "properties": {"repobilityId": "3462d531ef3ca904", "scanner": "scanner-primary", "fingerprint": "2a58d0de1b7008be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aa2544c08061ecd9", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/students/${studentId} (app/academics/students/[id]/page.tsx:895)"}, "properties": {"repobilityId": "6f0fa16cadf8e455", "scanner": "scanner-primary", "fingerprint": "aa2544c08061ecd9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2d20ec7bb6a82972", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/academics/students/[id]/learning-plan/page.tsx:167)"}, "properties": {"repobilityId": "874b845a3fd38b94", "scanner": "scanner-primary", "fingerprint": "2d20ec7bb6a82972", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6aaa80c1f434e212", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students/${studentId} (app/academics/students/[id]/learning-plan/page.tsx:179)"}, "properties": {"repobilityId": "10c9737dae75ce64", "scanner": "scanner-primary", "fingerprint": "6aaa80c1f434e212", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3d2d9afeef639a53", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students/${studentId}/learning-plan (app/academics/students/[id]/learning-plan/page.tsx:192)"}, "properties": {"repobilityId": "3b0e5fdbf047f7d1", "scanner": "scanner-primary", "fingerprint": "3d2d9afeef639a53", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-876f939fc387fa3c", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/students/${studentId}/learning-plan (app/academics/students/[id]/learning-plan/page.tsx:223)"}, "properties": {"repobilityId": "7d28f1edbbdebae9", "scanner": "scanner-primary", "fingerprint": "876f939fc387fa3c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fd1b2eb3573bf793", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/students/${studentId}/learning-plan/notes (app/academics/students/[id]/learning-plan/page.tsx:254)"}, "properties": {"repobilityId": "13bf54f3f26abde9", "scanner": "scanner-primary", "fingerprint": "fd1b2eb3573bf793", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-211b98798b7a5c99", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students/${studentId}/portfolio (app/academics/students/[id]/portfolio/page.tsx:294)"}, "properties": {"repobilityId": "0672cf3be8cd7cf2", "scanner": "scanner-primary", "fingerprint": "211b98798b7a5c99", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5c50b462bbdcb50c", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/competencies?student_id=${studentId} (app/academics/students/[id]/portfolio/page.tsx:312)"}, "properties": {"repobilityId": "81a52d3916acba7e", "scanner": "scanner-primary", "fingerprint": "5c50b462bbdcb50c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c9841019b3767ac0", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/academics/students/new/page.tsx:62)"}, "properties": {"repobilityId": "6867c3d10f917b64", "scanner": "scanner-primary", "fingerprint": "c9841019b3767ac0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a63bc59975568f54", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/students (app/academics/students/new/page.tsx:121)"}, "properties": {"repobilityId": "e623aac51fefbad0", "scanner": "scanner-primary", "fingerprint": "a63bc59975568f54", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9956ec786c1f0459", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students/import?limit=10 (app/academics/students/import/page.tsx:341)"}, "properties": {"repobilityId": "ed210c4722ae59d8", "scanner": "scanner-primary", "fingerprint": "9956ec786c1f0459", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-95cc42b0049a2b7d", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/academics/students/import/page.tsx:472)"}, "properties": {"repobilityId": "03a3cfc785265195", "scanner": "scanner-primary", "fingerprint": "95cc42b0049a2b7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-25e7711f364415a5", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/students/check-duplicates (app/academics/students/import/page.tsx:507)"}, "properties": {"repobilityId": "db1e93fac9e26ca6", "scanner": "scanner-primary", "fingerprint": "25e7711f364415a5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c374c0ccb677f5d5", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/students/import (app/academics/students/import/page.tsx:618)"}, "properties": {"repobilityId": "a09e22bc3a5dfa6e", "scanner": "scanner-primary", "fingerprint": "c374c0ccb677f5d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-96f3a440f68f8467", "level": "error", "message": {"text": "Dangling fetch: GET /api/skill-sheets/${sheetId} (app/academics/skill-sheets/[id]/page.tsx:193)"}, "properties": {"repobilityId": "d9c465ab768094dc", "scanner": "scanner-primary", "fingerprint": "96f3a440f68f8467", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dd906ed14fe95f0e", "level": "error", "message": {"text": "Dangling fetch: GET /api/students?role=student (app/academics/skill-sheets/[id]/page.tsx:209)"}, "properties": {"repobilityId": "05b13108543ecca8", "scanner": "scanner-primary", "fingerprint": "dd906ed14fe95f0e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5306546e2f7c7555", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days?limit=20 (app/academics/skill-sheets/[id]/page.tsx:221)"}, "properties": {"repobilityId": "fda907f8d3a9bb06", "scanner": "scanner-primary", "fingerprint": "5306546e2f7c7555", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4045777468feec04", "level": "error", "message": {"text": "Dangling fetch: POST /api/skill-sheets/${sheetId}/evaluate (app/academics/skill-sheets/[id]/page.tsx:381)"}, "properties": {"repobilityId": "0f9d3f0ebbd8289d", "scanner": "scanner-primary", "fingerprint": "4045777468feec04", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-588107ae176ccdb2", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/academics/cohorts/page.tsx:119)"}, "properties": {"repobilityId": "5c197c22cfe2a1de", "scanner": "scanner-primary", "fingerprint": "588107ae176ccdb2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cc3bd00268eb7fc4", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/programs (app/academics/cohorts/page.tsx:133)"}, "properties": {"repobilityId": "8456b29a388da056", "scanner": "scanner-primary", "fingerprint": "cc3bd00268eb7fc4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2ab610649f0915bf", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/cohorts (app/academics/cohorts/page.tsx:165)"}, "properties": {"repobilityId": "92791da0d7d5f45d", "scanner": "scanner-primary", "fingerprint": "2ab610649f0915bf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f58c7e813d3f0b26", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/lab-templates/apply (app/academics/cohorts/page.tsx:185)"}, "properties": {"repobilityId": "cd22ef5eb72f68e9", "scanner": "scanner-primary", "fingerprint": "f58c7e813d3f0b26", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-96d5ff1493a78c00", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/cohorts/${cohortId} (app/academics/cohorts/page.tsx:251)"}, "properties": {"repobilityId": "60fa222dd4160dee", "scanner": "scanner-primary", "fingerprint": "96d5ff1493a78c00", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-806b446e61f6c66d", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/cohorts/${cohort.id} (app/academics/cohorts/page.tsx:283)"}, "properties": {"repobilityId": "0d0b3dd5436fd8e4", "scanner": "scanner-primary", "fingerprint": "806b446e61f6c66d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f8acd264ff1274b9", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/cohorts/${cohort.id} (app/academics/cohorts/page.tsx:313)"}, "properties": {"repobilityId": "f0201a9f67fcb9d1", "scanner": "scanner-primary", "fingerprint": "f8acd264ff1274b9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6ea6aedaa9fa7069", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/cohorts/${cohort.id}/archive (app/academics/cohorts/page.tsx:336)"}, "properties": {"repobilityId": "c04ef18874c4307c", "scanner": "scanner-primary", "fingerprint": "6ea6aedaa9fa7069", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5bb8289f6dff9197", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/cohorts/${cohort.id}/archive (app/academics/cohorts/page.tsx:362)"}, "properties": {"repobilityId": "a36bada449126568", "scanner": "scanner-primary", "fingerprint": "5bb8289f6dff9197", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-feca132a30d41be1", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId} (app/academics/cohorts/[id]/page.tsx:341)"}, "properties": {"repobilityId": "d11b91418fc20316", "scanner": "scanner-primary", "fingerprint": "feca132a30d41be1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e7d9d6d80b175b6a", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/academics/cohorts/[id]/page.tsx:348)"}, "properties": {"repobilityId": "18b0977848f8c80e", "scanner": "scanner-primary", "fingerprint": "e7d9d6d80b175b6a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0e92f350773ca241", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=withdrawn (app/academics/cohorts/[id]/page.tsx:355)"}, "properties": {"repobilityId": "ae1007f1359e3a03", "scanner": "scanner-primary", "fingerprint": "0e92f350773ca241", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-12c55bf9e52e98e9", "level": "error", "message": {"text": "Dangling fetch: GET /api/seating/learning-styles?cohortId=${cohortId} (app/academics/cohorts/[id]/page.tsx:362)"}, "properties": {"repobilityId": "5967c16e1e6cbb34", "scanner": "scanner-primary", "fingerprint": "12c55bf9e52e98e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9bceaae8ebefcfbb", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId}/stats (app/academics/cohorts/[id]/page.tsx:373)"}, "properties": {"repobilityId": "738f8935f19352a1", "scanner": "scanner-primary", "fingerprint": "9bceaae8ebefcfbb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a59889a993c12d54", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/students/${removingStudent.id} (app/academics/cohorts/[id]/page.tsx:393)"}, "properties": {"repobilityId": "964ca7f444afcc3c", "scanner": "scanner-primary", "fingerprint": "a59889a993c12d54", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-79b912029283e9f3", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/students/${student.id} (app/academics/cohorts/[id]/page.tsx:419)"}, "properties": {"repobilityId": "056e47d1d63273c5", "scanner": "scanner-primary", "fingerprint": "79b912029283e9f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4cf827682df9ddce", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/cohorts/${cohortId}/email (app/academics/cohorts/[id]/page.tsx:446)"}, "properties": {"repobilityId": "ce54afc7708e6b47", "scanner": "scanner-primary", "fingerprint": "4cf827682df9ddce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-797cb0a621c202ca", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/cohorts/${cohortId}/archive (app/academics/cohorts/[id]/page.tsx:494)"}, "properties": {"repobilityId": "645721b952f0fcc2", "scanner": "scanner-primary", "fingerprint": "797cb0a621c202ca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-984bea38c054a36b", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/cohorts/${cohortId}/archive (app/academics/cohorts/[id]/page.tsx:514)"}, "properties": {"repobilityId": "9e5520b438f74357", "scanner": "scanner-primary", "fingerprint": "984bea38c054a36b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3a477742f09a76e3", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/lab-templates/apply (app/academics/cohorts/[id]/page.tsx:657)"}, "properties": {"repobilityId": "d8e6936b9ea6f125", "scanner": "scanner-primary", "fingerprint": "3a477742f09a76e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8076f3d23c85a3b5", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/lab-templates/update-existing (app/academics/cohorts/[id]/page.tsx:723)"}, "properties": {"repobilityId": "e1d2f83a8e8ab0fa", "scanner": "scanner-primary", "fingerprint": "8076f3d23c85a3b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d0bac4f290f003b7", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/lab-templates/cohort-results-check (app/academics/cohorts/[id]/page.tsx:1170)"}, "properties": {"repobilityId": "0fe11dc52a20e147", "scanner": "scanner-primary", "fingerprint": "d0bac4f290f003b7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-776f12790ee0b9f5", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/academics/cohorts/[id]/groups/page.tsx:105)"}, "properties": {"repobilityId": "598d5a639f940300", "scanner": "scanner-primary", "fingerprint": "776f12790ee0b9f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa445f532e428037", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId} (app/academics/cohorts/[id]/groups/page.tsx:119)"}, "properties": {"repobilityId": "bee7282a6035fc25", "scanner": "scanner-primary", "fingerprint": "fa445f532e428037", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c1da67cd6b5e1c61", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/academics/cohorts/[id]/groups/page.tsx:126)"}, "properties": {"repobilityId": "9aadc7ac4da383f9", "scanner": "scanner-primary", "fingerprint": "c1da67cd6b5e1c61", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-94fe81effee5b82f", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/groups?cohortId=${cohortId}&include=members (app/academics/cohorts/[id]/groups/page.tsx:132)"}, "properties": {"repobilityId": "6e014ae66225ba75", "scanner": "scanner-primary", "fingerprint": "94fe81effee5b82f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3b98705a1efea3e7", "level": "error", "message": {"text": "Dangling fetch: GET /api/seating/learning-styles?cohortId=${cohortId} (app/academics/cohorts/[id]/groups/page.tsx:146)"}, "properties": {"repobilityId": "e4577ec0ed9b54d3", "scanner": "scanner-primary", "fingerprint": "3b98705a1efea3e7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1bca36b0ad9a9779", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/groups (app/academics/cohorts/[id]/groups/page.tsx:237)"}, "properties": {"repobilityId": "5eea22dd90b64993", "scanner": "scanner-primary", "fingerprint": "1bca36b0ad9a9779", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-943682ce54e685a2", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/groups/${groupId} (app/academics/cohorts/[id]/groups/page.tsx:259)"}, "properties": {"repobilityId": "cb4806178ebd0449", "scanner": "scanner-primary", "fingerprint": "943682ce54e685a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-97c76252371eb9b6", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/groups/${groupId} (app/academics/cohorts/[id]/groups/page.tsx:281)"}, "properties": {"repobilityId": "2c05045d0003928c", "scanner": "scanner-primary", "fingerprint": "97c76252371eb9b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-053d65402d8f5c51", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/groups/${group.id}/members (app/academics/cohorts/[id]/groups/page.tsx:309)"}, "properties": {"repobilityId": "f727adec14f81884", "scanner": "scanner-primary", "fingerprint": "053d65402d8f5c51", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6419b06788524b76", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/groups/generate (app/academics/cohorts/[id]/groups/page.tsx:371)"}, "properties": {"repobilityId": "bf3891a83c4a78d0", "scanner": "scanner-primary", "fingerprint": "6419b06788524b76", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-24d1030351d31ab0", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/groups (app/academics/cohorts/[id]/groups/page.tsx:391)"}, "properties": {"repobilityId": "106355e30a695e01", "scanner": "scanner-primary", "fingerprint": "24d1030351d31ab0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eea7f394643ae4a8", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/academics/cohorts/[id]/intake/page.tsx:108)"}, "properties": {"repobilityId": "fd36e45c08fb633c", "scanner": "scanner-primary", "fingerprint": "eea7f394643ae4a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aca7c19520890f88", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId} (app/academics/cohorts/[id]/intake/page.tsx:109)"}, "properties": {"repobilityId": "cfcbec4c8a3a0680", "scanner": "scanner-primary", "fingerprint": "aca7c19520890f88", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e33f22cb8f412e73", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/students/${studentId} (app/academics/cohorts/[id]/intake/page.tsx:161)"}, "properties": {"repobilityId": "354b0f07d88edfc6", "scanner": "scanner-primary", "fingerprint": "e33f22cb8f412e73", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-259d3cf84131be26", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId}/completion (app/academics/cohorts/[id]/completion/page.tsx:236)"}, "properties": {"repobilityId": "b47166c4c03da65e", "scanner": "scanner-primary", "fingerprint": "259d3cf84131be26", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ca43db393f500b98", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/academics/cohorts/[id]/smc/page.tsx:141)"}, "properties": {"repobilityId": "ebe2fa115c9ab013", "scanner": "scanner-primary", "fingerprint": "ca43db393f500b98", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-47c3fe29c0991958", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId}/calendar (app/academics/cohorts/[id]/calendar/page.tsx:295)"}, "properties": {"repobilityId": "d966e99647bb7c15", "scanner": "scanner-primary", "fingerprint": "47c3fe29c0991958", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-454e1968a0d7dae1", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/cases/page.tsx:154)"}, "properties": {"repobilityId": "64af09d79d351f78", "scanner": "scanner-primary", "fingerprint": "454e1968a0d7dae1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2d7edb66b12d2be0", "level": "error", "message": {"text": "Dangling fetch: GET /api/cases?${params.toString()} (app/cases/page.tsx:195)"}, "properties": {"repobilityId": "df4f47b8151c67ae", "scanner": "scanner-primary", "fingerprint": "2d7edb66b12d2be0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f774632b392fc661", "level": "error", "message": {"text": "Dangling fetch: POST /api/cases/${caseId}/duplicate (app/cases/page.tsx:221)"}, "properties": {"repobilityId": "1fb0f6f31fda14be", "scanner": "scanner-primary", "fingerprint": "f774632b392fc661", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1be25937859e01a9", "level": "error", "message": {"text": "Dangling fetch: POST /api/cases/import (app/cases/page.tsx:248)"}, "properties": {"repobilityId": "b303f07657bf48e4", "scanner": "scanner-primary", "fingerprint": "1be25937859e01a9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2ef6c21ea8f1e980", "level": "error", "message": {"text": "Dangling fetch: GET /api/cases/${caseId} (app/cases/[id]/page.tsx:77)"}, "properties": {"repobilityId": "f304a085b53e8b39", "scanner": "scanner-primary", "fingerprint": "2ef6c21ea8f1e980", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-23a48b3de80ee3fe", "level": "error", "message": {"text": "Dangling fetch: GET /api/cases/${caseId}/practice/history (app/cases/[id]/page.tsx:104)"}, "properties": {"repobilityId": "536b1be7112496dd", "scanner": "scanner-primary", "fingerprint": "23a48b3de80ee3fe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-775c743c7413e42b", "level": "error", "message": {"text": "Dangling fetch: POST /api/cases (app/cases/[id]/page.tsx:124)"}, "properties": {"repobilityId": "a62f96e7ac75635d", "scanner": "scanner-primary", "fingerprint": "775c743c7413e42b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-95fba80b61ebe60c", "level": "error", "message": {"text": "Dangling fetch: POST /api/cases/${caseId}/practice/start (app/cases/[id]/practice/page.tsx:193)"}, "properties": {"repobilityId": "235efb9d7489708e", "scanner": "scanner-primary", "fingerprint": "95fba80b61ebe60c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9a3d7aa91761f3ba", "level": "error", "message": {"text": "Dangling fetch: PUT /api/cases/${caseId}/practice/respond (app/cases/[id]/practice/page.tsx:276)"}, "properties": {"repobilityId": "dcd2257cfed37a7c", "scanner": "scanner-primary", "fingerprint": "9a3d7aa91761f3ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b3e0206acfe634a2", "level": "error", "message": {"text": "Dangling fetch: POST /api/cases/${caseId}/practice/complete (app/cases/[id]/practice/page.tsx:337)"}, "properties": {"repobilityId": "f6713370a46588bf", "scanner": "scanner-primary", "fingerprint": "b3e0206acfe634a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8af0d9db2d767031", "level": "error", "message": {"text": "Dangling fetch: GET /api/cases/${caseId} (app/cases/[id]/edit/page.tsx:33)"}, "properties": {"repobilityId": "86ea1071b89e61ce", "scanner": "scanner-primary", "fingerprint": "8af0d9db2d767031", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-342a8e085b8b40ca", "level": "error", "message": {"text": "Dangling fetch: GET /api/case-sessions/${code}/instructor (app/cases/session/[code]/instructor/page.tsx:143)"}, "properties": {"repobilityId": "e924337e069c554b", "scanner": "scanner-primary", "fingerprint": "342a8e085b8b40ca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3b85725fc53aa4b1", "level": "error", "message": {"text": "Dangling fetch: PUT /api/case-sessions/${code}/instructor (app/cases/session/[code]/instructor/page.tsx:273)"}, "properties": {"repobilityId": "64724b1edc94494c", "scanner": "scanner-primary", "fingerprint": "3b85725fc53aa4b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-869871f4474e58e3", "level": "error", "message": {"text": "Dangling fetch: GET /api/case-sessions/${code} (app/cases/session/[code]/student/page.tsx:237)"}, "properties": {"repobilityId": "eecb29e7bd7a4f03", "scanner": "scanner-primary", "fingerprint": "869871f4474e58e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-70721a00fed2e419", "level": "error", "message": {"text": "Dangling fetch: POST /api/case-sessions/${code}/respond (app/cases/session/[code]/student/page.tsx:436)"}, "properties": {"repobilityId": "473e27124c6c7bf5", "scanner": "scanner-primary", "fingerprint": "70721a00fed2e419", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d709d3bc790b45a8", "level": "error", "message": {"text": "Dangling fetch: POST /api/case-sessions/${code}/respond (app/cases/session/[code]/student/page.tsx:532)"}, "properties": {"repobilityId": "f8ecae65fe028f47", "scanner": "scanner-primary", "fingerprint": "d709d3bc790b45a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f6d53a7f20c45458", "level": "error", "message": {"text": "Dangling fetch: GET /api/case-sessions/${code} (app/cases/session/[code]/tv/page.tsx:137)"}, "properties": {"repobilityId": "c9985940d61f9cf5", "scanner": "scanner-primary", "fingerprint": "f6d53a7f20c45458", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cc2660c493e9b5d9", "level": "error", "message": {"text": "Dangling fetch: GET /api/cases/${caseInfo.id} (app/cases/session/[code]/tv/page.tsx:175)"}, "properties": {"repobilityId": "700fc239a5a0becb", "scanner": "scanner-primary", "fingerprint": "cc2660c493e9b5d9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-784d4fdf3a04eff5", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/session (app/cases/session/[code]/join/page.tsx:45)"}, "properties": {"repobilityId": "8d8f1c7fd223ac83", "scanner": "scanner-primary", "fingerprint": "784d4fdf3a04eff5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9eb929a661a09d77", "level": "error", "message": {"text": "Dangling fetch: POST /api/case-sessions/${sessionCode}/join (app/cases/session/[code]/join/page.tsx:106)"}, "properties": {"repobilityId": "1c070c04bba6e79b", "scanner": "scanner-primary", "fingerprint": "9eb929a661a09d77", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d0dc5f61e9a865c7", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/cases/leaderboard/page.tsx:74)"}, "properties": {"repobilityId": "19d9d8de63a4a8cd", "scanner": "scanner-primary", "fingerprint": "d0dc5f61e9a865c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b01b41c531bc62e7", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/database-tools/cohorts (app/cases/leaderboard/page.tsx:98)"}, "properties": {"repobilityId": "48cca628e5d51fe1", "scanner": "scanner-primary", "fingerprint": "b01b41c531bc62e7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-81c433500f9a30e9", "level": "error", "message": {"text": "Dangling fetch: GET /api/student/me (app/cases/leaderboard/page.tsx:112)"}, "properties": {"repobilityId": "20bc193eac55e23f", "scanner": "scanner-primary", "fingerprint": "81c433500f9a30e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e7586111178eca91", "level": "error", "message": {"text": "Dangling fetch: GET /api/cases/leaderboard/${cohortId}?${params.toString()} (app/cases/leaderboard/page.tsx:145)"}, "properties": {"repobilityId": "d6c020ef9cd27c27", "scanner": "scanner-primary", "fingerprint": "e7586111178eca91", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-17e8c2f4403f848c", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/layout.tsx:35)"}, "properties": {"repobilityId": "8c4e68e4fa757b85", "scanner": "scanner-primary", "fingerprint": "17e8c2f4403f848c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3ba552c80f7d47bb", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/page.tsx:82)"}, "properties": {"repobilityId": "fe2d5cc9bcaafe32", "scanner": "scanner-primary", "fingerprint": "3ba552c80f7d47bb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d2cef87ed41e4e2f", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/preceptors?activeOnly=true (app/clinical/page.tsx:96)"}, "properties": {"repobilityId": "7990ab52b3cd784c", "scanner": "scanner-primary", "fingerprint": "d2cef87ed41e4e2f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e2c9806a23092650", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/agencies?type=hospital (app/clinical/page.tsx:97)"}, "properties": {"repobilityId": "079243c3562deea4", "scanner": "scanner-primary", "fingerprint": "e2c9806a23092650", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-947ac3575ccc9c5f", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/agencies?type=ems (app/clinical/page.tsx:98)"}, "properties": {"repobilityId": "0a0c89120f08a45b", "scanner": "scanner-primary", "fingerprint": "947ac3575ccc9c5f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-03a289ed29a06b76", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/internships (app/clinical/page.tsx:99)"}, "properties": {"repobilityId": "5bafe4b7453176ef", "scanner": "scanner-primary", "fingerprint": "03a289ed29a06b76", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b5324477a077bd1c", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/aemt-tracking/page.tsx:93)"}, "properties": {"repobilityId": "90ae2be080fedf57", "scanner": "scanner-primary", "fingerprint": "b5324477a077bd1c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-008af78b0ed282da", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/aemt-tracking/page.tsx:104)"}, "properties": {"repobilityId": "de553ffae84aa104", "scanner": "scanner-primary", "fingerprint": "008af78b0ed282da", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b0be9e8df6268005", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${selectedCohort}&status=active (app/clinical/aemt-tracking/page.tsx:126)"}, "properties": {"repobilityId": "49c6f35b1d2c33ee", "scanner": "scanner-primary", "fingerprint": "b0be9e8df6268005", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8dcdc9b7544ad25c", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/aemt-tracking?cohortId=${selectedCohort} (app/clinical/aemt-tracking/page.tsx:127)"}, "properties": {"repobilityId": "fc9c3d4fabaf0d03", "scanner": "scanner-primary", "fingerprint": "8dcdc9b7544ad25c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c546368375243964", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/aemt-tracking (app/clinical/aemt-tracking/page.tsx:165)"}, "properties": {"repobilityId": "f1e655154ee19e56", "scanner": "scanner-primary", "fingerprint": "c546368375243964", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-06aed322c6d22c24", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/internships/[id]/page.tsx:432)"}, "properties": {"repobilityId": "11f09801c91a9d2d", "scanner": "scanner-primary", "fingerprint": "06aed322c6d22c24", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3d8eb239f4b541a5", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId} (app/clinical/internships/[id]/page.tsx:443)"}, "properties": {"repobilityId": "1813f56bc638b82a", "scanner": "scanner-primary", "fingerprint": "3d8eb239f4b541a5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ef256f4f058cc3c5", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/preceptors?activeOnly=true (app/clinical/internships/[id]/page.tsx:444)"}, "properties": {"repobilityId": "b25c52d8f0cd5bd5", "scanner": "scanner-primary", "fingerprint": "ef256f4f058cc3c5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8c96c284d5cb11d9", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/agencies (app/clinical/internships/[id]/page.tsx:445)"}, "properties": {"repobilityId": "3abc0ba3fc149a60", "scanner": "scanner-primary", "fingerprint": "8c96c284d5cb11d9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c7258640c6884c4c", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId}/preceptors (app/clinical/internships/[id]/page.tsx:446)"}, "properties": {"repobilityId": "89c9976c645839f4", "scanner": "scanner-primary", "fingerprint": "c7258640c6884c4c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b81cf6170df6b250", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId}/preceptors (app/clinical/internships/[id]/page.tsx:613)"}, "properties": {"repobilityId": "36710e24248ae036", "scanner": "scanner-primary", "fingerprint": "b81cf6170df6b250", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b9cd7fd9a93c67de", "level": "error", "message": {"text": "Dangling fetch: PUT /api/clinical/internships/${internshipId} (app/clinical/internships/[id]/page.tsx:663)"}, "properties": {"repobilityId": "13ff93ccb48a9175", "scanner": "scanner-primary", "fingerprint": "b9cd7fd9a93c67de", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-13d83977d19fde56", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/internships/${internshipId}/notify-nremt (app/clinical/internships/[id]/page.tsx:772)"}, "properties": {"repobilityId": "ca08384c7d7392d4", "scanner": "scanner-primary", "fingerprint": "13d83977d19fde56", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b1a8f98edfe1fa99", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/preceptors (app/clinical/internships/[id]/page.tsx:827)"}, "properties": {"repobilityId": "ad21ddfb281cfcdd", "scanner": "scanner-primary", "fingerprint": "b1a8f98edfe1fa99", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5844997fe33f3bbf", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/internships/all/page.tsx:304)"}, "properties": {"repobilityId": "97f14b7bba67d7d2", "scanner": "scanner-primary", "fingerprint": "5844997fe33f3bbf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a29a1978704911bd", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/internships/all/page.tsx:312)"}, "properties": {"repobilityId": "0b32176ef2d2497c", "scanner": "scanner-primary", "fingerprint": "a29a1978704911bd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a6f974f4c44519f6", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/agencies?type=ems (app/clinical/internships/all/page.tsx:313)"}, "properties": {"repobilityId": "642194f9c5ee9e3d", "scanner": "scanner-primary", "fingerprint": "a6f974f4c44519f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-58fa840d0f204228", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/preceptors?activeOnly=true (app/clinical/internships/all/page.tsx:314)"}, "properties": {"repobilityId": "6c6405390f384fbd", "scanner": "scanner-primary", "fingerprint": "58fa840d0f204228", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5669cc8226290843", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/internships/${i.id}/closeout/checklist (app/clinical/internships/all/page.tsx:376)"}, "properties": {"repobilityId": "9d735851ff5d8696", "scanner": "scanner-primary", "fingerprint": "5669cc8226290843", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c925492bcfa26412", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/clinical/internships/all/page.tsx:392)"}, "properties": {"repobilityId": "0bae5c6661e91f2c", "scanner": "scanner-primary", "fingerprint": "c925492bcfa26412", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-116ff6f58fbfa8da", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/agencies (app/clinical/internships/all/page.tsx:508)"}, "properties": {"repobilityId": "73b2d523c05e4881", "scanner": "scanner-primary", "fingerprint": "116ff6f58fbfa8da", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6569629831178b6d", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/preceptors (app/clinical/internships/all/page.tsx:538)"}, "properties": {"repobilityId": "9cfa182066796715", "scanner": "scanner-primary", "fingerprint": "6569629831178b6d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ee26c1e7bc650ab5", "level": "error", "message": {"text": "Dangling fetch: PUT /api/clinical/internships/${editingInternship.id} (app/clinical/internships/all/page.tsx:578)"}, "properties": {"repobilityId": "263aa74a2afb3719", "scanner": "scanner-primary", "fingerprint": "ee26c1e7bc650ab5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0c9e5e99fe1d4b8b", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/internships (app/clinical/internships/all/page.tsx:585)"}, "properties": {"repobilityId": "a8b9ee06cbb56bb2", "scanner": "scanner-primary", "fingerprint": "0c9e5e99fe1d4b8b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e80810aaa5b185f", "level": "error", "message": {"text": "Dangling fetch: PUT /api/clinical/internships/${internshipId} (app/clinical/internships/all/page.tsx:615)"}, "properties": {"repobilityId": "063b9cb766515997", "scanner": "scanner-primary", "fingerprint": "2e80810aaa5b185f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bb1a0ead94342edc", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId} (app/clinical/internships/cohort/[id]/page.tsx:351)"}, "properties": {"repobilityId": "b43e9d75d4ef2500", "scanner": "scanner-primary", "fingerprint": "bb1a0ead94342edc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-29bbc6a514d251b5", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/clinical/capacity (app/clinical/capacity/page.tsx:245)"}, "properties": {"repobilityId": "580e2bb56474efca", "scanner": "scanner-primary", "fingerprint": "29bbc6a514d251b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-453b14029d4713ae", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/capacity?${params.toString()} (app/clinical/capacity/page.tsx:410)"}, "properties": {"repobilityId": "0e8d91119f253bb9", "scanner": "scanner-primary", "fingerprint": "453b14029d4713ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-80b1f7c4a0ae3440", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/capacity/page.tsx:428)"}, "properties": {"repobilityId": "a52d78150c00247b", "scanner": "scanner-primary", "fingerprint": "80b1f7c4a0ae3440", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a71decbcd9a48f9d", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/ride-alongs/page.tsx:56)"}, "properties": {"repobilityId": "2cc74284a3fb531a", "scanner": "scanner-primary", "fingerprint": "a71decbcd9a48f9d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-29e9c44dcc6b31a4", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/ride-alongs (app/clinical/ride-alongs/page.tsx:68)"}, "properties": {"repobilityId": "e35873eeebfbc34a", "scanner": "scanner-primary", "fingerprint": "29e9c44dcc6b31a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea37fd1f9f056dc4", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/ride-alongs/availability (app/clinical/ride-alongs/page.tsx:69)"}, "properties": {"repobilityId": "0d41499b2fefe89d", "scanner": "scanner-primary", "fingerprint": "ea37fd1f9f056dc4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-34218432194b151a", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/ride-alongs/shifts/page.tsx:137)"}, "properties": {"repobilityId": "1ce3571fc66d2153", "scanner": "scanner-primary", "fingerprint": "34218432194b151a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d21306a223540cdd", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/ride-alongs (app/clinical/ride-alongs/shifts/page.tsx:145)"}, "properties": {"repobilityId": "9a293e50d75ffab2", "scanner": "scanner-primary", "fingerprint": "d21306a223540cdd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c10cfa781729353f", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/ride-alongs/templates (app/clinical/ride-alongs/shifts/page.tsx:146)"}, "properties": {"repobilityId": "a2edff223229b348", "scanner": "scanner-primary", "fingerprint": "c10cfa781729353f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-33cb6f1d22f6b365", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/agencies?type=ems (app/clinical/ride-alongs/shifts/page.tsx:147)"}, "properties": {"repobilityId": "b951c0a898cf3c4d", "scanner": "scanner-primary", "fingerprint": "33cb6f1d22f6b365", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6383d02f31003ba3", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/clinical/ride-alongs/shifts/page.tsx:148)"}, "properties": {"repobilityId": "1cff61e055d4fcfd", "scanner": "scanner-primary", "fingerprint": "6383d02f31003ba3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-279323d20a5a8867", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/ride-alongs?${params.toString()} (app/clinical/ride-alongs/shifts/page.tsx:174)"}, "properties": {"repobilityId": "04b40abe6c00f8d4", "scanner": "scanner-primary", "fingerprint": "279323d20a5a8867", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5439dce1f25a9b3a", "level": "error", "message": {"text": "Dangling fetch: GET /api/students?cohortId=${cohortId} (app/clinical/ride-alongs/shifts/page.tsx:188)"}, "properties": {"repobilityId": "03afe60c113b3aab", "scanner": "scanner-primary", "fingerprint": "5439dce1f25a9b3a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-43083ee7b27433e9", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/ride-alongs (app/clinical/ride-alongs/shifts/page.tsx:200)"}, "properties": {"repobilityId": "2a946b690ecc7882", "scanner": "scanner-primary", "fingerprint": "43083ee7b27433e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3fe366b898aa0d36", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/ride-alongs/templates/generate (app/clinical/ride-alongs/shifts/page.tsx:229)"}, "properties": {"repobilityId": "b2afa589fdaab291", "scanner": "scanner-primary", "fingerprint": "3fe366b898aa0d36", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-05e8e777095f396e", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/ride-alongs/assignments (app/clinical/ride-alongs/shifts/page.tsx:255)"}, "properties": {"repobilityId": "3cfbc4ece572c57f", "scanner": "scanner-primary", "fingerprint": "05e8e777095f396e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cbb731ddf7a19657", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/ride-alongs/auto-assign (app/clinical/ride-alongs/shifts/page.tsx:276)"}, "properties": {"repobilityId": "e73cb0359ac0fe08", "scanner": "scanner-primary", "fingerprint": "cbb731ddf7a19657", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-12c34abf908f4a26", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/ride-alongs/auto-assign (app/clinical/ride-alongs/shifts/page.tsx:295)"}, "properties": {"repobilityId": "befd5517d3846744", "scanner": "scanner-primary", "fingerprint": "12c34abf908f4a26", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d01721ab1426b59c", "level": "error", "message": {"text": "Dangling fetch: PUT /api/clinical/ride-alongs/${shiftId} (app/clinical/ride-alongs/shifts/page.tsx:316)"}, "properties": {"repobilityId": "710d05b1a4e6de36", "scanner": "scanner-primary", "fingerprint": "d01721ab1426b59c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b904ebbe5187ba31", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/ride-alongs/availability/page.tsx:110)"}, "properties": {"repobilityId": "33f459f3c69cb692", "scanner": "scanner-primary", "fingerprint": "b904ebbe5187ba31", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7c29e70ea9281ffc", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/clinical/ride-alongs/availability/page.tsx:118)"}, "properties": {"repobilityId": "9c731086a6921268", "scanner": "scanner-primary", "fingerprint": "7c29e70ea9281ffc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ffdef57de5ffaa3f", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/ride-alongs/availability (app/clinical/ride-alongs/availability/page.tsx:119)"}, "properties": {"repobilityId": "f1c07bd0b6e36b16", "scanner": "scanner-primary", "fingerprint": "ffdef57de5ffaa3f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea23ce7a51e51f85", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/ride-alongs/polls (app/clinical/ride-alongs/availability/page.tsx:120)"}, "properties": {"repobilityId": "c70128976ffd377c", "scanner": "scanner-primary", "fingerprint": "ea23ce7a51e51f85", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6b88c212f93b09eb", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=true (app/clinical/ride-alongs/availability/page.tsx:121)"}, "properties": {"repobilityId": "ad1996d891df2551", "scanner": "scanner-primary", "fingerprint": "6b88c212f93b09eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0dade1303abd9f3c", "level": "error", "message": {"text": "Dangling fetch: GET /api/students?cohortId=${selectedCohort} (app/clinical/ride-alongs/availability/page.tsx:144)"}, "properties": {"repobilityId": "0e7e16fe59cb373b", "scanner": "scanner-primary", "fingerprint": "0dade1303abd9f3c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-df34d9162a04f6de", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/ride-alongs/availability?cohort_id=${selectedCohort} (app/clinical/ride-alongs/availability/page.tsx:145)"}, "properties": {"repobilityId": "b6ff821c6d44c5d9", "scanner": "scanner-primary", "fingerprint": "df34d9162a04f6de", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bbe26d23b1e613d2", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/ride-alongs/polls (app/clinical/ride-alongs/availability/page.tsx:176)"}, "properties": {"repobilityId": "ea96eaaed599b0eb", "scanner": "scanner-primary", "fingerprint": "bbe26d23b1e613d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f4bf2989f8b0ffac", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/ride-alongs/polls/${pollId}/send (app/clinical/ride-alongs/availability/page.tsx:212)"}, "properties": {"repobilityId": "31aaf471d26e1c6b", "scanner": "scanner-primary", "fingerprint": "f4bf2989f8b0ffac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6b832f35ef01d108", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/ride-alongs/import (app/clinical/ride-alongs/import/page.tsx:108)"}, "properties": {"repobilityId": "b66bcd84e717cf49", "scanner": "scanner-primary", "fingerprint": "6b832f35ef01d108", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9d7554c43cd52d00", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/ride-alongs/import (app/clinical/ride-alongs/import/page.tsx:131)"}, "properties": {"repobilityId": "6dc0a7b79d8d6a4d", "scanner": "scanner-primary", "fingerprint": "9d7554c43cd52d00", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a9593468909851ca", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/agencies/page.tsx:89)"}, "properties": {"repobilityId": "bec6a70f70dc1e39", "scanner": "scanner-primary", "fingerprint": "a9593468909851ca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a19eeb3af71b6ca6", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/agencies?${params.toString()} (app/clinical/agencies/page.tsx:103)"}, "properties": {"repobilityId": "2f397cb9edc95ace", "scanner": "scanner-primary", "fingerprint": "a19eeb3af71b6ca6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4486a0715d50eed6", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/clinical/agencies/${id} (app/clinical/agencies/page.tsx:200)"}, "properties": {"repobilityId": "72e5c48dacea5c53", "scanner": "scanner-primary", "fingerprint": "4486a0715d50eed6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83a040a5a06d2daf", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/rotation-scheduler/page.tsx:181)"}, "properties": {"repobilityId": "615c89a6485c8ecc", "scanner": "scanner-primary", "fingerprint": "83a040a5a06d2daf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-77db370d5038643c", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/rotation-scheduler/page.tsx:213)"}, "properties": {"repobilityId": "9204698839f4f6c5", "scanner": "scanner-primary", "fingerprint": "77db370d5038643c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-256593b94aa636d5", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/sites?activeOnly=true (app/clinical/rotation-scheduler/page.tsx:214)"}, "properties": {"repobilityId": "b4e423aff338e8ba", "scanner": "scanner-primary", "fingerprint": "256593b94aa636d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5a04cf62b951e2f5", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active&limit=100 (app/clinical/rotation-scheduler/page.tsx:240)"}, "properties": {"repobilityId": "1ed43686131a4802", "scanner": "scanner-primary", "fingerprint": "5a04cf62b951e2f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-817ce8fad055741c", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/rotations (app/clinical/rotation-scheduler/page.tsx:352)"}, "properties": {"repobilityId": "78809af0997bb4aa", "scanner": "scanner-primary", "fingerprint": "817ce8fad055741c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b460a6492023bf75", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/clinical/rotations/${rotationId} (app/clinical/rotation-scheduler/page.tsx:407)"}, "properties": {"repobilityId": "2a812fa08bf34277", "scanner": "scanner-primary", "fingerprint": "b460a6492023bf75", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-27f27f4f0ea4f659", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/rotations (app/clinical/rotation-scheduler/page.tsx:470)"}, "properties": {"repobilityId": "7fb99c2e89771e93", "scanner": "scanner-primary", "fingerprint": "27f27f4f0ea4f659", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ad879df89adc8a3b", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/site-visits/page.tsx:209)"}, "properties": {"repobilityId": "c35dd2fd327c2917", "scanner": "scanner-primary", "fingerprint": "ad879df89adc8a3b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9d258bb30f4354ba", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/sites?includeDepartments=true&includeAgencies=true (app/clinical/site-visits/page.tsx:228)"}, "properties": {"repobilityId": "c7d51bba64b429b1", "scanner": "scanner-primary", "fingerprint": "9d258bb30f4354ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-58f68dec986b1edb", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts (app/clinical/site-visits/page.tsx:229)"}, "properties": {"repobilityId": "5b37542934860e02", "scanner": "scanner-primary", "fingerprint": "58f68dec986b1edb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c250cc5dd3f8ece7", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/instructors (app/clinical/site-visits/page.tsx:230)"}, "properties": {"repobilityId": "b1d9ca3995d18dd8", "scanner": "scanner-primary", "fingerprint": "c250cc5dd3f8ece7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f174bd8fbc9ddc00", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/site-visits?${params.toString()} (app/clinical/site-visits/page.tsx:266)"}, "properties": {"repobilityId": "48e3620e0190815e", "scanner": "scanner-primary", "fingerprint": "f174bd8fbc9ddc00", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bd79154a00f103d9", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${cohortId}&status=active (app/clinical/site-visits/page.tsx:282)"}, "properties": {"repobilityId": "a96e8cd1c15d2cd3", "scanner": "scanner-primary", "fingerprint": "bd79154a00f103d9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3125716840e32256", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/clinical/site-visits/${id} (app/clinical/site-visits/page.tsx:382)"}, "properties": {"repobilityId": "b25168e43965e25b", "scanner": "scanner-primary", "fingerprint": "3125716840e32256", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-161088b5773544f3", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/affiliations?${params.toString()} (app/clinical/affiliations/page.tsx:165)"}, "properties": {"repobilityId": "dc6b3bd24ca6ca67", "scanner": "scanner-primary", "fingerprint": "161088b5773544f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e5232d2a443ae0b", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/affiliations/page.tsx:180)"}, "properties": {"repobilityId": "d3887e5030aef94b", "scanner": "scanner-primary", "fingerprint": "6e5232d2a443ae0b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e19895e2e0cec89f", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/affiliations (app/clinical/affiliations/page.tsx:290)"}, "properties": {"repobilityId": "cb6b26b274cd0a68", "scanner": "scanner-primary", "fingerprint": "e19895e2e0cec89f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f685ba7c7ac6b2fa", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/clinical/affiliations?id=${id} (app/clinical/affiliations/page.tsx:312)"}, "properties": {"repobilityId": "5162c96489cd23aa", "scanner": "scanner-primary", "fingerprint": "f685ba7c7ac6b2fa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-90cbdf3fdc9d8387", "level": "error", "message": {"text": "Dangling fetch: PUT /api/clinical/affiliations (app/clinical/affiliations/page.tsx:328)"}, "properties": {"repobilityId": "6a6dab35825bc8e2", "scanner": "scanner-primary", "fingerprint": "90cbdf3fdc9d8387", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b4ae12a13b4e093e", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/site-visit-settings/page.tsx:62)"}, "properties": {"repobilityId": "9b82bf6d1da92e62", "scanner": "scanner-primary", "fingerprint": "b4ae12a13b4e093e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-665cfcdeda5cf7e8", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/sites?activeOnly=false (app/clinical/site-visit-settings/page.tsx:73)"}, "properties": {"repobilityId": "6f8de8f2f365800d", "scanner": "scanner-primary", "fingerprint": "665cfcdeda5cf7e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0f0eb827fab0d9cd", "level": "error", "message": {"text": "Dangling fetch: PUT /api/clinical/sites/${siteId} (app/clinical/site-visit-settings/page.tsx:140)"}, "properties": {"repobilityId": "7bfeaa15219f9ba5", "scanner": "scanner-primary", "fingerprint": "0f0eb827fab0d9cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f4764a144474a23f", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/preceptors/page.tsx:190)"}, "properties": {"repobilityId": "9647a12d384c7dbe", "scanner": "scanner-primary", "fingerprint": "f4764a144474a23f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-852d2fcd7a739e6e", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/agencies (app/clinical/preceptors/page.tsx:206)"}, "properties": {"repobilityId": "d6732c68b1b1cdaa", "scanner": "scanner-primary", "fingerprint": "852d2fcd7a739e6e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4d82eaea2cda5506", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/clinical/preceptors/${preceptor.id} (app/clinical/preceptors/page.tsx:351)"}, "properties": {"repobilityId": "331b120a66788758", "scanner": "scanner-primary", "fingerprint": "4d82eaea2cda5506", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eda9707e4ff74ad7", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/summative-evaluations/page.tsx:128)"}, "properties": {"repobilityId": "a1159abd286b5b7b", "scanner": "scanner-primary", "fingerprint": "eda9707e4ff74ad7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0a4f5197eb234c65", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/summative-evaluations (app/clinical/summative-evaluations/page.tsx:140)"}, "properties": {"repobilityId": "665f2f8ff14f6b70", "scanner": "scanner-primary", "fingerprint": "0a4f5197eb234c65", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fc1a53fe8be6c1ff", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/summative-scenarios (app/clinical/summative-evaluations/page.tsx:141)"}, "properties": {"repobilityId": "5366ad66b67af810", "scanner": "scanner-primary", "fingerprint": "fc1a53fe8be6c1ff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1ca613e51a79501d", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/summative-evaluations/page.tsx:142)"}, "properties": {"repobilityId": "20964c7fb8964f90", "scanner": "scanner-primary", "fingerprint": "1ca613e51a79501d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4d001d8fc79b0a11", "level": "error", "message": {"text": "Dangling fetch: GET /api/students?cohortId=${cohortId} (app/clinical/summative-evaluations/page.tsx:167)"}, "properties": {"repobilityId": "eb23315eb8e899b8", "scanner": "scanner-primary", "fingerprint": "4d001d8fc79b0a11", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-559fe1393fd1dc0f", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/summative-evaluations (app/clinical/summative-evaluations/page.tsx:202)"}, "properties": {"repobilityId": "03f4dab07fb84513", "scanner": "scanner-primary", "fingerprint": "559fe1393fd1dc0f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-145641eab3d05f9f", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/summative-evaluations/[id]/grade/page.tsx:288)"}, "properties": {"repobilityId": "c67e45b8ca3f7fa6", "scanner": "scanner-primary", "fingerprint": "145641eab3d05f9f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-344db8c48fd31252", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/summative-evaluations/${evaluationId} (app/clinical/summative-evaluations/[id]/grade/page.tsx:299)"}, "properties": {"repobilityId": "1c07a614ab1e7e16", "scanner": "scanner-primary", "fingerprint": "344db8c48fd31252", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a4bf7fc2e4cd6e44", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/clinical/summative-evaluations/${evaluationId}/scores (app/clinical/summative-evaluations/[id]/grade/page.tsx:360)"}, "properties": {"repobilityId": "12ebf4d1bbd881d4", "scanner": "scanner-primary", "fingerprint": "a4bf7fc2e4cd6e44", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-90fad75c54e3a10e", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/compliance-tracker/page.tsx:199)"}, "properties": {"repobilityId": "38e0df97a295f9d8", "scanner": "scanner-primary", "fingerprint": "90fad75c54e3a10e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-68fbc44ec79a6991", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/compliance-tracker/page.tsx:209)"}, "properties": {"repobilityId": "9cef30ffb38e1fc3", "scanner": "scanner-primary", "fingerprint": "68fbc44ec79a6991", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f4437750ec6d33a2", "level": "error", "message": {"text": "Dangling fetch: GET /api/compliance?cohort_id=${selectedCohort} (app/clinical/compliance-tracker/page.tsx:226)"}, "properties": {"repobilityId": "fabff13d968f9326", "scanner": "scanner-primary", "fingerprint": "f4437750ec6d33a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1263b4d4b5a8fdc2", "level": "error", "message": {"text": "Dangling fetch: POST /api/compliance (app/clinical/compliance-tracker/page.tsx:253)"}, "properties": {"repobilityId": "685777bcced5182b", "scanner": "scanner-primary", "fingerprint": "1263b4d4b5a8fdc2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1ff7c4e7cd3f4fe5", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/overview/page.tsx:92)"}, "properties": {"repobilityId": "e321b2dde59e3d67", "scanner": "scanner-primary", "fingerprint": "1ff7c4e7cd3f4fe5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ae318b534afb77f9", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/overview-all (app/clinical/overview/page.tsx:112)"}, "properties": {"repobilityId": "fc6a622fb8c2fd2d", "scanner": "scanner-primary", "fingerprint": "ae318b534afb77f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7bc0c4b1ddfe1ead", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/compliance/page.tsx:91)"}, "properties": {"repobilityId": "d34809460f36d757", "scanner": "scanner-primary", "fingerprint": "7bc0c4b1ddfe1ead", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ba987f9a54adc1fd", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/compliance/page.tsx:101)"}, "properties": {"repobilityId": "b68b836c087e4e7e", "scanner": "scanner-primary", "fingerprint": "ba987f9a54adc1fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8024a4074f49b28c", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${selectedCohort}&status=active (app/clinical/compliance/page.tsx:119)"}, "properties": {"repobilityId": "277628a70d654aa7", "scanner": "scanner-primary", "fingerprint": "8024a4074f49b28c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fbccdebde99a7587", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/compliance?cohortId=${selectedCohort} (app/clinical/compliance/page.tsx:120)"}, "properties": {"repobilityId": "adb4addd08e4e947", "scanner": "scanner-primary", "fingerprint": "fbccdebde99a7587", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-270dbb54c96c736a", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/compliance (app/clinical/compliance/page.tsx:154)"}, "properties": {"repobilityId": "4c3e65f628a1ccce", "scanner": "scanner-primary", "fingerprint": "270dbb54c96c736a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-deed7e05a5205d9c", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/hours (app/clinical/hours/page.tsx:483)"}, "properties": {"repobilityId": "9c60c3b23b40de7f", "scanner": "scanner-primary", "fingerprint": "deed7e05a5205d9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2ccdfa49d5f87182", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/students/${row.matchedStudent.id} (app/clinical/hours/page.tsx:876)"}, "properties": {"repobilityId": "4c0d2be15e20a050", "scanner": "scanner-primary", "fingerprint": "2ccdfa49d5f87182", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-631df3bdec797c78", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/hours (app/clinical/hours/page.tsx:895)"}, "properties": {"repobilityId": "20b6b30eb321bc7c", "scanner": "scanner-primary", "fingerprint": "631df3bdec797c78", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9bbbe5cff95047ca", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/mce/page.tsx:145)"}, "properties": {"repobilityId": "ae536bf212493339", "scanner": "scanner-primary", "fingerprint": "9bbbe5cff95047ca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a89e15655dab1eaf", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/mce/page.tsx:155)"}, "properties": {"repobilityId": "d977c4d6ff47bdc4", "scanner": "scanner-primary", "fingerprint": "a89e15655dab1eaf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-433118c8e01eec64", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/mce?cohortId=${selectedCohort} (app/clinical/mce/page.tsx:171)"}, "properties": {"repobilityId": "f2bd73148a9ff0b4", "scanner": "scanner-primary", "fingerprint": "433118c8e01eec64", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dc06e53ae7a7c791", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/mce (app/clinical/mce/page.tsx:205)"}, "properties": {"repobilityId": "03aba554edf63b25", "scanner": "scanner-primary", "fingerprint": "dc06e53ae7a7c791", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6cb6069165fbbb34", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/clinical/mce (app/clinical/mce/page.tsx:235)"}, "properties": {"repobilityId": "04f015117eda05d5", "scanner": "scanner-primary", "fingerprint": "6cb6069165fbbb34", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-73ed51d2dcdffeab", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/emt-tracking/page.tsx:87)"}, "properties": {"repobilityId": "31689eae22080b31", "scanner": "scanner-primary", "fingerprint": "73ed51d2dcdffeab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-03b2b16916338dfb", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (app/clinical/emt-tracking/page.tsx:98)"}, "properties": {"repobilityId": "edb6f33115a776d8", "scanner": "scanner-primary", "fingerprint": "03b2b16916338dfb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-62d96f01c9bcba2e", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?cohortId=${selectedCohort}&status=active (app/clinical/emt-tracking/page.tsx:120)"}, "properties": {"repobilityId": "b7982470e7f426ae", "scanner": "scanner-primary", "fingerprint": "62d96f01c9bcba2e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2216942cb5ccf637", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/emt-tracking?cohortId=${selectedCohort} (app/clinical/emt-tracking/page.tsx:121)"}, "properties": {"repobilityId": "1f52690633e7f11a", "scanner": "scanner-primary", "fingerprint": "2216942cb5ccf637", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-680662f35f5459fc", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/emt-tracking (app/clinical/emt-tracking/page.tsx:153)"}, "properties": {"repobilityId": "e2e3e4cd71cf7764", "scanner": "scanner-primary", "fingerprint": "680662f35f5459fc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-96d4a7b60f14a059", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/clinical/planning-calendar/page.tsx:148)"}, "properties": {"repobilityId": "fe60d18e0a0725b7", "scanner": "scanner-primary", "fingerprint": "96d4a7b60f14a059", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7d8143fa1b20dfde", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/sites?activeOnly=true (app/clinical/planning-calendar/page.tsx:176)"}, "properties": {"repobilityId": "7c95de85eef4a703", "scanner": "scanner-primary", "fingerprint": "7d8143fa1b20dfde", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5ce2574e6fb985cd", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/planning-calendar (app/clinical/planning-calendar/page.tsx:333)"}, "properties": {"repobilityId": "d18571f01e7364cb", "scanner": "scanner-primary", "fingerprint": "5ce2574e6fb985cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-329a991945a9f7ab", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/clinical/planning-calendar?id=${id} (app/clinical/planning-calendar/page.tsx:356)"}, "properties": {"repobilityId": "2eddabe449ff9610", "scanner": "scanner-primary", "fingerprint": "329a991945a9f7ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-663150b5ca881f9b", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (app/scheduler/page.tsx:38)"}, "properties": {"repobilityId": "851448afe4992752", "scanner": "scanner-primary", "fingerprint": "663150b5ca881f9b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-da1d9695feb63506", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/polls?id=${pollId} (app/scheduler/page.tsx:83)"}, "properties": {"repobilityId": "258fb8f611d1f409", "scanner": "scanner-primary", "fingerprint": "da1d9695feb63506", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2f6544dc674f60a3", "level": "error", "message": {"text": "Dangling fetch: POST /api/polls (app/scheduler/create/page.tsx:29)"}, "properties": {"repobilityId": "0cc88117ca06fc04", "scanner": "scanner-primary", "fingerprint": "2f6544dc674f60a3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6dad619ee88593fc", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/preceptor-eval/${token} (app/preceptor/evaluate/[token]/page.tsx:126)"}, "properties": {"repobilityId": "04f227738dc9a03d", "scanner": "scanner-primary", "fingerprint": "6dad619ee88593fc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4aaa564722e5c12e", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/preceptor-eval/${token} (app/preceptor/evaluate/[token]/page.tsx:170)"}, "properties": {"repobilityId": "1d111137246495c5", "scanner": "scanner-primary", "fingerprint": "4aaa564722e5c12e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1c0a398c76e6202c", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (hooks/useCurrentUser.ts:5)"}, "properties": {"repobilityId": "05ff06d01d32814a", "scanner": "scanner-primary", "fingerprint": "1c0a398c76e6202c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7edee7f1c8ff49ea", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?${params} (hooks/useStudents.ts:32)"}, "properties": {"repobilityId": "db23339940195747", "scanner": "scanner-primary", "fingerprint": "7edee7f1c8ff49ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-08a90f3c57d00518", "level": "error", "message": {"text": "Dangling fetch: GET /api/calendar/availability?${params} (hooks/useCalendarAvailability.ts:66)"}, "properties": {"repobilityId": "d4ea9995a7788d03", "scanner": "scanner-primary", "fingerprint": "08a90f3c57d00518", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-de46d5e0c0b7a1a0", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days?${params} (hooks/useLabDays.ts:75)"}, "properties": {"repobilityId": "2dc7324b196861bb", "scanner": "scanner-primary", "fingerprint": "de46d5e0c0b7a1a0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a5fc0436eac82b48", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?${params} (hooks/useCohorts.ts:29)"}, "properties": {"repobilityId": "3888be6c5e1d64de", "scanner": "scanner-primary", "fingerprint": "a5fc0436eac82b48", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0074e42be01662f9", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/scenarios?${params} (hooks/useScenarios.ts:29)"}, "properties": {"repobilityId": "0f6de1264e3c59a9", "scanner": "scanner-primary", "fingerprint": "0074e42be01662f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6eaf907629d7b93b", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/students/${studentId}/communications (components/StudentCommunications.tsx:198)"}, "properties": {"repobilityId": "d9c16bf4073cfa87", "scanner": "scanner-primary", "fingerprint": "6eaf907629d7b93b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2603afc6ed20d870", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/students/${studentId}/communications (components/StudentCommunications.tsx:234)"}, "properties": {"repobilityId": "d2c527fd33759646", "scanner": "scanner-primary", "fingerprint": "2603afc6ed20d870", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-961d4b24b54cfd5d", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/students/${studentId}/communications (components/StudentCommunications.tsx:257)"}, "properties": {"repobilityId": "c9e6d361b6dda227", "scanner": "scanner-primary", "fingerprint": "961d4b24b54cfd5d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8f691de630abb471", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (components/RolePreviewSelector.tsx:29)"}, "properties": {"repobilityId": "9b9682fc69fad7e2", "scanner": "scanner-primary", "fingerprint": "8f691de630abb471", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b5a12d341553cc82", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/scenarios/${scenarioId}/versions (components/ScenarioVersionHistory.tsx:290)"}, "properties": {"repobilityId": "511493739b83a3ff", "scanner": "scanner-primary", "fingerprint": "b5a12d341553cc82", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c0ba75553fdd620b", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/scenarios/${scenarioId} (components/ScenarioVersionHistory.tsx:315)"}, "properties": {"repobilityId": "4cc97ac2af662ed7", "scanner": "scanner-primary", "fingerprint": "c0ba75553fdd620b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-da42a8bb05777bb9", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/scenarios/${scenarioId}/versions (components/ScenarioVersionHistory.tsx:332)"}, "properties": {"repobilityId": "0aa46ede116ff7e6", "scanner": "scanner-primary", "fingerprint": "da42a8bb05777bb9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9214bdaf988a37bc", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/timer/ready?labDayId=${labDayId} (components/TimerBanner.tsx:140)"}, "properties": {"repobilityId": "108bfd03918ce397", "scanner": "scanner-primary", "fingerprint": "9214bdaf988a37bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0ebc4af4efeca060", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/timer/ready (components/TimerBanner.tsx:160)"}, "properties": {"repobilityId": "0906359b6780b0cc", "scanner": "scanner-primary", "fingerprint": "0ebc4af4efeca060", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4bceb469768f9cca", "level": "error", "message": {"text": "Dangling fetch: GET /api/notifications (components/NotificationBell.tsx:165)"}, "properties": {"repobilityId": "ee256873e0c4b51e", "scanner": "scanner-primary", "fingerprint": "4bceb469768f9cca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6f5cea6eb0f90cbf", "level": "error", "message": {"text": "Dangling fetch: GET /api/notifications (components/NotificationBell.tsx:203)"}, "properties": {"repobilityId": "b04d1d9dd9e0cff6", "scanner": "scanner-primary", "fingerprint": "6f5cea6eb0f90cbf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c2138b014b1f435e", "level": "error", "message": {"text": "Dangling fetch: GET /api/notifications/preferences (components/NotificationBell.tsx:204)"}, "properties": {"repobilityId": "c70ace64ccae0a2e", "scanner": "scanner-primary", "fingerprint": "c2138b014b1f435e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-211e08f38e9d1255", "level": "error", "message": {"text": "Dangling fetch: GET /api/user/preferences (components/NotificationBell.tsx:205)"}, "properties": {"repobilityId": "15a9cf7d9afdec29", "scanner": "scanner-primary", "fingerprint": "211e08f38e9d1255", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d5c2a541a1306738", "level": "error", "message": {"text": "Dangling fetch: PUT /api/notifications/read (components/NotificationBell.tsx:261)"}, "properties": {"repobilityId": "f6cf74fb087ddc2d", "scanner": "scanner-primary", "fingerprint": "d5c2a541a1306738", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-77efd3614bed81ba", "level": "error", "message": {"text": "Dangling fetch: PUT /api/notifications/read (components/NotificationBell.tsx:278)"}, "properties": {"repobilityId": "7ee76e342247469e", "scanner": "scanner-primary", "fingerprint": "77efd3614bed81ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1457f6ce0bb1a82b", "level": "error", "message": {"text": "Dangling fetch: PUT /api/notifications/preferences (components/NotificationBell.tsx:307)"}, "properties": {"repobilityId": "d608247c24198e83", "scanner": "scanner-primary", "fingerprint": "1457f6ce0bb1a82b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea9f7a98ebb23598", "level": "error", "message": {"text": "Dangling fetch: GET /api/notifications (components/NotificationBell.tsx:315)"}, "properties": {"repobilityId": "f1bc07afe6c36393", "scanner": "scanner-primary", "fingerprint": "ea9f7a98ebb23598", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-86d2ff8e66a46815", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/checklists/attendance (components/ChecklistAttendance.tsx:135)"}, "properties": {"repobilityId": "ee277347afba0f86", "scanner": "scanner-primary", "fingerprint": "86d2ff8e66a46815", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ea92c4c28b49a188", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/checklists/attendance (components/ChecklistAttendance.tsx:172)"}, "properties": {"repobilityId": "281e592685505fba", "scanner": "scanner-primary", "fingerprint": "ea92c4c28b49a188", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1eda41ec8c864278", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/checklists (components/ChecklistAttendance.tsx:198)"}, "properties": {"repobilityId": "6fa2692b0130c277", "scanner": "scanner-primary", "fingerprint": "1eda41ec8c864278", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-948fd6ad7fa10007", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (components/SessionTimeoutProvider.tsx:21)"}, "properties": {"repobilityId": "80ef0aaf32909764", "scanner": "scanner-primary", "fingerprint": "948fd6ad7fa10007", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6037b54840288bfa", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/timer?labDayId=${labDayId} (components/LabTimer.tsx:163)"}, "properties": {"repobilityId": "0e7c4862a0574f0b", "scanner": "scanner-primary", "fingerprint": "6037b54840288bfa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fb5b78263aec4cd8", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/timer/ready?labDayId=${labDayId} (components/LabTimer.tsx:227)"}, "properties": {"repobilityId": "f5087a37736479fd", "scanner": "scanner-primary", "fingerprint": "fb5b78263aec4cd8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a9ef70e6a1766bd5", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/timer/ready (components/LabTimer.tsx:252)"}, "properties": {"repobilityId": "940cb4c75e8cca8c", "scanner": "scanner-primary", "fingerprint": "a9ef70e6a1766bd5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0f5fbd469726be30", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/timer/active (components/LabTimer.tsx:275)"}, "properties": {"repobilityId": "18b80d6c255ad2be", "scanner": "scanner-primary", "fingerprint": "0f5fbd469726be30", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4add596fb2a2ec19", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/timer (components/LabTimer.tsx:295)"}, "properties": {"repobilityId": "bed741a8bf7f6873", "scanner": "scanner-primary", "fingerprint": "4add596fb2a2ec19", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c72a1a9bbf6663a0", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/timer?labDayId=${labDayId} (components/LabTimer.tsx:320)"}, "properties": {"repobilityId": "8565fa90006f5ec4", "scanner": "scanner-primary", "fingerprint": "c72a1a9bbf6663a0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fcb4bfab72d478c5", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/timer (components/LabTimer.tsx:353)"}, "properties": {"repobilityId": "4dc15edb43225f8a", "scanner": "scanner-primary", "fingerprint": "fcb4bfab72d478c5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0af6acd835e855b6", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/timer/adjust (components/LabTimer.tsx:384)"}, "properties": {"repobilityId": "ab22132a1e766872", "scanner": "scanner-primary", "fingerprint": "0af6acd835e855b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e1594d390638d01a", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/timer/adjust (components/LabTimer.tsx:410)"}, "properties": {"repobilityId": "9ba712c3e644244b", "scanner": "scanner-primary", "fingerprint": "e1594d390638d01a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-25e3d64dce6a4a5d", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/students/${fm.matchedStudentId}/photo (components/BulkPhotoUpload.tsx:159)"}, "properties": {"repobilityId": "24b2d3832c61e68f", "scanner": "scanner-primary", "fingerprint": "25e3d64dce6a4a5d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eab43991483357d2", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/user-activity/log (components/ActivityTracker.tsx:15)"}, "properties": {"repobilityId": "c8aa5a2146508c60", "scanner": "scanner-primary", "fingerprint": "eab43991483357d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-48320c6833789c7a", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (components/CommandPalette.tsx:262)"}, "properties": {"repobilityId": "a5a3ab55b19e5da0", "scanner": "scanner-primary", "fingerprint": "48320c6833789c7a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c8bd2c8a270fc7e3", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/attendance (components/AttendanceSection.tsx:97)"}, "properties": {"repobilityId": "782f9f880f3761a2", "scanner": "scanner-primary", "fingerprint": "c8bd2c8a270fc7e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-373e513540bcf657", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/lab-days/${labDayId}/attendance (components/AttendanceSection.tsx:161)"}, "properties": {"repobilityId": "9bd4177e564cf83f", "scanner": "scanner-primary", "fingerprint": "373e513540bcf657", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a2505649935d1ac2", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/lab-days/${labDayId}/attendance (components/AttendanceSection.tsx:212)"}, "properties": {"repobilityId": "d2772e23ff16aa63", "scanner": "scanner-primary", "fingerprint": "a2505649935d1ac2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-01c0791706008591", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/attendance (components/AttendanceSection.tsx:232)"}, "properties": {"repobilityId": "f0e78d268f8b1b76", "scanner": "scanner-primary", "fingerprint": "01c0791706008591", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b640a4966799ac2a", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/attendance (components/AttendanceSection.tsx:258)"}, "properties": {"repobilityId": "ced41d23a6875260", "scanner": "scanner-primary", "fingerprint": "b640a4966799ac2a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6dec75718566c58f", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/site-visits/coverage?keySitesOnly=true (components/SiteVisitAlerts.tsx:58)"}, "properties": {"repobilityId": "c451306abff83338", "scanner": "scanner-primary", "fingerprint": "6dec75718566c58f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dfa6e519612c10ec", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/site-visits/coverage (components/SiteVisitAlerts.tsx:80)"}, "properties": {"repobilityId": "fe341f628bafa97e", "scanner": "scanner-primary", "fingerprint": "dfa6e519612c10ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8016fca144424bcf", "level": "error", "message": {"text": "Dangling fetch: POST /api/ferpa/agreement (components/ConsentModal.tsx:50)"}, "properties": {"repobilityId": "d11d3694e0ecdf57", "scanner": "scanner-primary", "fingerprint": "8016fca144424bcf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1ae93a17887e7e00", "level": "error", "message": {"text": "Dangling fetch: GET /api/calendar/status (components/UserMenu.tsx:87)"}, "properties": {"repobilityId": "0762291ebeffbd29", "scanner": "scanner-primary", "fingerprint": "1ae93a17887e7e00", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b40be4d79840469e", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/timer (components/InlineTimerWidget.tsx:137)"}, "properties": {"repobilityId": "fa5b794aac498674", "scanner": "scanner-primary", "fingerprint": "b40be4d79840469e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1ef717d7594d6a04", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/timer/adjust (components/InlineTimerWidget.tsx:157)"}, "properties": {"repobilityId": "0eecc199a5c56675", "scanner": "scanner-primary", "fingerprint": "1ef717d7594d6a04", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-358bac647eda1a54", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students/${studentId}/learning-plan (components/LearningPlanBanner.tsx:17)"}, "properties": {"repobilityId": "ae98990af0e116c1", "scanner": "scanner-primary", "fingerprint": "358bac647eda1a54", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-53ad5c185665ca94", "level": "error", "message": {"text": "Dangling fetch: GET /api/user-preferences/tour (components/OnboardingTour.tsx:533)"}, "properties": {"repobilityId": "e20a254a833eea75", "scanner": "scanner-primary", "fingerprint": "53ad5c185665ca94", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c47493fb4a57bb8f", "level": "error", "message": {"text": "Dangling fetch: POST /api/user-preferences/tour (components/OnboardingTour.tsx:548)"}, "properties": {"repobilityId": "e854fd40fd1403de", "scanner": "scanner-primary", "fingerprint": "c47493fb4a57bb8f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1c53bf4e4eb38967", "level": "error", "message": {"text": "Dangling fetch: POST /api/user-preferences/tour (components/OnboardingTour.tsx:577)"}, "properties": {"repobilityId": "71ccb34aae980c89", "scanner": "scanner-primary", "fingerprint": "1c53bf4e4eb38967", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f2d9f1a416df8e0d", "level": "error", "message": {"text": "Dangling fetch: POST /api/errors/log (components/PageErrorBoundary.tsx:33)"}, "properties": {"repobilityId": "488382966e6c8608", "scanner": "scanner-primary", "fingerprint": "f2d9f1a416df8e0d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f3baaa561e5a72fd", "level": "error", "message": {"text": "Dangling fetch: GET /api/ferpa/agreement?type=${agreementType} (components/ConsentGate.tsx:38)"}, "properties": {"repobilityId": "5ecfd005c8e27ef1", "scanner": "scanner-primary", "fingerprint": "f3baaa561e5a72fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e03c782e8ab41b87", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/attendance/at-risk (components/AttendanceAlertBanner.tsx:37)"}, "properties": {"repobilityId": "0ac477db78ed1e64", "scanner": "scanner-primary", "fingerprint": "e03c782e8ab41b87", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e88ebcb372010408", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/lab-templates/update-from-lab (components/TemplateDiffModal.tsx:410)"}, "properties": {"repobilityId": "d59daae70ad2b1ba", "scanner": "scanner-primary", "fingerprint": "e88ebcb372010408", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fd0339f2a09e65f1", "level": "error", "message": {"text": "Dangling fetch: GET /api/deep-links/qr?${params.toString()} (components/QRCodeDisplay.tsx:48)"}, "properties": {"repobilityId": "c294bc3f667e2a53", "scanner": "scanner-primary", "fingerprint": "fd0339f2a09e65f1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ecc5277f36ee8d9b", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (components/OnboardingTourWrapper.tsx:35)"}, "properties": {"repobilityId": "1d48a3983befa370", "scanner": "scanner-primary", "fingerprint": "ecc5277f36ee8d9b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ceaab893f4acf8ec", "level": "error", "message": {"text": "Dangling fetch: POST /api/errors/log (components/SectionErrorPage.tsx:36)"}, "properties": {"repobilityId": "5b413ac9dd9de485", "scanner": "scanner-primary", "fingerprint": "ceaab893f4acf8ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c36d7a042200dd6e", "level": "error", "message": {"text": "Dangling fetch: GET /api/settings/2fa/status (components/TwoFactorPanel.tsx:259)"}, "properties": {"repobilityId": "24ea8cc667cd0845", "scanner": "scanner-primary", "fingerprint": "c36d7a042200dd6e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7e8a5edd39cdb15d", "level": "error", "message": {"text": "Dangling fetch: POST /api/settings/2fa/setup (components/TwoFactorPanel.tsx:280)"}, "properties": {"repobilityId": "fff3a9087432e387", "scanner": "scanner-primary", "fingerprint": "7e8a5edd39cdb15d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-40ae0948f3c06d5b", "level": "error", "message": {"text": "Dangling fetch: POST /api/settings/2fa/verify (components/TwoFactorPanel.tsx:305)"}, "properties": {"repobilityId": "88677d1f25bbb3af", "scanner": "scanner-primary", "fingerprint": "40ae0948f3c06d5b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d700d2387fb5adce", "level": "error", "message": {"text": "Dangling fetch: POST /api/settings/2fa/disable (components/TwoFactorPanel.tsx:336)"}, "properties": {"repobilityId": "75dba972670021a1", "scanner": "scanner-primary", "fingerprint": "d700d2387fb5adce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-101b56b1c707290f", "level": "error", "message": {"text": "Dangling fetch: GET /api/skill-sheets/${sheetId} (components/SkillSheetPanel.tsx:485)"}, "properties": {"repobilityId": "9d208b2db9cf756e", "scanner": "scanner-primary", "fingerprint": "101b56b1c707290f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-91d2fe9f31a62983", "level": "error", "message": {"text": "Dangling fetch: GET /api/skill-sheets/${sheetId}/evaluations?student_id=${studentId} (components/SkillSheetPanel.tsx:510)"}, "properties": {"repobilityId": "ce9c9dca3398a5f0", "scanner": "scanner-primary", "fingerprint": "91d2fe9f31a62983", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-97ef8c24f313c41e", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/student-queue (components/SkillSheetPanel.tsx:569)"}, "properties": {"repobilityId": "5132a1b55602929e", "scanner": "scanner-primary", "fingerprint": "97ef8c24f313c41e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83efdba16e1abcea", "level": "error", "message": {"text": "Dangling fetch: POST /api/skill-sheets/${sheetId}/evaluate (components/SkillSheetPanel.tsx:725)"}, "properties": {"repobilityId": "5727e247921747d6", "scanner": "scanner-primary", "fingerprint": "83efdba16e1abcea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-90652abef7922a92", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/student-queue (components/SkillSheetPanel.tsx:769)"}, "properties": {"repobilityId": "dacd38b69dae697f", "scanner": "scanner-primary", "fingerprint": "90652abef7922a92", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-48f59732d3dac48b", "level": "error", "message": {"text": "Dangling fetch: POST /api/skill-sheets/evaluations/send-email (components/SkillSheetPanel.tsx:795)"}, "properties": {"repobilityId": "73b04a6ae89f79af", "scanner": "scanner-primary", "fingerprint": "48f59732d3dac48b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-748acf95b9de9327", "level": "error", "message": {"text": "Dangling fetch: POST /api/skill-sheets/evaluations/send-batch-email (components/SkillSheetPanel.tsx:849)"}, "properties": {"repobilityId": "7d4239ff51fcb2c8", "scanner": "scanner-primary", "fingerprint": "748acf95b9de9327", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-897a7de3dff74470", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/skill-sheets/${sheetId}/evaluations?evaluation_id=${evalId} (components/SkillSheetPanel.tsx:873)"}, "properties": {"repobilityId": "a1449e34e8ef9f58", "scanner": "scanner-primary", "fingerprint": "897a7de3dff74470", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-989eb0d8b8e06ce5", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/skill-results/resend (components/SkillSheetPanel.tsx:901)"}, "properties": {"repobilityId": "5f9b369090ad9a28", "scanner": "scanner-primary", "fingerprint": "989eb0d8b8e06ce5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-80b0f8aa98a1f2e7", "level": "error", "message": {"text": "Dangling fetch: POST /api/skill-sheets/${sheetId}/evaluate (components/SkillSheetPanel.tsx:1073)"}, "properties": {"repobilityId": "47490155d20e15e3", "scanner": "scanner-primary", "fingerprint": "80b0f8aa98a1f2e7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2b628dc851e72747", "level": "error", "message": {"text": "Dangling fetch: POST /api/feedback (components/FeedbackButton.tsx:122)"}, "properties": {"repobilityId": "45de0556cb972333", "scanner": "scanner-primary", "fingerprint": "2b628dc851e72747", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-597622b6a6af5fae", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/learning-style-report?${params} (components/LearningStyleDistribution.tsx:116)"}, "properties": {"repobilityId": "5d70d67e0b4e454e", "scanner": "scanner-primary", "fingerprint": "597622b6a6af5fae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-75e1101a45d0cae5", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skills (components/BLSPlatinumChecklist.tsx:67)"}, "properties": {"repobilityId": "c0faf97cc05b3132", "scanner": "scanner-primary", "fingerprint": "75e1101a45d0cae5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5b24fb9b06a88228", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-day-skills?labDayId=${labDayId} (components/BLSPlatinumChecklist.tsx:71)"}, "properties": {"repobilityId": "11d4164385b92831", "scanner": "scanner-primary", "fingerprint": "5b24fb9b06a88228", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fb9312d45fcd190d", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (components/QuickActionsMenu.tsx:72)"}, "properties": {"repobilityId": "7c68f14f9f666f60", "scanner": "scanner-primary", "fingerprint": "fb9312d45fcd190d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4bcf46a9535e38df", "level": "error", "message": {"text": "Dangling fetch: GET /api/notifications/email-preferences (components/EmailSettingsPanel.tsx:70)"}, "properties": {"repobilityId": "993b019f09bb2843", "scanner": "scanner-primary", "fingerprint": "4bcf46a9535e38df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3b36980b3b979be0", "level": "error", "message": {"text": "Dangling fetch: PUT /api/notifications/email-preferences (components/EmailSettingsPanel.tsx:101)"}, "properties": {"repobilityId": "c9fe88aa4fc47558", "scanner": "scanner-primary", "fingerprint": "3b36980b3b979be0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-60fa58762fc9b138", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (components/dashboard/CalendarConnectBanner.tsx:57)"}, "properties": {"repobilityId": "355a9fd475448e51", "scanner": "scanner-primary", "fingerprint": "60fa58762fc9b138", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f1e26f8759adf032", "level": "error", "message": {"text": "Dangling fetch: GET /api/user/preferences (components/dashboard/CalendarConnectBanner.tsx:58)"}, "properties": {"repobilityId": "df90fe282dd9ae0b", "scanner": "scanner-primary", "fingerprint": "f1e26f8759adf032", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-85d00767c9d1cf3e", "level": "error", "message": {"text": "Dangling fetch: GET /api/calendar/status (components/dashboard/CalendarConnectBanner.tsx:59)"}, "properties": {"repobilityId": "a8eb4b21a44ce587", "scanner": "scanner-primary", "fingerprint": "85d00767c9d1cf3e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e56114f9f55a079", "level": "error", "message": {"text": "Dangling fetch: PUT /api/user/preferences (components/dashboard/CalendarConnectBanner.tsx:99)"}, "properties": {"repobilityId": "ca5ce99160c5d06c", "scanner": "scanner-primary", "fingerprint": "6e56114f9f55a079", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-164ca78627c64ddc", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (components/dashboard/AnnouncementBanner.tsx:125)"}, "properties": {"repobilityId": "677e7fbb4b4e7f86", "scanner": "scanner-primary", "fingerprint": "164ca78627c64ddc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5f967a4532288556", "level": "error", "message": {"text": "Dangling fetch: GET /api/announcements?active=true (components/dashboard/AnnouncementBanner.tsx:126)"}, "properties": {"repobilityId": "83f262a531e6b28c", "scanner": "scanner-primary", "fingerprint": "5f967a4532288556", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-05f1a8e756f73fd1", "level": "error", "message": {"text": "Dangling fetch: POST /api/announcements/${id}/read (components/dashboard/AnnouncementBanner.tsx:145)"}, "properties": {"repobilityId": "b915fb665e436944", "scanner": "scanner-primary", "fingerprint": "05f1a8e756f73fd1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-95c2210bb3204702", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/attendance/at-risk (components/dashboard/widgets/AtRiskStudentsWidget.tsx:58)"}, "properties": {"repobilityId": "bfafd4f6ccfe0f19", "scanner": "scanner-primary", "fingerprint": "95c2210bb3204702", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bf1548bb5fb04fb5", "level": "error", "message": {"text": "Dangling fetch: GET /api/notifications?limit=5&unread=true (components/dashboard/widgets/NotificationsWidget.tsx:40)"}, "properties": {"repobilityId": "2fc55dc9e726840f", "scanner": "scanner-primary", "fingerprint": "bf1548bb5fb04fb5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c08afe83d7029ba2", "level": "error", "message": {"text": "Dangling fetch: GET /api/notifications?limit=3 (components/dashboard/widgets/NotificationsWidget.tsx:50)"}, "properties": {"repobilityId": "5e0dcecd9234edeb", "scanner": "scanner-primary", "fingerprint": "c08afe83d7029ba2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a5729b31819362f7", "level": "error", "message": {"text": "Dangling fetch: PUT /api/notifications/read (components/dashboard/widgets/NotificationsWidget.tsx:67)"}, "properties": {"repobilityId": "50dd7ad259a18f71", "scanner": "scanner-primary", "fingerprint": "a5729b31819362f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-608e70b1921f5ad6", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/program-snapshot (components/dashboard/widgets/ProgramSnapshotWidget.tsx:58)"}, "properties": {"repobilityId": "df600a73d8b5b496", "scanner": "scanner-primary", "fingerprint": "608e70b1921f5ad6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-74150c0779add48d", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/stations?open=true&upcoming=true (components/dashboard/widgets/NeedsAttentionWidget.tsx:27)"}, "properties": {"repobilityId": "9dd2a220b2a5d1b4", "scanner": "scanner-primary", "fingerprint": "74150c0779add48d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-55889b8df4f83f80", "level": "error", "message": {"text": "Dangling fetch: GET /api/feedback?status=new&limit=1 (components/dashboard/widgets/NeedsAttentionWidget.tsx:44)"}, "properties": {"repobilityId": "41458fa6048fb636", "scanner": "scanner-primary", "fingerprint": "55889b8df4f83f80", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-024302143a567d12", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/equipment/maintenance (components/dashboard/widgets/NeedsAttentionWidget.tsx:61)"}, "properties": {"repobilityId": "e004b1e5a6213baa", "scanner": "scanner-primary", "fingerprint": "024302143a567d12", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c7368b7cd87c851", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (components/dashboard/widgets/OverviewStatsWidget.tsx:87)"}, "properties": {"repobilityId": "044093b5ad677096", "scanner": "scanner-primary", "fingerprint": "4c7368b7cd87c851", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1a4658dae104772d", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/students?status=active (components/dashboard/widgets/OverviewStatsWidget.tsx:102)"}, "properties": {"repobilityId": "8b9a84037bf909e2", "scanner": "scanner-primary", "fingerprint": "1a4658dae104772d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6be1a57b4dc6d7b5", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days?startDate=${startOfWeek}&endDate=${endOfWeek} (components/dashboard/widgets/OverviewStatsWidget.tsx:103)"}, "properties": {"repobilityId": "832bfbcc37de3b09", "scanner": "scanner-primary", "fingerprint": "6be1a57b4dc6d7b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1ee5303e7e0c96f7", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days?startDate=${startOfMonth}&endDate=${endOfMonth} (components/dashboard/widgets/OverviewStatsWidget.tsx:104)"}, "properties": {"repobilityId": "6d9917475193e72a", "scanner": "scanner-primary", "fingerprint": "1ee5303e7e0c96f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3ee018e5cc1253d0", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/scenarios (components/dashboard/widgets/OverviewStatsWidget.tsx:106)"}, "properties": {"repobilityId": "4d1c89e9f8fc02c8", "scanner": "scanner-primary", "fingerprint": "3ee018e5cc1253d0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-438be6abd56f415b", "level": "error", "message": {"text": "Dangling fetch: GET /api/feedback?status=new&limit=1 (components/dashboard/widgets/OverviewStatsWidget.tsx:108)"}, "properties": {"repobilityId": "9c9368616bbb1b50", "scanner": "scanner-primary", "fingerprint": "438be6abd56f415b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e5237853e17add23", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/internship-count (components/dashboard/widgets/OverviewStatsWidget.tsx:110)"}, "properties": {"repobilityId": "9669bad090d42f09", "scanner": "scanner-primary", "fingerprint": "e5237853e17add23", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ef7e958099c26ead", "level": "error", "message": {"text": "Dangling fetch: GET /api/onboarding/dashboard (components/dashboard/widgets/OnboardingWidget.tsx:67)"}, "properties": {"repobilityId": "caf3e16b27f0466f", "scanner": "scanner-primary", "fingerprint": "ef7e958099c26ead", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-37bb80847c65f636", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/quick-stats (components/dashboard/widgets/QuickStatsWidget.tsx:36)"}, "properties": {"repobilityId": "302ea7433a8324e2", "scanner": "scanner-primary", "fingerprint": "37bb80847c65f636", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-860959cd4d4972e1", "level": "error", "message": {"text": "Dangling fetch: GET /api/tasks?filter=assigned_to_me&sortBy=due_date&sortOrder=asc&limit=10 (components/dashboard/widgets/MyTasksWidget.tsx:103)"}, "properties": {"repobilityId": "c78569b878876647", "scanner": "scanner-primary", "fingerprint": "860959cd4d4972e1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f6eacae115d5a3c7", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/tasks/${task.id} (components/dashboard/widgets/MyTasksWidget.tsx:132)"}, "properties": {"repobilityId": "2361d4170d29e441", "scanner": "scanner-primary", "fingerprint": "f6eacae115d5a3c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-94d6b85f30569980", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/stations?instructor=${session.user?.email}&upcoming=true&limit=5 (components/dashboard/widgets/MyLabsWidget.tsx:80)"}, "properties": {"repobilityId": "7bbf557ab001a910", "scanner": "scanner-primary", "fingerprint": "94d6b85f30569980", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c0e770875951f26", "level": "error", "message": {"text": "Dangling fetch: GET /api/tasks?filter=assigned_to_me&sortBy=due_date&sortOrder=asc&limit=10 (components/dashboard/widgets/OverdueTasksWidget.tsx:47)"}, "properties": {"repobilityId": "a9fc56497fd39540", "scanner": "scanner-primary", "fingerprint": "4c0e770875951f26", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7a7c9d80e2cce263", "level": "error", "message": {"text": "Dangling fetch: GET /api/feedback?limit=5 (components/dashboard/widgets/RecentFeedbackWidget.tsx:39)"}, "properties": {"repobilityId": "d8d3e33f7ecf4567", "scanner": "scanner-primary", "fingerprint": "7a7c9d80e2cce263", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-28d14e4958a81b9c", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/me/cohort-roster (components/dashboard/widgets/MyCohortWidget.tsx:40)"}, "properties": {"repobilityId": "4f780d29d05497e5", "scanner": "scanner-primary", "fingerprint": "28d14e4958a81b9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-806e4cea368480ad", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/stations?open=true&upcoming=true (components/dashboard/widgets/OpenStationsWidget.tsx:62)"}, "properties": {"repobilityId": "ae0de37f797d0120", "scanner": "scanner-primary", "fingerprint": "806e4cea368480ad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8330391664863aea", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/stations/${stationId} (components/dashboard/widgets/OpenStationsWidget.tsx:81)"}, "properties": {"repobilityId": "2d36bf2589622fc7", "scanner": "scanner-primary", "fingerprint": "8330391664863aea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-de8eddbedc6475d0", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/cert-expiry (components/dashboard/widgets/CertExpiryWidget.tsx:70)"}, "properties": {"repobilityId": "2116e9f234f71387", "scanner": "scanner-primary", "fingerprint": "de8eddbedc6475d0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c3ad16f9b2f0a1ec", "level": "error", "message": {"text": "Dangling fetch: GET /api/dashboard/recent-activity?${params} (components/dashboard/widgets/RecentActivityWidget.tsx:242)"}, "properties": {"repobilityId": "8b0252092af2c2ad", "scanner": "scanner-primary", "fingerprint": "c3ad16f9b2f0a1ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f4b5d9daa2d3825c", "level": "error", "message": {"text": "Dangling fetch: POST /api/lvfr-aemt/calendar/swap (components/lvfr/WeekStripView.tsx:100)"}, "properties": {"repobilityId": "97d09cbd408564e1", "scanner": "scanner-primary", "fingerprint": "f4b5d9daa2d3825c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-93388ae3a8ca3561", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lvfr-aemt/scheduling (components/lvfr/AssignmentModal.tsx:81)"}, "properties": {"repobilityId": "110eb0aa36100536", "scanner": "scanner-primary", "fingerprint": "93388ae3a8ca3561", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2ae766ed70052ad5", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts (components/reports/CohortFilter.tsx:26)"}, "properties": {"repobilityId": "7f765b68ac56cfa3", "scanner": "scanner-primary", "fingerprint": "2ae766ed70052ad5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76a92961c4a5302b", "level": "error", "message": {"text": "Dangling fetch: POST /api/students/${studentId}/graduate (components/students/GraduationModal.tsx:62)"}, "properties": {"repobilityId": "853c0c64971b3ccd", "scanner": "scanner-primary", "fingerprint": "76a92961c4a5302b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a40f5dc505557232", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?include_archived=true (components/students/TransferCohortModal.tsx:127)"}, "properties": {"repobilityId": "5d28cd2609899d84", "scanner": "scanner-primary", "fingerprint": "a40f5dc505557232", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c1d6f1a894dccae9", "level": "error", "message": {"text": "Dangling fetch: GET /api/students/${studentId}/transfer (components/students/CohortHistorySection.tsx:73)"}, "properties": {"repobilityId": "86733e376577a399", "scanner": "scanner-primary", "fingerprint": "c1d6f1a894dccae9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-50eb084f2a16763d", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/rooms (components/calendar/SlotFinderPanel.tsx:67)"}, "properties": {"repobilityId": "1de9b3b95cd800dc", "scanner": "scanner-primary", "fingerprint": "50eb084f2a16763d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-61d827ede79f304c", "level": "error", "message": {"text": "Dangling fetch: POST /api/calendar/find-slots (components/calendar/SlotFinderPanel.tsx:112)"}, "properties": {"repobilityId": "63cd3fd48da41b60", "scanner": "scanner-primary", "fingerprint": "61d827ede79f304c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8f39111cae3373c1", "level": "error", "message": {"text": "Dangling fetch: POST /api/calendar/find-conflicts (components/calendar/ConflictPanel.tsx:110)"}, "properties": {"repobilityId": "69191b8aa3fd77a7", "scanner": "scanner-primary", "fingerprint": "8f39111cae3373c1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9349c936cf7e4295", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (components/calendar/EventDetailPanel.tsx:185)"}, "properties": {"repobilityId": "f21db566f762e55f", "scanner": "scanner-primary", "fingerprint": "9349c936cf7e4295", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-33e06f5cbca68a55", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skill-drills/${drillId} (components/lab-day/SkillDrillReference.tsx:91)"}, "properties": {"repobilityId": "457344a8943a878e", "scanner": "scanner-primary", "fingerprint": "33e06f5cbca68a55", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d8d36579fb4ce226", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/roster?format=csv (components/lab-day/labDayExport.ts:84)"}, "properties": {"repobilityId": "06edd45dd7e5b4d2", "scanner": "scanner-primary", "fingerprint": "d8d36579fb4ce226", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6971e9fbadd37adf", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/station-skills?stationId=${station.id} (components/lab-day/EditStationModal.tsx:145)"}, "properties": {"repobilityId": "b8a89cc246f520b3", "scanner": "scanner-primary", "fingerprint": "6971e9fbadd37adf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f2b6fefd071c486a", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/custom-skills?stationId=${station.id} (components/lab-day/EditStationModal.tsx:151)"}, "properties": {"repobilityId": "e4c754e0be5af30f", "scanner": "scanner-primary", "fingerprint": "f2b6fefd071c486a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ce0bc3037760907b", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skill-drills (components/lab-day/EditStationModal.tsx:185)"}, "properties": {"repobilityId": "bacada5f77dbede1", "scanner": "scanner-primary", "fingerprint": "ce0bc3037760907b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-121f02b3ee8ca405", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/station-instructors?stationId=${station.id} (components/lab-day/EditStationModal.tsx:197)"}, "properties": {"repobilityId": "ba354a241c5c8978", "scanner": "scanner-primary", "fingerprint": "121f02b3ee8ca405", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-65abb2012a80fc5d", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/scenarios (components/lab-day/EditStationModal.tsx:249)"}, "properties": {"repobilityId": "c3e5b6b7227344ee", "scanner": "scanner-primary", "fingerprint": "65abb2012a80fc5d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c2d1d5032a5bb34f", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skills?includeDocuments=true (components/lab-day/EditStationModal.tsx:250)"}, "properties": {"repobilityId": "637ca8593f7438ea", "scanner": "scanner-primary", "fingerprint": "c2d1d5032a5bb34f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8deb3c1c694dde54", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/stations/${station.id}/documents (components/lab-day/EditStationModal.tsx:267)"}, "properties": {"repobilityId": "2aee2fe67334eae7", "scanner": "scanner-primary", "fingerprint": "8deb3c1c694dde54", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-53c51c337cce8bfc", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/stations/${station.id}/documents (components/lab-day/EditStationModal.tsx:299)"}, "properties": {"repobilityId": "fb7c949d4dd1ced6", "scanner": "scanner-primary", "fingerprint": "53c51c337cce8bfc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7ce06d322060b95d", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/stations/${station.id}/documents (components/lab-day/EditStationModal.tsx:304)"}, "properties": {"repobilityId": "bd8b9bcb7054deeb", "scanner": "scanner-primary", "fingerprint": "7ce06d322060b95d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-48ec57fea84761a8", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/stations/${station.id}/documents?documentId=${docId} (components/lab-day/EditStationModal.tsx:337)"}, "properties": {"repobilityId": "7bd157c0bc59dd56", "scanner": "scanner-primary", "fingerprint": "48ec57fea84761a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-367cf8ace5a65817", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/lab-management/stations/${station.id} (components/lab-day/EditStationModal.tsx:462)"}, "properties": {"repobilityId": "7dd59cf5f67f1ef1", "scanner": "scanner-primary", "fingerprint": "367cf8ace5a65817", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a92e1b9fdbda35bb", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/station-skills?stationId=${station.id} (components/lab-day/EditStationModal.tsx:492)"}, "properties": {"repobilityId": "4e2917e0c6d7f7d7", "scanner": "scanner-primary", "fingerprint": "a92e1b9fdbda35bb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-76c75f0ad492fcec", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/station-skills (components/lab-day/EditStationModal.tsx:494)"}, "properties": {"repobilityId": "bea59e5f7ebaf34b", "scanner": "scanner-primary", "fingerprint": "76c75f0ad492fcec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7a24b947ad5ef672", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/custom-skills?stationId=${station.id} (components/lab-day/EditStationModal.tsx:501)"}, "properties": {"repobilityId": "39d05b016cd24366", "scanner": "scanner-primary", "fingerprint": "7a24b947ad5ef672", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8c0a519c60549f7a", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/custom-skills?id=${customSkill.id} (components/lab-day/EditStationModal.tsx:505)"}, "properties": {"repobilityId": "5105d1a7a350e59a", "scanner": "scanner-primary", "fingerprint": "8c0a519c60549f7a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b40e4d79b48af5a2", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/custom-skills (components/lab-day/EditStationModal.tsx:511)"}, "properties": {"repobilityId": "050f8889b3d2fb5d", "scanner": "scanner-primary", "fingerprint": "b40e4d79b48af5a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6456f3d62d0349b0", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/station-instructors?stationId=${station.id} (components/lab-day/EditStationModal.tsx:521)"}, "properties": {"repobilityId": "3bef402395957388", "scanner": "scanner-primary", "fingerprint": "6456f3d62d0349b0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-40462a156c7a294c", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/station-instructors?stationId=${station.id}&userEmail=${encodeURIComponent(email)} (components/lab-day/EditStationModal.tsx:527)"}, "properties": {"repobilityId": "6e4d45a432fc2cee", "scanner": "scanner-primary", "fingerprint": "40462a156c7a294c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-95d6312d8f60d1b0", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/station-instructors (components/lab-day/EditStationModal.tsx:532)"}, "properties": {"repobilityId": "27421936262984e9", "scanner": "scanner-primary", "fingerprint": "95d6312d8f60d1b0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b16e100e287848a9", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/stations/${station.id} (components/lab-day/EditStationModal.tsx:551)"}, "properties": {"repobilityId": "b53137d9fcf102fb", "scanner": "scanner-primary", "fingerprint": "b16e100e287848a9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bf5456fd9d28306c", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (components/lab-day/LabDayCoverageSection.tsx:47)"}, "properties": {"repobilityId": "316575cb1f6d57ae", "scanner": "scanner-primary", "fingerprint": "bf5456fd9d28306c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cb34210132bca16f", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/shifts?start_date=${labDate}&end_date=${labDate}&include_filled=true (components/lab-day/LabDayCoverageSection.tsx:51)"}, "properties": {"repobilityId": "37253bd3b1f734f7", "scanner": "scanner-primary", "fingerprint": "cb34210132bca16f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8b1bd48ad589959b", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/shifts/${shiftId}/signup/${signupId} (components/lab-day/LabDayCoverageSection.tsx:66)"}, "properties": {"repobilityId": "9ba263d6d8c40deb", "scanner": "scanner-primary", "fingerprint": "8b1bd48ad589959b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c71ec37c66eb419a", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/shifts/${shiftId}/signup/${signupId} (components/lab-day/LabDayCoverageSection.tsx:86)"}, "properties": {"repobilityId": "3de69829520d0ab2", "scanner": "scanner-primary", "fingerprint": "c71ec37c66eb419a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-96f01c52a0029f13", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/skill-signoffs?lab_day_id=${labDayId} (components/lab-day/LabDaySkillSignoffs.tsx:57)"}, "properties": {"repobilityId": "29aab15d44566c7d", "scanner": "scanner-primary", "fingerprint": "96f01c52a0029f13", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-988b0dfc1eeace4c", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/skill-signoffs (components/lab-day/LabDaySkillSignoffs.tsx:90)"}, "properties": {"repobilityId": "4304747f2440ff55", "scanner": "scanner-primary", "fingerprint": "988b0dfc1eeace4c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3844049f9a0e71fb", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/skill-signoffs (components/lab-day/LabDaySkillSignoffs.tsx:131)"}, "properties": {"repobilityId": "e8af8ef2979026a0", "scanner": "scanner-primary", "fingerprint": "3844049f9a0e71fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7baf06fb567b3c16", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/skill-signoffs (components/lab-day/LabDaySkillSignoffs.tsx:168)"}, "properties": {"repobilityId": "72b5896ae45674ed", "scanner": "scanner-primary", "fingerprint": "7baf06fb567b3c16", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f887294568c92a8e", "level": "error", "message": {"text": "Dangling fetch: GET /api/instructor/me (components/lab-day/DebriefNotesSection.tsx:83)"}, "properties": {"repobilityId": "31fc3769913f8f6f", "scanner": "scanner-primary", "fingerprint": "f887294568c92a8e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-94e76ae48bb22f9a", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/debrief-notes (components/lab-day/DebriefNotesSection.tsx:97)"}, "properties": {"repobilityId": "1a1d91fd20aa09f0", "scanner": "scanner-primary", "fingerprint": "94e76ae48bb22f9a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d69df7453643dc06", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/debrief-notes (components/lab-day/DebriefNotesSection.tsx:122)"}, "properties": {"repobilityId": "2c312489dff79204", "scanner": "scanner-primary", "fingerprint": "d69df7453643dc06", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2520e94f980e7e1f", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/lab-days/${labDayId}/debrief-notes/${noteId} (components/lab-day/DebriefNotesSection.tsx:145)"}, "properties": {"repobilityId": "f2b3841da2c32d55", "scanner": "scanner-primary", "fingerprint": "2520e94f980e7e1f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-98495e8d7129f6b8", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/lab-days/${labDayId}/debrief-notes/${noteId} (components/lab-day/DebriefNotesSection.tsx:165)"}, "properties": {"repobilityId": "00610a9407ff9e00", "scanner": "scanner-primary", "fingerprint": "98495e8d7129f6b8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-31b03954e0911095", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/checklist (components/lab-day/ChecklistSection.tsx:33)"}, "properties": {"repobilityId": "928a3d4cd7a2aa9f", "scanner": "scanner-primary", "fingerprint": "31b03954e0911095", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-722b47b3eede3a0f", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/checklist (components/lab-day/ChecklistSection.tsx:40)"}, "properties": {"repobilityId": "767899ffe1b4ff98", "scanner": "scanner-primary", "fingerprint": "722b47b3eede3a0f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d2df8fab9123af37", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/checklist (components/lab-day/ChecklistSection.tsx:47)"}, "properties": {"repobilityId": "badf0ebc2796e0a6", "scanner": "scanner-primary", "fingerprint": "d2df8fab9123af37", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3d40a773fa3802fb", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/lab-days/${labDayId}/checklist (components/lab-day/ChecklistSection.tsx:55)"}, "properties": {"repobilityId": "708a7a47afbcde6f", "scanner": "scanner-primary", "fingerprint": "3d40a773fa3802fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-44a0f638fcd23fd9", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/lab-days/${labDayId}/checklist?itemId=${itemId} (components/lab-day/ChecklistSection.tsx:61)"}, "properties": {"repobilityId": "636a25a720440b89", "scanner": "scanner-primary", "fingerprint": "44a0f638fcd23fd9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6d8ce194402173a1", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/debrief (components/lab-day/DebriefSection.tsx:40)"}, "properties": {"repobilityId": "6dbf6fe45bffa61c", "scanner": "scanner-primary", "fingerprint": "6d8ce194402173a1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1a330bc74ca4a163", "level": "error", "message": {"text": "Dangling fetch: GET /api/skill-sheets/evaluations-by-lab-day?lab_day_id=${labDayId} (components/lab-day/DebriefSection.tsx:46)"}, "properties": {"repobilityId": "c8142bf6adb5101a", "scanner": "scanner-primary", "fingerprint": "1a330bc74ca4a163", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2f2d92e8d5a511ab", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId}/skill-coverage${tail} (components/lab-day/SkillCoveragePanel.tsx:142)"}, "properties": {"repobilityId": "0e7bb8e14d98bcd5", "scanner": "scanner-primary", "fingerprint": "2f2d92e8d5a511ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-44368c8d87ee85f1", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts/${cohortId}/smc-completion${tail} (components/lab-day/SkillCoveragePanel.tsx:143)"}, "properties": {"repobilityId": "e370fe5f510cccf5", "scanner": "scanner-primary", "fingerprint": "44368c8d87ee85f1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-82030b6dabaa706d", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/ratings (components/lab-day/StudentRatingsSection.tsx:41)"}, "properties": {"repobilityId": "1f36895adc622da1", "scanner": "scanner-primary", "fingerprint": "82030b6dabaa706d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-250be7e8ad73c3d3", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/ratings (components/lab-day/StudentRatingsSection.tsx:52)"}, "properties": {"repobilityId": "bab511a43209202f", "scanner": "scanner-primary", "fingerprint": "250be7e8ad73c3d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a488f37991fbcca7", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/ratings (components/lab-day/StudentRatingsSection.tsx:62)"}, "properties": {"repobilityId": "e8da7923eddf2c26", "scanner": "scanner-primary", "fingerprint": "a488f37991fbcca7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa40cf6353d882f9", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-day-roles (components/lab-day/LabDayRolesSection.tsx:46)"}, "properties": {"repobilityId": "925edb3192d51106", "scanner": "scanner-primary", "fingerprint": "fa40cf6353d882f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a969281d9afd1244", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/lab-day-roles?id=${roleId} (components/lab-day/LabDayRolesSection.tsx:74)"}, "properties": {"repobilityId": "db88425c27677a04", "scanner": "scanner-primary", "fingerprint": "a969281d9afd1244", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ca5d5e28dc2ffc11", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/equipment (components/lab-day/EquipmentSection.tsx:35)"}, "properties": {"repobilityId": "e8d4a02ab5c6ec66", "scanner": "scanner-primary", "fingerprint": "ca5d5e28dc2ffc11", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ec8f5bf4b8893782", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/equipment (components/lab-day/EquipmentSection.tsx:42)"}, "properties": {"repobilityId": "ac68f53b2b3b4a97", "scanner": "scanner-primary", "fingerprint": "ec8f5bf4b8893782", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e8085fba7117cfc9", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/lab-days/${labDayId}/equipment (components/lab-day/EquipmentSection.tsx:49)"}, "properties": {"repobilityId": "180ea3fe911e157f", "scanner": "scanner-primary", "fingerprint": "e8085fba7117cfc9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7eb3866787eb0bfd", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/lab-days/${labDayId}/equipment?itemId=${itemId} (components/lab-day/EquipmentSection.tsx:55)"}, "properties": {"repobilityId": "e64332ccc8b131bb", "scanner": "scanner-primary", "fingerprint": "7eb3866787eb0bfd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dec61fee2f203151", "level": "error", "message": {"text": "Dangling fetch: GET /api/volunteer/lab-tokens?lab_day_id=${labDayId} (components/lab-day/LabDayVolunteers.tsx:108)"}, "properties": {"repobilityId": "4577845a5a8df472", "scanner": "scanner-primary", "fingerprint": "dec61fee2f203151", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a036464206857a3e", "level": "error", "message": {"text": "Dangling fetch: POST /api/volunteer/lab-tokens (components/lab-day/LabDayVolunteers.tsx:129)"}, "properties": {"repobilityId": "d6c1c7c3eaf58f92", "scanner": "scanner-primary", "fingerprint": "a036464206857a3e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1354f74523ee92f9", "level": "error", "message": {"text": "Dangling fetch: GET /api/nremt-scenarios?skill_code=${skillCode} (components/lab-day/ScenarioPickerModal.tsx:71)"}, "properties": {"repobilityId": "9a0742296b4f34c9", "scanner": "scanner-primary", "fingerprint": "1354f74523ee92f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7f8a94d0eb3295a2", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/stations/${station.id}/scenario (components/lab-day/ScenarioPickerModal.tsx:122)"}, "properties": {"repobilityId": "c45edef84bb03744", "scanner": "scanner-primary", "fingerprint": "7f8a94d0eb3295a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-eb41735d2e078bc2", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/costs?lab_day_id=${labDayId} (components/lab-day/CostsSection.tsx:39)"}, "properties": {"repobilityId": "21b517dccbdd601c", "scanner": "scanner-primary", "fingerprint": "eb41735d2e078bc2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-630e4c4e13f4aed5", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/costs (components/lab-day/CostsSection.tsx:46)"}, "properties": {"repobilityId": "d3b6ea3815a57f26", "scanner": "scanner-primary", "fingerprint": "630e4c4e13f4aed5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c6cd8725f09a709e", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/costs/${itemId} (components/lab-day/CostsSection.tsx:54)"}, "properties": {"repobilityId": "59e5056bfa3c8933", "scanner": "scanner-primary", "fingerprint": "c6cd8725f09a709e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d115fb9d79d830b1", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/costs/${itemId} (components/lab-day/CostsSection.tsx:60)"}, "properties": {"repobilityId": "14497eb7a9ce358d", "scanner": "scanner-primary", "fingerprint": "d115fb9d79d830b1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-af309c45b3d3be0d", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/checklist (components/lab-day/LabDayPrintView.tsx:52)"}, "properties": {"repobilityId": "1cea02cb7de98ad1", "scanner": "scanner-primary", "fingerprint": "af309c45b3d3be0d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-236ca7aefaf4989a", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId} (components/lab-day/LabDayPrintView.tsx:58)"}, "properties": {"repobilityId": "66583eeb5f021ec0", "scanner": "scanner-primary", "fingerprint": "236ca7aefaf4989a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c268a89706bc10aa", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/shifts?start_date=${labDate}&end_date=${labDate}&include_filled=true (components/lab-day/LabDayPrintView.tsx:62)"}, "properties": {"repobilityId": "379fb2d09b508827", "scanner": "scanner-primary", "fingerprint": "c268a89706bc10aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-86abe608e9dfda2c", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/duplicate (components/lab-day/DuplicateModals.tsx:78)"}, "properties": {"repobilityId": "fba99c09c8df7e36", "scanner": "scanner-primary", "fingerprint": "86abe608e9dfda2c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-81c1b1160448004b", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/duplicate (components/lab-day/DuplicateModals.tsx:102)"}, "properties": {"repobilityId": "3ca12acdf86644e6", "scanner": "scanner-primary", "fingerprint": "81c1b1160448004b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b80aadef1d71f2f9", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/duplicate-bulk (components/lab-day/DuplicateModals.tsx:204)"}, "properties": {"repobilityId": "e3f01b9c822cbed7", "scanner": "scanner-primary", "fingerprint": "b80aadef1d71f2f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4bbdd323a4e9e068", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/lab-days/${labDayId}/messages?limit=50 (components/lab-day/LabDayChatInner.tsx:170)"}, "properties": {"repobilityId": "44e88321b9379a1b", "scanner": "scanner-primary", "fingerprint": "4bbdd323a4e9e068", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b5a6beafdb70b5d", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/messages (components/lab-day/LabDayChatInner.tsx:424)"}, "properties": {"repobilityId": "3d6e57d92023377e", "scanner": "scanner-primary", "fingerprint": "9b5a6beafdb70b5d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9423e0465d82cdf5", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/assistance-alerts (components/lab-day/LabDayChatInner.tsx:446)"}, "properties": {"repobilityId": "10dfe676b46ec26e", "scanner": "scanner-primary", "fingerprint": "9423e0465d82cdf5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6d882fa7cbde98f9", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/lab-days/${labDayId}/checkin-token (components/lab-day/LabDayCheckInSection.tsx:27)"}, "properties": {"repobilityId": "7542727a93cb564d", "scanner": "scanner-primary", "fingerprint": "6d882fa7cbde98f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8d56945fdf965e42", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/lab-days/${labDayId}/checkin-token (components/lab-day/LabDayCheckInSection.tsx:34)"}, "properties": {"repobilityId": "4f91892224251829", "scanner": "scanner-primary", "fingerprint": "8d56945fdf965e42", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e756cb926b8ec351", "level": "error", "message": {"text": "Dangling fetch: POST /api/tracking/scenarios (components/lab-day/ScenarioRoleModal.tsx:59)"}, "properties": {"repobilityId": "3015c86e4c5e3e51", "scanner": "scanner-primary", "fingerprint": "e756cb926b8ec351", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-09c7eb2c3bd80514", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/student-queue?lab_day_id=${labDayId} (components/lab-day/IndividualTestingGrid.tsx:106)"}, "properties": {"repobilityId": "4b28a13e34d04324", "scanner": "scanner-primary", "fingerprint": "09c7eb2c3bd80514", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1a701059dc7524c4", "level": "error", "message": {"text": "Dangling fetch: PUT /api/lab-management/student-queue (components/lab-day/IndividualTestingGrid.tsx:163)"}, "properties": {"repobilityId": "089f468c14471fbc", "scanner": "scanner-primary", "fingerprint": "1a701059dc7524c4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-53739b7b3a8909cf", "level": "error", "message": {"text": "Dangling fetch: POST /api/lab-management/student-queue (components/lab-day/IndividualTestingGrid.tsx:193)"}, "properties": {"repobilityId": "fe14550755389f57", "scanner": "scanner-primary", "fingerprint": "53739b7b3a8909cf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-187b190588c86d37", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/skill-sheets/${skillSheetId}/evaluations?evaluation_id=${cell.evaluationId} (components/lab-day/IndividualTestingGrid.tsx:236)"}, "properties": {"repobilityId": "543ba56ccd2152fe", "scanner": "scanner-primary", "fingerprint": "187b190588c86d37", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9458ff2bdcc195f3", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/lab-management/student-queue (components/lab-day/IndividualTestingGrid.tsx:244)"}, "properties": {"repobilityId": "3a6b5380c4781dd4", "scanner": "scanner-primary", "fingerprint": "9458ff2bdcc195f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-09805e504460a266", "level": "error", "message": {"text": "Dangling fetch: GET /api/system-settings/feature.lab_day_chat (components/lab-day/LabDayChat.tsx:48)"}, "properties": {"repobilityId": "64bba8d1a17d45ba", "scanner": "scanner-primary", "fingerprint": "09805e504460a266", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9897db52e61d385e", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/instructors?activeOnly=true (components/scheduling/LogMyShiftModal.tsx:87)"}, "properties": {"repobilityId": "fec94e64ea7b4732", "scanner": "scanner-primary", "fingerprint": "9897db52e61d385e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f861d7a2ec32e50d", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/log-shift (components/scheduling/LogMyShiftModal.tsx:123)"}, "properties": {"repobilityId": "c3357805be778c5c", "scanner": "scanner-primary", "fingerprint": "f861d7a2ec32e50d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-502ec3b5c41c7c9f", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/coverage-requests (components/scheduling/RequestCoverageModal.tsx:131)"}, "properties": {"repobilityId": "d3342dafd8b1ccc3", "scanner": "scanner-primary", "fingerprint": "502ec3b5c41c7c9f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4e2b649f96c3818f", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/coordinator-calendar?start_date=${startDate}&end_date=${endDate}${personalQ} (components/scheduling/CoordinatorCalendarView.tsx:200)"}, "properties": {"repobilityId": "c0c60bb4ea49dd6f", "scanner": "scanner-primary", "fingerprint": "4e2b649f96c3818f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e6d7243782372f4", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/planner/semesters?active_only=true (components/scheduling/CoordinatorCalendarView.tsx:235)"}, "properties": {"repobilityId": "a5ae0b2ad240d2ec", "scanner": "scanner-primary", "fingerprint": "6e6d7243782372f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-07ee9ba370880ec7", "level": "error", "message": {"text": "Dangling fetch: GET /api/scheduling/coordinator-calendar?start_date=${start}&end_date=${end}${personalQ} (components/scheduling/CoordinatorCalendarView.tsx:271)"}, "properties": {"repobilityId": "20fc9f7421bfab8b", "scanner": "scanner-primary", "fingerprint": "07ee9ba370880ec7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6f37cab976e58a9c", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/recurring-availability (components/scheduling/RecurringAvailabilityModal.tsx:94)"}, "properties": {"repobilityId": "ff7438bf36d40dbb", "scanner": "scanner-primary", "fingerprint": "6f37cab976e58a9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2402819c2976e626", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?activeOnly=true (components/scheduling/GenerateLabShiftsModal.tsx:93)"}, "properties": {"repobilityId": "d07b480cb620a10e", "scanner": "scanner-primary", "fingerprint": "2402819c2976e626", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5464d7156d061e5c", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/shifts/generate-from-labs (components/scheduling/GenerateLabShiftsModal.tsx:109)"}, "properties": {"repobilityId": "33494ec3f0babcca", "scanner": "scanner-primary", "fingerprint": "5464d7156d061e5c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2094c9c020b87d1a", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/shifts/generate-from-labs (components/scheduling/GenerateLabShiftsModal.tsx:136)"}, "properties": {"repobilityId": "e5bb803b687157c8", "scanner": "scanner-primary", "fingerprint": "2094c9c020b87d1a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2d3b235359b979d4", "level": "error", "message": {"text": "Dangling fetch: GET /api/lab-management/cohorts?include_archived=false (components/scheduling/LogHoursModal.tsx:114)"}, "properties": {"repobilityId": "1c2c2bd6f03a208e", "scanner": "scanner-primary", "fingerprint": "2d3b235359b979d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1caf08114a610fbf", "level": "error", "message": {"text": "Dangling fetch: POST /api/scheduling/manual-hours (components/scheduling/LogHoursModal.tsx:236)"}, "properties": {"repobilityId": "9440c2e94c0bc7bc", "scanner": "scanner-primary", "fingerprint": "1caf08114a610fbf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8b323ab1deacaa66", "level": "error", "message": {"text": "Dangling fetch: PUT /api/cases/${existingCase.id} (components/cases/CaseEditor.tsx:375)"}, "properties": {"repobilityId": "535c136e1a76c585", "scanner": "scanner-primary", "fingerprint": "8b323ab1deacaa66", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6aed378e5b7aef06", "level": "error", "message": {"text": "Dangling fetch: POST /api/cases (components/cases/CaseEditor.tsx:381)"}, "properties": {"repobilityId": "4166d078a969700b", "scanner": "scanner-primary", "fingerprint": "6aed378e5b7aef06", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5935d033bf397bf6", "level": "error", "message": {"text": "Dangling fetch: GET /api/cases/leaderboard/${cohortId}?${params.toString()} (components/cases/Leaderboard.tsx:57)"}, "properties": {"repobilityId": "715dd899aff95320", "scanner": "scanner-primary", "fingerprint": "5935d033bf397bf6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d29d5557e29012ff", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/summative-evaluations?studentId=${studentId} (components/clinical/SummativeEvaluationsSection.tsx:106)"}, "properties": {"repobilityId": "aba0800c3f28e225", "scanner": "scanner-primary", "fingerprint": "d29d5557e29012ff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-64e14d84d8bf6b3b", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/summative-scenarios (components/clinical/SummativeEvaluationsSection.tsx:113)"}, "properties": {"repobilityId": "d2d1fec3a6274484", "scanner": "scanner-primary", "fingerprint": "64e14d84d8bf6b3b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-13c6bfc733a6dcee", "level": "error", "message": {"text": "Dangling fetch: GET /api/students?cohortId=${cohortId} (components/clinical/SummativeEvaluationsSection.tsx:121)"}, "properties": {"repobilityId": "4880d3e9a5c7df1d", "scanner": "scanner-primary", "fingerprint": "13c6bfc733a6dcee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d6d6dc807f4bf3e3", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/summative-evaluations (components/clinical/SummativeEvaluationsSection.tsx:155)"}, "properties": {"repobilityId": "a68b95cd8d939a94", "scanner": "scanner-primary", "fingerprint": "d6d6dc807f4bf3e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9edafe45ee22ec40", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId}/preceptors (components/clinical/PreceptorsSection.tsx:151)"}, "properties": {"repobilityId": "1f1e060bdc9705de", "scanner": "scanner-primary", "fingerprint": "9edafe45ee22ec40", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-70efc5c90eb0fddd", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/preceptors?activeOnly=true (components/clinical/PreceptorsSection.tsx:165)"}, "properties": {"repobilityId": "294d5cc9692fa1a6", "scanner": "scanner-primary", "fingerprint": "70efc5c90eb0fddd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2673eae3e1978b24", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/internships/${internshipId}/preceptors (components/clinical/PreceptorsSection.tsx:189)"}, "properties": {"repobilityId": "0a61dd73b6ee0527", "scanner": "scanner-primary", "fingerprint": "2673eae3e1978b24", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d4aea70f56147bee", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/clinical/internships/${internshipId}/preceptors/${assignmentId} (components/clinical/PreceptorsSection.tsx:231)"}, "properties": {"repobilityId": "9279dd03700d8b12", "scanner": "scanner-primary", "fingerprint": "d4aea70f56147bee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dea001cc56d96e2c", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId}/closeout/employment (components/clinical/EmploymentVerificationModal.tsx:178)"}, "properties": {"repobilityId": "dd9960ffaeb84b2c", "scanner": "scanner-primary", "fingerprint": "dea001cc56d96e2c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a645d962d35bfb84", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/preceptor-eval/tokens?internship_id=${internshipId} (components/clinical/PreceptorEvalModal.tsx:46)"}, "properties": {"repobilityId": "380afb83f2a26e01", "scanner": "scanner-primary", "fingerprint": "a645d962d35bfb84", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3ee802b83ba66a89", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/preceptor-eval/send (components/clinical/PreceptorEvalModal.tsx:68)"}, "properties": {"repobilityId": "bbf1a5db8723b4f2", "scanner": "scanner-primary", "fingerprint": "3ee802b83ba66a89", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-23f7aa5c8ebad44d", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId}/closeout (components/clinical/CloseoutSection.tsx:161)"}, "properties": {"repobilityId": "01279374d3550613", "scanner": "scanner-primary", "fingerprint": "23f7aa5c8ebad44d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d7b89dcbacac2a9", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId}/closeout/employment (components/clinical/CloseoutSection.tsx:178)"}, "properties": {"repobilityId": "f21d424f22123903", "scanner": "scanner-primary", "fingerprint": "0d7b89dcbacac2a9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a575de65e3a50885", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId}/closeout/checklist (components/clinical/CloseoutSection.tsx:191)"}, "properties": {"repobilityId": "5103d6f4d67c02a2", "scanner": "scanner-primary", "fingerprint": "a575de65e3a50885", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-73f49f1499c9d63e", "level": "error", "message": {"text": "Dangling fetch: PUT /api/clinical/internships/${internshipId}/closeout/checklist (components/clinical/CloseoutSection.tsx:215)"}, "properties": {"repobilityId": "c04f05b985dc1c7f", "scanner": "scanner-primary", "fingerprint": "73f49f1499c9d63e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0b033983bfc9f110", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/clinical/internships/${internshipId}/closeout (components/clinical/CloseoutSection.tsx:276)"}, "properties": {"repobilityId": "ce2a962c73b14558", "scanner": "scanner-primary", "fingerprint": "0b033983bfc9f110", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c966e9ef965bc2f0", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/internships/${internshipId}/closeout/documents (components/clinical/CloseoutSection.tsx:317)"}, "properties": {"repobilityId": "b628856978ade2a1", "scanner": "scanner-primary", "fingerprint": "c966e9ef965bc2f0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e0f35a049c28f40", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/clinical/internships/${internshipId}/closeout/documents?docId=${docId} (components/clinical/CloseoutSection.tsx:351)"}, "properties": {"repobilityId": "a7a11f882bf26fc9", "scanner": "scanner-primary", "fingerprint": "6e0f35a049c28f40", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3b4b1046c716d10f", "level": "error", "message": {"text": "Dangling fetch: POST /api/clinical/internships/${internshipId}/closeout (components/clinical/CloseoutSection.tsx:373)"}, "properties": {"repobilityId": "703f7ca7ef50adcf", "scanner": "scanner-primary", "fingerprint": "3b4b1046c716d10f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-92f57ad5d4644432", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId}/closeout/summary (components/clinical/CloseoutSection.tsx:720)"}, "properties": {"repobilityId": "d6092ad4c916645d", "scanner": "scanner-primary", "fingerprint": "92f57ad5d4644432", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ca096fbc0bb2d1a8", "level": "error", "message": {"text": "Dangling fetch: GET /api/clinical/internships/${internshipId}/closeout/packet (components/clinical/CloseoutSection.tsx:1324)"}, "properties": {"repobilityId": "432606833c8a5db3", "scanner": "scanner-primary", "fingerprint": "ca096fbc0bb2d1a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f844c97ddc94b679", "level": "error", "message": {"text": "Dangling fetch: GET /api/submissions?pollId=${pollData.id} (components/scheduler/SchedulerAdmin.tsx:84)"}, "properties": {"repobilityId": "3558a3cd38ae1ce9", "scanner": "scanner-primary", "fingerprint": "f844c97ddc94b679", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-96056abd00c5a441", "level": "error", "message": {"text": "Dangling fetch: GET /api/calendar/status (components/scheduler/SchedulerAdmin.tsx:177)"}, "properties": {"repobilityId": "d86ad8f99750295b", "scanner": "scanner-primary", "fingerprint": "96056abd00c5a441", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7e8abb8dc86d894f", "level": "error", "message": {"text": "Dangling fetch: POST /api/calendar/create-event (components/scheduler/SchedulerAdmin.tsx:226)"}, "properties": {"repobilityId": "001e8ecd607dfc95", "scanner": "scanner-primary", "fingerprint": "7e8abb8dc86d894f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0e25915f5b8f5d8a", "level": "error", "message": {"text": "Dangling fetch: POST /api/notifications/send-email (components/scheduler/SchedulerAdmin.tsx:304)"}, "properties": {"repobilityId": "45f62428c8019287", "scanner": "scanner-primary", "fingerprint": "0e25915f5b8f5d8a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d10a2d4375fb17e4", "level": "error", "message": {"text": "Dangling fetch: POST /api/submissions (components/scheduler/SchedulerParticipant.tsx:111)"}, "properties": {"repobilityId": "8c6e631d14c77685", "scanner": "scanner-primary", "fingerprint": "d10a2d4375fb17e4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d6a66ddeb25e1578", "level": "error", "message": {"text": "Dangling fetch: POST /api/errors/log (components/ui/ErrorBoundary.tsx:48)"}, "properties": {"repobilityId": "11e129b59e2e2cf9", "scanner": "scanner-primary", "fingerprint": "d6a66ddeb25e1578", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7aee0759eee7fb16", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (lib/calendar-availability.ts:17)"}, "properties": {"repobilityId": "24e95eaae0dd4008", "scanner": "scanner-primary", "fingerprint": "7aee0759eee7fb16", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c85fc1e3107ecc24", "level": "error", "message": {"text": "Dangling fetch: POST https://www.googleapis.com/calendar/v3/freeBusy (lib/calendar-availability.ts:65)"}, "properties": {"repobilityId": "cae9309dd159f091", "scanner": "scanner-primary", "fingerprint": "c85fc1e3107ecc24", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0ae38010c60493f1", "level": "note", "message": {"text": "Unused endpoint: POST /webhook"}, "properties": {"repobilityId": "8eea4bd1f92ab72c", "scanner": "scanner-primary", "fingerprint": "0ae38010c60493f1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}