{"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-2cdb6db5bd3923d9", "name": "TODO/FIXME marker in shipping code \u2014 apps/api/src/__tests__/storage.test.ts:46", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/api/src/__tests__/storage.test.ts:46"}, "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-79293167949a3ba2", "name": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/cleanup-guests.ts:5", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/cleanup-guests.ts:5"}, "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-1756b7f0c8fbb172", "name": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/seed-user.ts:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/seed-user.ts: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-de7994b4ed2bcb96", "name": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/create-test-db.ts:9", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/create-test-db.ts:9"}, "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-e7629f165c8febfe", "name": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/seed.ts:589", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/seed.ts:589"}, "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-2d5a0ee12868c80b", "name": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/setup-test-db.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/setup-test-db.ts:17"}, "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-a01b48658dbdd42b", "name": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/migrate.ts:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/migrate.ts:17"}, "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-2bc73f82ed8ba16d", "name": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/seed-faqs.ts:923", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/seed-faqs.ts:923"}, "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-e2b1eb6acfbbf364", "name": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/ensure-faqs-table.ts:26", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/ensure-faqs-table.ts:26"}, "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-49822839fb8aec97", "name": "Stray `console.log` in TS/JS \u2014 apps/web/scripts/copy-scalar-assets.ts:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/web/scripts/copy-scalar-assets.ts:30"}, "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-f58bd8ed68b76e08", "name": "Stray `console.log` in TS/JS \u2014 apps/web/scripts/check-i18n-symmetry.ts:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 apps/web/scripts/check-i18n-symmetry.ts:47"}, "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-a7e4c46579188689", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/bookmark-list-card.tsx:39", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/bookmark-list-card.tsx:39"}, "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-7e41a5bf8856f05d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/trip-card.tsx:71", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/trip-card.tsx:71"}, "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-4b26107a08766643", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/sent-requests-card.tsx:85", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/sent-requests-card.tsx:85"}, "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-61c543588540ca33", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/bookmark-list-picker-dialog.tsx:83", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/bookmark-list-picker-dialog.tsx:83"}, "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-68ab2fc3a3b210e2", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/sp-bottom-nav.tsx:62", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/sp-bottom-nav.tsx:62"}, "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-44efe3ec644a76aa", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/article-editor-dialog.tsx:453", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/article-editor-dialog.tsx:453"}, "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-1f2140de1c0d8d92", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/friend-requests-card.tsx:113", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/friend-requests-card.tsx:113"}, "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-45335a772012a09a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/expense-panel.tsx:491", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/expense-panel.tsx:491"}, "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-4f8540f96aadbcaa", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/unsettled-summary.tsx:57", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/unsettled-summary.tsx:57"}, "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-1d9dc35de14844e5", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/install-banner.tsx:26", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/install-banner.tsx:26"}, "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-e89eead57b9dcb3f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/member-dialog.tsx:301", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/member-dialog.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-95837088dbb2e11a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/souvenir-panel.tsx:556", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/souvenir-panel.tsx:556"}, "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-234f9cd2cca45d47", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/bookmark-panel.tsx:308", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/bookmark-panel.tsx:308"}, "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-53ffe383f1eb948d", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/article-card.tsx:64", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/article-card.tsx:64"}, "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-94e247b125c288b8", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/sp-swipe-tabs.tsx:287", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/sp-swipe-tabs.tsx:287"}, "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-7a41fd70ef7bf4ae", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/guest-banner.tsx:34", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/guest-banner.tsx:34"}, "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-0a5c2413ab455a9c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/candidate-item.tsx:158", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/candidate-item.tsx:158"}, "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-065672b7d43f5eda", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/batch-shift-dialog.tsx:124", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/batch-shift-dialog.tsx:124"}, "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-c65b5eba6b884e53", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/schedule-items/primitives.tsx:486", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/schedule-items/primitives.tsx:486"}, "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-c4379f4fe4df495e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/schedule-items/place-item.tsx:127", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/schedule-items/place-item.tsx:127"}, "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-9170520f050f35d4", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/schedule-items/transport-item.tsx:169", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/schedule-items/transport-item.tsx:169"}, "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-1e027402110d94f0", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/users/[userId]/page.tsx:89", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/users/[userId]/page.tsx:89"}, "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-4fd102e18ffa2365", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(sp)/sp/trips/[id]/print/page.tsx:90", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(sp)/sp/trips/[id]/print/page.tsx:90"}, "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-748421bb3fdd5174", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(sp)/sp/trips/[id]/members/page.tsx:280", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(sp)/sp/trips/[id]/members/page.tsx:280"}, "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-4584e42a4df9a356", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(sp)/sp/trips/[id]/export/page.tsx:382", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(sp)/sp/trips/[id]/export/page.tsx:382"}, "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-85167be3f49da467", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(sp)/sp/home/layout.tsx:29", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(sp)/sp/home/layout.tsx:29"}, "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-1effca8cfa1903b0", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(sp)/sp/friends/groups/[id]/page.tsx:100", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(sp)/sp/friends/groups/[id]/page.tsx:100"}, "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-4cfaff66fac3c912", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(sp)/sp/friends/groups/[id]/add/page.tsx:173", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(sp)/sp/friends/groups/[id]/add/page.tsx:173"}, "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-9cd40baf0b67170a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/shared/[token]/_components/shared-trip-client.tsx:439", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/shared/[token]/_components/shared-trip-client.tsx:439"}, "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-a7cab35af4d914ea", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/trips/[id]/print/page.tsx:252", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/trips/[id]/print/page.tsx:252"}, "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-c0f8227a2ecd1e6b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/trips/[id]/_components/trip-header.tsx", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/trips/[id]/_components/trip-header.tsx:86"}, "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-5d758daeaaec58d4", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/trips/[id]/_components/pattern-tabs.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/trips/[id]/_components/pattern-tabs.tsx:246"}, "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-3c4bf5401adf6d1b", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/trips/[id]/_components/trip-dialogs.ts", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/trips/[id]/_components/trip-dialogs.tsx:203"}, "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-4ebf593ee9ff799a", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/trips/[id]/export/page.tsx:81", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/trips/[id]/export/page.tsx:81"}, "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-6a64f9512376a306", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/bookmarks/[listId]/_components/sortabl", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/bookmarks/[listId]/_components/sortable-bookmark-item.tsx:40"}, "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-93923f28f1e20a4e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/home/layout.tsx:29", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/home/layout.tsx:29"}, "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-8db422e50b6313d8", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/friends/_components/group-detail-modal", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/friends/_components/group-detail-modal.tsx:186"}, "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-981737393b54b396", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/friends/_components/friends-tab.tsx:11", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/friends/_components/friends-tab.tsx:111"}, "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-ef3cd17eb7017031", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/friends/_components/groups-tab.tsx:162", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/friends/_components/groups-tab.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-f492883c23b73355", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/my/page.tsx:82", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/my/page.tsx:82"}, "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-734ae7f81325acde", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/app/news/[slug]/page.tsx:72", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/app/news/[slug]/page.tsx:72"}, "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-9e0564e2d444dfd0", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/app/faq/page.tsx:35", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/app/faq/page.tsx:35"}, "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-b2b3248d0cac4130", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/lib/linkify.tsx:40", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/lib/linkify.tsx:40"}, "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-7d74c99237c630d3", "name": "Possible secret in apps/api/src/db/seed.ts", "shortDescription": {"text": "Possible secret in apps/api/src/db/seed.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-275c883e2b3a664b", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/app/news/[slug]/page.tsx:72", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/app/news/[slug]/page.tsx:72"}, "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-b93d2af90e85a052", "name": "Insecure pattern 'dangerous_innerhtml' in apps/web/app/faq/page.tsx:35", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/app/faq/page.tsx:35"}, "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-819b54c051bf1c1c", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/web/lib/__tests__/hotkeys.test.ts:6", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/web/lib/__tests__/hotkeys.test.ts:6"}, "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-f121dc5c37e29008", "name": "Possible secret in apps/web/e2e/docs.spec.ts", "shortDescription": {"text": "Possible secret in apps/web/e2e/docs.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-b00d667c838fbe7c", "name": "Possible secret in apps/web/e2e/delete-account.spec.ts", "shortDescription": {"text": "Possible secret in apps/web/e2e/delete-account.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-912ff473885f33ed", "name": "Possible secret in apps/web/e2e/auth.spec.ts", "shortDescription": {"text": "Possible secret in apps/web/e2e/auth.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-b402b2a90c351d65", "name": "Possible secret in apps/web/e2e/api-keys.spec.ts", "shortDescription": {"text": "Possible secret in apps/web/e2e/api-keys.spec.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-bf52d7a679ea671f", "name": "Possible secret in packages/shared/src/messages.ts", "shortDescription": {"text": "Possible secret in packages/shared/src/messages.ts"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-768e8f28c1850d98", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fa7ba2c6d4604ca1", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c1ba729df93d1c08", "name": "GitHub Actions workflow grants broad write permissions", "shortDescription": {"text": "GitHub Actions workflow grants broad write permissions"}, "fullDescription": {"text": "CI tokens with write permissions increase blast radius when an action, dependency, or PR workflow is compromised. Prefer job-level least-privilege permissions."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cb639d9a10a47b23", "name": "package.json defines install-time lifecycle scripts", "shortDescription": {"text": "package.json defines install-time lifecycle scripts"}, "fullDescription": {"text": "preinstall/install/postinstall/prepare scripts execute during dependency installation. Review them carefully for network calls, obfuscation, shell execution, or credential access."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8a5c5dcb218610bf", "name": "Very large file: apps/api/src/__tests__/v1-write-routes.test.ts (1799 lines)", "shortDescription": {"text": "Very large file: apps/api/src/__tests__/v1-write-routes.test.ts (1799 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-4addc1f7b516d628", "name": "Very large file: apps/api/src/db/seed-faqs.ts (952 lines)", "shortDescription": {"text": "Very large file: apps/api/src/db/seed-faqs.ts (952 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-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-b06b8d86f24c77f9", "name": "Node manifest has dependencies but no lockfile: apps/api/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/api/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-33bfb396f1c1ee27", "name": "Node manifest has dependencies but no lockfile: apps/mcp/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/mcp/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d57b3f82d2270c5b", "name": "Node manifest has dependencies but no lockfile: apps/desktop/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/desktop/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a9eb7dc7c6e3880", "name": "Node manifest has dependencies but no lockfile: apps/web/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: apps/web/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2699d5f16ae11282", "name": "Node manifest has dependencies but no lockfile: packages/shared/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/shared/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "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 63 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 84 placeholder/mock markers across 45 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, lockfile. 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, lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-149fad1f84450cf6", "name": "Commented-code block (5 lines) in apps/api/src/app.ts:49", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/app.ts:49"}, "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-e316cb1224db5830", "name": "Commented-code block (9 lines) in apps/api/src/__tests__/v1-write-routes.test.ts:3", "shortDescription": {"text": "Commented-code block (9 lines) in apps/api/src/__tests__/v1-write-routes.test.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-35d8165597eb6c61", "name": "Commented-code block (5 lines) in apps/api/src/__tests__/docs.test.ts:54", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/__tests__/docs.test.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-e88278f587339c3b", "name": "Commented-code block (6 lines) in apps/api/src/__tests__/v1-mounting.test.ts:4", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/__tests__/v1-mounting.test.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-b07ea785abf92f61", "name": "Commented-code block (5 lines) in apps/api/src/middleware/require-api-key.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/middleware/require-api-key.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-e48b2d7d48e2c59f", "name": "Commented-code block (5 lines) in apps/api/src/lib/auth.ts:34", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/lib/auth.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-05f1780c94f7b982", "name": "Commented-code block (5 lines) in apps/api/src/lib/poll-access.ts:68", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/lib/poll-access.ts:68"}, "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-baf4f92626e86762", "name": "Commented-code block (5 lines) in apps/api/src/lib/candidate-service.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/lib/candidate-service.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7e2b80fd9b95a8fb", "name": "Commented-code block (5 lines) in apps/api/src/lib/auth-hooks.ts:16", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/lib/auth-hooks.ts: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-86bd0242d668239f", "name": "Commented-code block (8 lines) in apps/api/src/lib/sort-order.ts:10", "shortDescription": {"text": "Commented-code block (8 lines) in apps/api/src/lib/sort-order.ts:10"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-371cbe5fbebdb920", "name": "Commented-code block (5 lines) in apps/api/src/lib/souvenir-service.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/lib/souvenir-service.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-ddeb692b43d8bc2f", "name": "Commented-code block (6 lines) in apps/api/src/lib/external-api/member-no.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/lib/external-api/member-no.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-05dbf7eb365a3a66", "name": "Commented-code block (6 lines) in apps/api/src/lib/external-api/api-key.ts:14", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/lib/external-api/api-key.ts:14"}, "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-5c13f9a11c94ba7b", "name": "Commented-code block (5 lines) in apps/api/src/lib/external-api/errors.ts:36", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/lib/external-api/errors.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-deac641f693e4927", "name": "Commented-code block (9 lines) in apps/api/src/routes/auth.ts:9", "shortDescription": {"text": "Commented-code block (9 lines) in apps/api/src/routes/auth.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-b7f5d3356f995012", "name": "Commented-code block (6 lines) in apps/api/src/routes/docs.ts:24", "shortDescription": {"text": "Commented-code block (6 lines) in apps/api/src/routes/docs.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-23fd04e975aa7f59", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/routes/directions.ts:92", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/routes/directions.ts: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-5df4c5acfed0cec1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/routes/admin.ts:333", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/routes/admin.ts:333"}, "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-e2d2e5e0cb363d7c", "name": "Commented-code block (5 lines) in apps/api/src/routes/v1/candidates-write.ts:420", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/routes/v1/candidates-write.ts:420"}, "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-d5085441c239496b", "name": "Commented-code block (5 lines) in apps/api/src/routes/v1/souvenirs-write.ts:9", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/routes/v1/souvenirs-write.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-85d39c281b7fa59f", "name": "Commented-code block (7 lines) in apps/api/src/routes/v1/shared.ts:40", "shortDescription": {"text": "Commented-code block (7 lines) in apps/api/src/routes/v1/shared.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-5df415ae5c25fbc5", "name": "Commented-code block (7 lines) in apps/api/src/routes/v1/write-schemas.ts:3", "shortDescription": {"text": "Commented-code block (7 lines) in apps/api/src/routes/v1/write-schemas.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-be0505f2365ac712", "name": "Commented-code block (5 lines) in apps/api/src/routes/v1/serializers.ts:118", "shortDescription": {"text": "Commented-code block (5 lines) in apps/api/src/routes/v1/serializers.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-cc73f482c1c80ca6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/db/seed-user.ts:19", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/db/seed-user.ts:19"}, "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-f6c5b11d29303278", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/db/seed.ts:560", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/db/seed.ts:560"}, "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-a4b3284ab80bb07d", "name": "Commented-code block (8 lines) in apps/mcp/src/tools.ts:302", "shortDescription": {"text": "Commented-code block (8 lines) in apps/mcp/src/tools.ts:302"}, "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-55666f185202aa58", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mcp/src/client.ts:140", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mcp/src/client.ts: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-eccf8949d5b8ed54", "name": "Commented-code block (6 lines) in apps/web/instrumentation-client.ts:5", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/instrumentation-client.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-46a50e032500e642", "name": "Commented-code block (5 lines) in apps/web/proxy.ts:95", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/proxy.ts:95"}, "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-32d8fb6673b524a1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/proxy.ts:138", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/proxy.ts:138"}, "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-c681647d05fd7857", "name": "Commented-code block (5 lines) in apps/web/components/action-sheet.tsx:26", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/action-sheet.tsx:26"}, "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-b0919bb6f4e78f6e", "name": "Commented-code block (5 lines) in apps/web/components/ui/__mocks__/responsive-alert-dialog.tsx:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/components/ui/__mocks__/responsive-alert-dialog.tsx: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-faf644cbb754b300", "name": "Commented-code block (7 lines) in apps/web/app/sw.ts:56", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/app/sw.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-b38ab37e620a862f", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/p/[token]/page.tsx:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/p/[token]/page.tsx:26"}, "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-c01cd8ba55717c8b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/polls/shared/[token]/page.tsx:64", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/polls/shared/[token]/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-61d203abfde42d4e", "name": "Commented-code block (5 lines) in apps/web/lib/json-ld.ts:1", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/lib/json-ld.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-23f3c74f02655933", "name": "Commented-code block (6 lines) in apps/web/lib/markdown.tsx:6", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/lib/markdown.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-6a056f3600a74b6d", "name": "Commented-code block (5 lines) in apps/web/lib/format.ts:74", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/lib/format.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-c81ed090a0702b9b", "name": "Commented-code block (6 lines) in apps/web/lib/merge-timeline.ts:121", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/lib/merge-timeline.ts:121"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc379d1de75a8e0b", "name": "Commented-code block (9 lines) in apps/web/lib/supabase.ts:17", "shortDescription": {"text": "Commented-code block (9 lines) in apps/web/lib/supabase.ts:17"}, "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-deea368d9ca15f4b", "name": "Commented-code block (6 lines) in apps/web/lib/drop-position.ts:247", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/lib/drop-position.ts:247"}, "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-d0d05fff638169fe", "name": "Commented-code block (5 lines) in apps/web/lib/no-content-endpoints.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/lib/no-content-endpoints.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e9063d3cdaeba7b5", "name": "Commented-code block (5 lines) in apps/web/lib/__tests__/drop-position.test.ts:361", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/lib/__tests__/drop-position.test.ts:361"}, "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-75c11da0ca88ccf6", "name": "Commented-code block (6 lines) in apps/web/lib/hooks/use-trip-drag-and-drop.ts:52", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/lib/hooks/use-trip-drag-and-drop.ts: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-f8598a6f58a6fd14", "name": "Commented-code block (6 lines) in apps/web/lib/hooks/use-trip-drag-and-drop.test.ts:576", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/lib/hooks/use-trip-drag-and-drop.test.ts:576"}, "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-a074da8de36c3c33", "name": "Commented-code block (5 lines) in apps/web/lib/hooks/use-push-subscription.ts:39", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/lib/hooks/use-push-subscription.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-cddd72a4c133cbec", "name": "Commented-code block (5 lines) in apps/web/lib/hooks/use-swipe-tab.ts:11", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/lib/hooks/use-swipe-tab.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-f10cc0ed2d866046", "name": "Commented-code block (5 lines) in apps/web/e2e/docs.spec.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/e2e/docs.spec.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-163d9cac8fe037dd", "name": "Commented-code block (5 lines) in apps/web/e2e/delete-account.spec.ts:145", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/e2e/delete-account.spec.ts:145"}, "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-1343a1e7ba8c11c3", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/e2e/delete-account.spec.ts:210", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/e2e/delete-account.spec.ts:210"}, "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-6cfcfb7274089da7", "name": "Commented-code block (7 lines) in apps/web/e2e/settlement.spec.ts:55", "shortDescription": {"text": "Commented-code block (7 lines) in apps/web/e2e/settlement.spec.ts:55"}, "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-355dede6414f30bb", "name": "Commented-code block (5 lines) in apps/web/e2e/password-reset.spec.ts:66", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/e2e/password-reset.spec.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-5579cdad85325aa0", "name": "Commented-code block (6 lines) in apps/web/e2e/souvenirs.spec.ts:136", "shortDescription": {"text": "Commented-code block (6 lines) in apps/web/e2e/souvenirs.spec.ts:136"}, "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-141cd1cd96de2412", "name": "Commented-code block (5 lines) in apps/web/e2e/mobile-layout.spec.ts:44", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/e2e/mobile-layout.spec.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-44d124e0d5dcb50c", "name": "Commented-code block (5 lines) in apps/web/e2e/shared-trip.spec.ts:83", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/e2e/shared-trip.spec.ts:83"}, "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-1986b8c394db9b11", "name": "Commented-code block (5 lines) in apps/web/e2e/fixtures/auth.ts:27", "shortDescription": {"text": "Commented-code block (5 lines) in apps/web/e2e/fixtures/auth.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-66180198a00c2a8d", "name": "Commented-code block (5 lines) in packages/shared/src/currency.ts:104", "shortDescription": {"text": "Commented-code block (5 lines) in packages/shared/src/currency.ts:104"}, "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-590603e14211a66d", "name": "Commented-code block (5 lines) in packages/shared/src/errors.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in packages/shared/src/errors.ts:3"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9996447513897762", "name": "30 env vars used in code but missing from .env.example", "shortDescription": {"text": "30 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ADMIN_USER_ID`, `API_URL`, `CI`, `CRON_SECRET`, `E2E_AUTH_RATE_LIMIT_MAX`, `EDGE_CONFIG`, `EDGE_CONFIG_ID`, `GITHUB_SENTRY_REPO` + 22 more. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c0a00fc5c088a867", "name": "Dangling fetch: GET /api/friends (apps/api/src/__tests__/friends.test.ts:79)", "shortDescription": {"text": "Dangling fetch: GET /api/friends (apps/api/src/__tests__/friends.test.ts:79)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:79` calls `GET /api/friends` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a1246a5b25749c7c", "name": "Dangling fetch: GET /api/friends (apps/api/src/__tests__/friends.test.ts:102)", "shortDescription": {"text": "Dangling fetch: GET /api/friends (apps/api/src/__tests__/friends.test.ts:102)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:102` calls `GET /api/friends` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d8433989274951a7", "name": "Dangling fetch: GET /api/friends (apps/api/src/__tests__/friends.test.ts:115)", "shortDescription": {"text": "Dangling fetch: GET /api/friends (apps/api/src/__tests__/friends.test.ts:115)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:115` calls `GET /api/friends` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3ff503998d2f086f", "name": "Dangling fetch: GET /api/friends (apps/api/src/__tests__/friends.test.ts:126)", "shortDescription": {"text": "Dangling fetch: GET /api/friends (apps/api/src/__tests__/friends.test.ts:126)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:126` calls `GET /api/friends` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a65e98c2fee249cf", "name": "Dangling fetch: GET /api/friends/requests (apps/api/src/__tests__/friends.test.ts:147)", "shortDescription": {"text": "Dangling fetch: GET /api/friends/requests (apps/api/src/__tests__/friends.test.ts:147)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:147` calls `GET /api/friends/requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/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-2bb1fd41375eb708", "name": "Dangling fetch: GET /api/friends/requests (apps/api/src/__tests__/friends.test.ts:161)", "shortDescription": {"text": "Dangling fetch: GET /api/friends/requests (apps/api/src/__tests__/friends.test.ts:161)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:161` calls `GET /api/friends/requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/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-b14df85dfe62ecec", "name": "Dangling fetch: GET /api/friends/requests (apps/api/src/__tests__/friends.test.ts:172)", "shortDescription": {"text": "Dangling fetch: GET /api/friends/requests (apps/api/src/__tests__/friends.test.ts:172)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:172` calls `GET /api/friends/requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/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-6acc7273b7210a39", "name": "Dangling fetch: POST /api/friends/requests (apps/api/src/__tests__/friends.test.ts:193)", "shortDescription": {"text": "Dangling fetch: POST /api/friends/requests (apps/api/src/__tests__/friends.test.ts:193)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:193` calls `POST /api/friends/requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/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-48e96c7b45377253", "name": "Dangling fetch: POST /api/friends/requests (apps/api/src/__tests__/friends.test.ts:204)", "shortDescription": {"text": "Dangling fetch: POST /api/friends/requests (apps/api/src/__tests__/friends.test.ts:204)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:204` calls `POST /api/friends/requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/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-c0e042583f34ee0a", "name": "Dangling fetch: POST /api/friends/requests (apps/api/src/__tests__/friends.test.ts:215)", "shortDescription": {"text": "Dangling fetch: POST /api/friends/requests (apps/api/src/__tests__/friends.test.ts:215)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:215` calls `POST /api/friends/requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/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-3010d24a781debf5", "name": "Dangling fetch: POST /api/friends/requests (apps/api/src/__tests__/friends.test.ts:228)", "shortDescription": {"text": "Dangling fetch: POST /api/friends/requests (apps/api/src/__tests__/friends.test.ts:228)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:228` calls `POST /api/friends/requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/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-aa5e2b7c3f3fb2b8", "name": "Dangling fetch: POST /api/friends/requests (apps/api/src/__tests__/friends.test.ts:250)", "shortDescription": {"text": "Dangling fetch: POST /api/friends/requests (apps/api/src/__tests__/friends.test.ts:250)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:250` calls `POST /api/friends/requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/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-bbc6d3d73e9a17ac", "name": "Dangling fetch: POST /api/friends/requests (apps/api/src/__tests__/friends.test.ts:267)", "shortDescription": {"text": "Dangling fetch: POST /api/friends/requests (apps/api/src/__tests__/friends.test.ts:267)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:267` calls `POST /api/friends/requests` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/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-53b5ccad8c8189d9", "name": "Dangling fetch: PATCH /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:293)", "shortDescription": {"text": "Dangling fetch: PATCH /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:293)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:293` calls `PATCH /api/friends/requests/${friendRecordId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/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-e66ae48124a615d7", "name": "Dangling fetch: PATCH /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:308)", "shortDescription": {"text": "Dangling fetch: PATCH /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:308)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:308` calls `PATCH /api/friends/requests/${friendRecordId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/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-95d746029d28a61d", "name": "Dangling fetch: PATCH /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:326)", "shortDescription": {"text": "Dangling fetch: PATCH /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:326)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:326` calls `PATCH /api/friends/requests/${friendRecordId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/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-62d05c2ac4ffd457", "name": "Dangling fetch: DELETE /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:350)", "shortDescription": {"text": "Dangling fetch: DELETE /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:350)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:350` calls `DELETE /api/friends/requests/${friendRecordId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/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-7c67fc06779683fd", "name": "Dangling fetch: DELETE /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:371)", "shortDescription": {"text": "Dangling fetch: DELETE /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:371)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:371` calls `DELETE /api/friends/requests/${friendRecordId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/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-200ef25363de9eaf", "name": "Dangling fetch: DELETE /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:384)", "shortDescription": {"text": "Dangling fetch: DELETE /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:384)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:384` calls `DELETE /api/friends/requests/${friendRecordId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/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-cfb51822ad88b627", "name": "Dangling fetch: DELETE /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:400)", "shortDescription": {"text": "Dangling fetch: DELETE /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:400)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:400` calls `DELETE /api/friends/requests/${friendRecordId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/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-25840cd48dd35231", "name": "Dangling fetch: GET /api/friends/requests/sent (apps/api/src/__tests__/friends.test.ts:423)", "shortDescription": {"text": "Dangling fetch: GET /api/friends/requests/sent (apps/api/src/__tests__/friends.test.ts:423)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:423` calls `GET /api/friends/requests/sent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/requests/sent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bcb691055efbf9ef", "name": "Dangling fetch: GET /api/friends/requests/sent (apps/api/src/__tests__/friends.test.ts:437)", "shortDescription": {"text": "Dangling fetch: GET /api/friends/requests/sent (apps/api/src/__tests__/friends.test.ts:437)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:437` calls `GET /api/friends/requests/sent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/requests/sent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aadec3d38eb7b316", "name": "Dangling fetch: GET /api/friends/requests/sent (apps/api/src/__tests__/friends.test.ts:448)", "shortDescription": {"text": "Dangling fetch: GET /api/friends/requests/sent (apps/api/src/__tests__/friends.test.ts:448)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:448` calls `GET /api/friends/requests/sent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/requests/sent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1bfda69adf896aa0", "name": "Dangling fetch: DELETE /api/friends/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:468)", "shortDescription": {"text": "Dangling fetch: DELETE /api/friends/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:468)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:468` calls `DELETE /api/friends/${friendRecordId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/<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-ef614cc98350c142", "name": "Dangling fetch: DELETE /api/friends/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:489)", "shortDescription": {"text": "Dangling fetch: DELETE /api/friends/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:489)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:489` calls `DELETE /api/friends/${friendRecordId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/<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-e45e9c23f0147a49", "name": "Dangling fetch: DELETE /api/friends/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:502)", "shortDescription": {"text": "Dangling fetch: DELETE /api/friends/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:502)"}, "fullDescription": {"text": "`apps/api/src/__tests__/friends.test.ts:502` calls `DELETE /api/friends/${friendRecordId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/friends/<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-30af7f6179847ef0", "name": "Dangling fetch: GET /boom (apps/api/src/__tests__/error-handler.test.ts:24)", "shortDescription": {"text": "Dangling fetch: GET /boom (apps/api/src/__tests__/error-handler.test.ts:24)"}, "fullDescription": {"text": "`apps/api/src/__tests__/error-handler.test.ts:24` calls `GET /boom` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/boom`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-06e57b555e62f7f3", "name": "Dangling fetch: GET /boom (apps/api/src/__tests__/error-handler.test.ts:31)", "shortDescription": {"text": "Dangling fetch: GET /boom (apps/api/src/__tests__/error-handler.test.ts:31)"}, "fullDescription": {"text": "`apps/api/src/__tests__/error-handler.test.ts:31` calls `GET /boom` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/boom`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5be946524785608f", "name": "Dangling fetch: GET /boom (apps/api/src/__tests__/error-handler.test.ts:47)", "shortDescription": {"text": "Dangling fetch: GET /boom (apps/api/src/__tests__/error-handler.test.ts:47)"}, "fullDescription": {"text": "`apps/api/src/__tests__/error-handler.test.ts:47` calls `GET /boom` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/boom`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-23c2bfd42178754c", "name": "Dangling fetch: GET /boom (apps/api/src/__tests__/error-handler.test.ts:66)", "shortDescription": {"text": "Dangling fetch: GET /boom (apps/api/src/__tests__/error-handler.test.ts:66)"}, "fullDescription": {"text": "`apps/api/src/__tests__/error-handler.test.ts:66` calls `GET /boom` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/boom`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e4b6df37717d288b", "name": "Dangling fetch: GET /boom (apps/api/src/__tests__/error-handler.test.ts:71)", "shortDescription": {"text": "Dangling fetch: GET /boom (apps/api/src/__tests__/error-handler.test.ts:71)"}, "fullDescription": {"text": "`apps/api/src/__tests__/error-handler.test.ts:71` calls `GET /boom` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/boom`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3e2349e9809c3599", "name": "Dangling fetch: GET /boom (apps/api/src/__tests__/error-handler.test.ts:85)", "shortDescription": {"text": "Dangling fetch: GET /boom (apps/api/src/__tests__/error-handler.test.ts:85)"}, "fullDescription": {"text": "`apps/api/src/__tests__/error-handler.test.ts:85` calls `GET /boom` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/boom`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e11913aaf48663ef", "name": "Dangling fetch: PATCH /api/articles/reorder (apps/api/src/__tests__/articles.test.ts:176)", "shortDescription": {"text": "Dangling fetch: PATCH /api/articles/reorder (apps/api/src/__tests__/articles.test.ts:176)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:176` calls `PATCH /api/articles/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/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-ef55f122365a336d", "name": "Dangling fetch: PATCH /api/articles/reorder (apps/api/src/__tests__/articles.test.ts:193)", "shortDescription": {"text": "Dangling fetch: PATCH /api/articles/reorder (apps/api/src/__tests__/articles.test.ts:193)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:193` calls `PATCH /api/articles/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/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-15f13d0c829f336c", "name": "Dangling fetch: PATCH /api/articles/reorder (apps/api/src/__tests__/articles.test.ts:211)", "shortDescription": {"text": "Dangling fetch: PATCH /api/articles/reorder (apps/api/src/__tests__/articles.test.ts:211)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:211` calls `PATCH /api/articles/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/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-45e3b15515cf2a0b", "name": "Dangling fetch: PUT /api/articles/${articleId}/trips (apps/api/src/__tests__/articles.test.ts:335)", "shortDescription": {"text": "Dangling fetch: PUT /api/articles/${articleId}/trips (apps/api/src/__tests__/articles.test.ts:335)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:335` calls `PUT /api/articles/${articleId}/trips` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/<p>/trips`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ca02e62ee5953fd6", "name": "Dangling fetch: PUT /api/articles/${articleId}/trips (apps/api/src/__tests__/articles.test.ts:350)", "shortDescription": {"text": "Dangling fetch: PUT /api/articles/${articleId}/trips (apps/api/src/__tests__/articles.test.ts:350)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:350` calls `PUT /api/articles/${articleId}/trips` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/<p>/trips`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-11ac0f8ca1137e22", "name": "Dangling fetch: PUT /api/articles/${articleId}/trips (apps/api/src/__tests__/articles.test.ts:365)", "shortDescription": {"text": "Dangling fetch: PUT /api/articles/${articleId}/trips (apps/api/src/__tests__/articles.test.ts:365)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:365` calls `PUT /api/articles/${articleId}/trips` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/<p>/trips`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e2bd76de29ff421", "name": "Dangling fetch: POST /api/articles/batch-delete (apps/api/src/__tests__/articles.test.ts:498)", "shortDescription": {"text": "Dangling fetch: POST /api/articles/batch-delete (apps/api/src/__tests__/articles.test.ts:498)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:498` calls `POST /api/articles/batch-delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/batch-delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-69b73eafe0cb2b3b", "name": "Dangling fetch: POST /api/articles/batch-delete (apps/api/src/__tests__/articles.test.ts:515)", "shortDescription": {"text": "Dangling fetch: POST /api/articles/batch-delete (apps/api/src/__tests__/articles.test.ts:515)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:515` calls `POST /api/articles/batch-delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/batch-delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e3af3ba50d5574fe", "name": "Dangling fetch: POST /api/articles/batch-delete (apps/api/src/__tests__/articles.test.ts:531)", "shortDescription": {"text": "Dangling fetch: POST /api/articles/batch-delete (apps/api/src/__tests__/articles.test.ts:531)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:531` calls `POST /api/articles/batch-delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/batch-delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6ff38d09f6b3c8ae", "name": "Dangling fetch: POST /api/articles/batch-delete (apps/api/src/__tests__/articles.test.ts:542)", "shortDescription": {"text": "Dangling fetch: POST /api/articles/batch-delete (apps/api/src/__tests__/articles.test.ts:542)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:542` calls `POST /api/articles/batch-delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/batch-delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-af0e0f15899d6863", "name": "Dangling fetch: POST /api/articles/batch-delete (apps/api/src/__tests__/articles.test.ts:553)", "shortDescription": {"text": "Dangling fetch: POST /api/articles/batch-delete (apps/api/src/__tests__/articles.test.ts:553)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:553` calls `POST /api/articles/batch-delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/batch-delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-72a24ef888ec0410", "name": "Dangling fetch: GET /api/trips/${tripId}/articles (apps/api/src/__tests__/articles.test.ts:568)", "shortDescription": {"text": "Dangling fetch: GET /api/trips/${tripId}/articles (apps/api/src/__tests__/articles.test.ts:568)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:568` calls `GET /api/trips/${tripId}/articles` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/articles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8e3def4346c7902a", "name": "Dangling fetch: GET /api/trips/${tripId}/articles (apps/api/src/__tests__/articles.test.ts:592)", "shortDescription": {"text": "Dangling fetch: GET /api/trips/${tripId}/articles (apps/api/src/__tests__/articles.test.ts:592)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:592` calls `GET /api/trips/${tripId}/articles` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/articles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e807cfb30883c00d", "name": "Dangling fetch: POST /api/articles/${articleId}/like (apps/api/src/__tests__/articles.test.ts:621)", "shortDescription": {"text": "Dangling fetch: POST /api/articles/${articleId}/like (apps/api/src/__tests__/articles.test.ts:621)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:621` calls `POST /api/articles/${articleId}/like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/<p>/like`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3a19c932f0f3a0a7", "name": "Dangling fetch: POST /api/articles/${articleId}/like (apps/api/src/__tests__/articles.test.ts:639)", "shortDescription": {"text": "Dangling fetch: POST /api/articles/${articleId}/like (apps/api/src/__tests__/articles.test.ts:639)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:639` calls `POST /api/articles/${articleId}/like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/<p>/like`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2e3f4c1031a3fbfa", "name": "Dangling fetch: POST /api/articles/${articleId}/like (apps/api/src/__tests__/articles.test.ts:651)", "shortDescription": {"text": "Dangling fetch: POST /api/articles/${articleId}/like (apps/api/src/__tests__/articles.test.ts:651)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:651` calls `POST /api/articles/${articleId}/like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/<p>/like`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6cbf88632f0bbfce", "name": "Dangling fetch: POST /api/articles/not-a-uuid/like (apps/api/src/__tests__/articles.test.ts:658)", "shortDescription": {"text": "Dangling fetch: POST /api/articles/not-a-uuid/like (apps/api/src/__tests__/articles.test.ts:658)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:658` calls `POST /api/articles/not-a-uuid/like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/not-a-uuid/like`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ab9d905007124ddb", "name": "Dangling fetch: DELETE /api/articles/${articleId}/like (apps/api/src/__tests__/articles.test.ts:672)", "shortDescription": {"text": "Dangling fetch: DELETE /api/articles/${articleId}/like (apps/api/src/__tests__/articles.test.ts:672)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:672` calls `DELETE /api/articles/${articleId}/like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/<p>/like`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-03adeeb5f4c416e4", "name": "Dangling fetch: DELETE /api/articles/${articleId}/like (apps/api/src/__tests__/articles.test.ts:690)", "shortDescription": {"text": "Dangling fetch: DELETE /api/articles/${articleId}/like (apps/api/src/__tests__/articles.test.ts:690)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:690` calls `DELETE /api/articles/${articleId}/like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/<p>/like`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3aa73bdb74cf96b6", "name": "Dangling fetch: DELETE /api/articles/${articleId}/like (apps/api/src/__tests__/articles.test.ts:709)", "shortDescription": {"text": "Dangling fetch: DELETE /api/articles/${articleId}/like (apps/api/src/__tests__/articles.test.ts:709)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:709` calls `DELETE /api/articles/${articleId}/like` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/<p>/like`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-80f2b596ad6d66c0", "name": "Dangling fetch: GET /api/articles/not-a-uuid (apps/api/src/__tests__/articles.test.ts:722)", "shortDescription": {"text": "Dangling fetch: GET /api/articles/not-a-uuid (apps/api/src/__tests__/articles.test.ts:722)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:722` calls `GET /api/articles/not-a-uuid` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/not-a-uuid`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-859430699a918db0", "name": "Dangling fetch: PATCH /api/articles/not-a-uuid (apps/api/src/__tests__/articles.test.ts:728)", "shortDescription": {"text": "Dangling fetch: PATCH /api/articles/not-a-uuid (apps/api/src/__tests__/articles.test.ts:728)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:728` calls `PATCH /api/articles/not-a-uuid` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/not-a-uuid`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d07beaa12a4f3f0a", "name": "Dangling fetch: DELETE /api/articles/not-a-uuid (apps/api/src/__tests__/articles.test.ts:738)", "shortDescription": {"text": "Dangling fetch: DELETE /api/articles/not-a-uuid (apps/api/src/__tests__/articles.test.ts:738)"}, "fullDescription": {"text": "`apps/api/src/__tests__/articles.test.ts:738` calls `DELETE /api/articles/not-a-uuid` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/not-a-uuid`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-abe1cd93199c9d6e", "name": "Dangling fetch: GET /api/users/not-a-uuid/articles (apps/api/src/__tests__/profile.test.ts:106)", "shortDescription": {"text": "Dangling fetch: GET /api/users/not-a-uuid/articles (apps/api/src/__tests__/profile.test.ts:106)"}, "fullDescription": {"text": "`apps/api/src/__tests__/profile.test.ts:106` calls `GET /api/users/not-a-uuid/articles` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/users/not-a-uuid/articles`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-444cbd4ecaf73a8c", "name": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists (apps/api/src/__tests__/profile.test.ts:132)", "shortDescription": {"text": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists (apps/api/src/__tests__/profile.test.ts:132)"}, "fullDescription": {"text": "`apps/api/src/__tests__/profile.test.ts:132` calls `GET /api/users/${ownerId}/bookmark-lists` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/users/<p>/bookmark-lists`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-186f664b22167761", "name": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists (apps/api/src/__tests__/profile.test.ts:149)", "shortDescription": {"text": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists (apps/api/src/__tests__/profile.test.ts:149)"}, "fullDescription": {"text": "`apps/api/src/__tests__/profile.test.ts:149` calls `GET /api/users/${ownerId}/bookmark-lists` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/users/<p>/bookmark-lists`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7a0c061fef21d1b2", "name": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists (apps/api/src/__tests__/profile.test.ts:159)", "shortDescription": {"text": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists (apps/api/src/__tests__/profile.test.ts:159)"}, "fullDescription": {"text": "`apps/api/src/__tests__/profile.test.ts:159` calls `GET /api/users/${ownerId}/bookmark-lists` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/users/<p>/bookmark-lists`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-debe737b1dd6d101", "name": "Dangling fetch: GET /api/users/${ownerId}/profile (apps/api/src/__tests__/profile.test.ts:286)", "shortDescription": {"text": "Dangling fetch: GET /api/users/${ownerId}/profile (apps/api/src/__tests__/profile.test.ts:286)"}, "fullDescription": {"text": "`apps/api/src/__tests__/profile.test.ts:286` calls `GET /api/users/${ownerId}/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/users/<p>/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-1c3e640fbc643142", "name": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists/${listId} (apps/api/src/__tests__/profile.test.ts:337)", "shortDescription": {"text": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists/${listId} (apps/api/src/__tests__/profile.test.ts:337)"}, "fullDescription": {"text": "`apps/api/src/__tests__/profile.test.ts:337` calls `GET /api/users/${ownerId}/bookmark-lists/${listId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/users/<p>/bookmark-lists/<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-48886bbb8a922b3c", "name": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists/${listId} (apps/api/src/__tests__/profile.test.ts:353)", "shortDescription": {"text": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists/${listId} (apps/api/src/__tests__/profile.test.ts:353)"}, "fullDescription": {"text": "`apps/api/src/__tests__/profile.test.ts:353` calls `GET /api/users/${ownerId}/bookmark-lists/${listId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/users/<p>/bookmark-lists/<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-cb62afbb50c3a981", "name": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists/${listId} (apps/api/src/__tests__/profile.test.ts:361)", "shortDescription": {"text": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists/${listId} (apps/api/src/__tests__/profile.test.ts:361)"}, "fullDescription": {"text": "`apps/api/src/__tests__/profile.test.ts:361` calls `GET /api/users/${ownerId}/bookmark-lists/${listId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/users/<p>/bookmark-lists/<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-d2d618eda654e3f9", "name": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists/${listId} (apps/api/src/__tests__/profile.test.ts:436)", "shortDescription": {"text": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists/${listId} (apps/api/src/__tests__/profile.test.ts:436)"}, "fullDescription": {"text": "`apps/api/src/__tests__/profile.test.ts:436` calls `GET /api/users/${ownerId}/bookmark-lists/${listId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/users/<p>/bookmark-lists/<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-38479ac7d05de7e5", "name": "Dangling fetch: PATCH /api/admin/users/user-target/trip-limit (apps/api/src/__tests__/admin-users.test.ts:120)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/users/user-target/trip-limit (apps/api/src/__tests__/admin-users.test.ts:120)"}, "fullDescription": {"text": "`apps/api/src/__tests__/admin-users.test.ts:120` calls `PATCH /api/admin/users/user-target/trip-limit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/users/user-target/trip-limit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6683aa5730009dec", "name": "Dangling fetch: PATCH /api/admin/users/user-target/trip-limit (apps/api/src/__tests__/admin-users.test.ts:133)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/users/user-target/trip-limit (apps/api/src/__tests__/admin-users.test.ts:133)"}, "fullDescription": {"text": "`apps/api/src/__tests__/admin-users.test.ts:133` calls `PATCH /api/admin/users/user-target/trip-limit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/users/user-target/trip-limit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c34d4f477d8ef870", "name": "Dangling fetch: PATCH /api/admin/users/non-existent-id/trip-limit (apps/api/src/__tests__/admin-users.test.ts:153)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/users/non-existent-id/trip-limit (apps/api/src/__tests__/admin-users.test.ts:153)"}, "fullDescription": {"text": "`apps/api/src/__tests__/admin-users.test.ts:153` calls `PATCH /api/admin/users/non-existent-id/trip-limit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/users/non-existent-id/trip-limit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ddadf19dde4db738", "name": "Dangling fetch: PATCH /api/admin/users/user-target/trip-limit (apps/api/src/__tests__/admin-users.test.ts:173)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/users/user-target/trip-limit (apps/api/src/__tests__/admin-users.test.ts:173)"}, "fullDescription": {"text": "`apps/api/src/__tests__/admin-users.test.ts:173` calls `PATCH /api/admin/users/user-target/trip-limit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/users/user-target/trip-limit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9954a291946363eb", "name": "Dangling fetch: POST /api/admin/users/some-user-id/temp-password (apps/api/src/__tests__/admin-users.test.ts:204)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/users/some-user-id/temp-password (apps/api/src/__tests__/admin-users.test.ts:204)"}, "fullDescription": {"text": "`apps/api/src/__tests__/admin-users.test.ts:204` calls `POST /api/admin/users/some-user-id/temp-password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/users/some-user-id/temp-password`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-076091b759347fe6", "name": "Dangling fetch: POST /api/admin/users/non-existent-id/temp-password (apps/api/src/__tests__/admin-users.test.ts:222)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/users/non-existent-id/temp-password (apps/api/src/__tests__/admin-users.test.ts:222)"}, "fullDescription": {"text": "`apps/api/src/__tests__/admin-users.test.ts:222` calls `POST /api/admin/users/non-existent-id/temp-password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/users/non-existent-id/temp-password`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-715694abbfd6210e", "name": "Dangling fetch: POST /api/admin/users/user-target/temp-password (apps/api/src/__tests__/admin-users.test.ts:240)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/users/user-target/temp-password (apps/api/src/__tests__/admin-users.test.ts:240)"}, "fullDescription": {"text": "`apps/api/src/__tests__/admin-users.test.ts:240` calls `POST /api/admin/users/user-target/temp-password` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/admin/users/user-target/temp-password`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d400cae4683dd7bc", "name": "Dangling fetch: GET /api/directions?tripId=trip-1 (apps/api/src/__tests__/directions.test.ts:99)", "shortDescription": {"text": "Dangling fetch: GET /api/directions?tripId=trip-1 (apps/api/src/__tests__/directions.test.ts:99)"}, "fullDescription": {"text": "`apps/api/src/__tests__/directions.test.ts:99` calls `GET /api/directions?tripId=trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/directions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5d178fb1475a0ed1", "name": "Dangling fetch: GET /api/groups (apps/api/src/__tests__/groups.test.ts:87)", "shortDescription": {"text": "Dangling fetch: GET /api/groups (apps/api/src/__tests__/groups.test.ts:87)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:87` calls `GET /api/groups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-f856e535ef5ff6eb", "name": "Dangling fetch: GET /api/groups (apps/api/src/__tests__/groups.test.ts:101)", "shortDescription": {"text": "Dangling fetch: GET /api/groups (apps/api/src/__tests__/groups.test.ts:101)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:101` calls `GET /api/groups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-9ba4a686ad6bb15a", "name": "Dangling fetch: GET /api/groups (apps/api/src/__tests__/groups.test.ts:112)", "shortDescription": {"text": "Dangling fetch: GET /api/groups (apps/api/src/__tests__/groups.test.ts:112)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:112` calls `GET /api/groups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-322c99bd13a57b9c", "name": "Dangling fetch: POST /api/groups (apps/api/src/__tests__/groups.test.ts:135)", "shortDescription": {"text": "Dangling fetch: POST /api/groups (apps/api/src/__tests__/groups.test.ts:135)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:135` calls `POST /api/groups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-9b8deabe7a8d2c0b", "name": "Dangling fetch: POST /api/groups (apps/api/src/__tests__/groups.test.ts:149)", "shortDescription": {"text": "Dangling fetch: POST /api/groups (apps/api/src/__tests__/groups.test.ts:149)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:149` calls `POST /api/groups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-cfcfafc2e38384bc", "name": "Dangling fetch: POST /api/groups (apps/api/src/__tests__/groups.test.ts:162)", "shortDescription": {"text": "Dangling fetch: POST /api/groups (apps/api/src/__tests__/groups.test.ts:162)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:162` calls `POST /api/groups` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-3a9fd8ec8fb0f1f4", "name": "Dangling fetch: PATCH /api/groups/${groupId} (apps/api/src/__tests__/groups.test.ts:196)", "shortDescription": {"text": "Dangling fetch: PATCH /api/groups/${groupId} (apps/api/src/__tests__/groups.test.ts:196)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:196` calls `PATCH /api/groups/${groupId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-6e32c40e58079f0d", "name": "Dangling fetch: PATCH /api/groups/${groupId} (apps/api/src/__tests__/groups.test.ts:211)", "shortDescription": {"text": "Dangling fetch: PATCH /api/groups/${groupId} (apps/api/src/__tests__/groups.test.ts:211)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:211` calls `PATCH /api/groups/${groupId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-1b2232a4bb455b53", "name": "Dangling fetch: PATCH /api/groups/${groupId} (apps/api/src/__tests__/groups.test.ts:225)", "shortDescription": {"text": "Dangling fetch: PATCH /api/groups/${groupId} (apps/api/src/__tests__/groups.test.ts:225)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:225` calls `PATCH /api/groups/${groupId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-0817af76b13abea1", "name": "Dangling fetch: DELETE /api/groups/${groupId} (apps/api/src/__tests__/groups.test.ts:248)", "shortDescription": {"text": "Dangling fetch: DELETE /api/groups/${groupId} (apps/api/src/__tests__/groups.test.ts:248)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:248` calls `DELETE /api/groups/${groupId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-fc6eba5c1872265c", "name": "Dangling fetch: DELETE /api/groups/${groupId} (apps/api/src/__tests__/groups.test.ts:261)", "shortDescription": {"text": "Dangling fetch: DELETE /api/groups/${groupId} (apps/api/src/__tests__/groups.test.ts:261)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:261` calls `DELETE /api/groups/${groupId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-12bd2ed18f7d90fe", "name": "Dangling fetch: DELETE /api/groups/${groupId} (apps/api/src/__tests__/groups.test.ts:273)", "shortDescription": {"text": "Dangling fetch: DELETE /api/groups/${groupId} (apps/api/src/__tests__/groups.test.ts:273)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:273` calls `DELETE /api/groups/${groupId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-c4fb71ba2a0113b3", "name": "Dangling fetch: GET /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:298)", "shortDescription": {"text": "Dangling fetch: GET /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:298)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:298` calls `GET /api/groups/${groupId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-3dd3ab3350027035", "name": "Dangling fetch: GET /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:311)", "shortDescription": {"text": "Dangling fetch: GET /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:311)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:311` calls `GET /api/groups/${groupId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-1aa77986305caa20", "name": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:335)", "shortDescription": {"text": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:335)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:335` calls `POST /api/groups/${groupId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-484544b7d64d5bef", "name": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:348)", "shortDescription": {"text": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:348)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:348` calls `POST /api/groups/${groupId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-6a05621c492f546f", "name": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:366)", "shortDescription": {"text": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:366)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:366` calls `POST /api/groups/${groupId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-09b4c17e7a650a54", "name": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:393)", "shortDescription": {"text": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:393)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:393` calls `POST /api/groups/${groupId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-6064b1408d52df6a", "name": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:420)", "shortDescription": {"text": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:420)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:420` calls `POST /api/groups/${groupId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-59b17fee41a2f5a3", "name": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:444)", "shortDescription": {"text": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:444)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:444` calls `POST /api/groups/${groupId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-b3cf1fd3f3c443ae", "name": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:466)", "shortDescription": {"text": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:466)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:466` calls `POST /api/groups/${groupId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-5c8fb2684eff11bd", "name": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:489)", "shortDescription": {"text": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:489)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:489` calls `POST /api/groups/${groupId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-5f62cbd41eeef6e3", "name": "Dangling fetch: POST /api/groups/${groupId}/members/bulk (apps/api/src/__tests__/groups.test.ts:546)", "shortDescription": {"text": "Dangling fetch: POST /api/groups/${groupId}/members/bulk (apps/api/src/__tests__/groups.test.ts:546)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:546` calls `POST /api/groups/${groupId}/members/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/groups/<p>/members/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-8e066df19fa32e75", "name": "Dangling fetch: POST /api/groups/${groupId}/members/bulk (apps/api/src/__tests__/groups.test.ts:574)", "shortDescription": {"text": "Dangling fetch: POST /api/groups/${groupId}/members/bulk (apps/api/src/__tests__/groups.test.ts:574)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:574` calls `POST /api/groups/${groupId}/members/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/groups/<p>/members/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-4eedec7991e38619", "name": "Dangling fetch: POST /api/groups/${groupId}/members/bulk (apps/api/src/__tests__/groups.test.ts:591)", "shortDescription": {"text": "Dangling fetch: POST /api/groups/${groupId}/members/bulk (apps/api/src/__tests__/groups.test.ts:591)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:591` calls `POST /api/groups/${groupId}/members/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/groups/<p>/members/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-6300caa0d036d06f", "name": "Dangling fetch: POST /api/groups/${groupId}/members/bulk (apps/api/src/__tests__/groups.test.ts:608)", "shortDescription": {"text": "Dangling fetch: POST /api/groups/${groupId}/members/bulk (apps/api/src/__tests__/groups.test.ts:608)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:608` calls `POST /api/groups/${groupId}/members/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/groups/<p>/members/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-cfe668385dee6125", "name": "Dangling fetch: POST /api/groups/${groupId}/members/bulk (apps/api/src/__tests__/groups.test.ts:626)", "shortDescription": {"text": "Dangling fetch: POST /api/groups/${groupId}/members/bulk (apps/api/src/__tests__/groups.test.ts:626)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:626` calls `POST /api/groups/${groupId}/members/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/groups/<p>/members/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-7df5617615c33ecf", "name": "Dangling fetch: DELETE /api/groups/${groupId}/members/${otherUserId} (apps/api/src/__tests__/groups.test.ts:653)", "shortDescription": {"text": "Dangling fetch: DELETE /api/groups/${groupId}/members/${otherUserId} (apps/api/src/__tests__/groups.test.ts:653)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:653` calls `DELETE /api/groups/${groupId}/members/${otherUserId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/groups/<p>/members/<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-7bed6e4004056c56", "name": "Dangling fetch: DELETE /api/groups/${groupId}/members/${otherUserId} (apps/api/src/__tests__/groups.test.ts:671)", "shortDescription": {"text": "Dangling fetch: DELETE /api/groups/${groupId}/members/${otherUserId} (apps/api/src/__tests__/groups.test.ts:671)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:671` calls `DELETE /api/groups/${groupId}/members/${otherUserId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/groups/<p>/members/<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-4fcbdb35d4da811b", "name": "Dangling fetch: DELETE /api/groups/${groupId}/members/${otherUserId} (apps/api/src/__tests__/groups.test.ts:682)", "shortDescription": {"text": "Dangling fetch: DELETE /api/groups/${groupId}/members/${otherUserId} (apps/api/src/__tests__/groups.test.ts:682)"}, "fullDescription": {"text": "`apps/api/src/__tests__/groups.test.ts:682` calls `DELETE /api/groups/${groupId}/members/${otherUserId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/groups/<p>/members/<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-6f013b893dd28466", "name": "Dangling fetch: POST /api/trips/${tripId}/settlement-payments (apps/api/src/__tests__/settlement-payments.test.ts:115)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/settlement-payments (apps/api/src/__tests__/settlement-payments.test.ts:115)"}, "fullDescription": {"text": "`apps/api/src/__tests__/settlement-payments.test.ts:115` calls `POST /api/trips/${tripId}/settlement-payments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/settlement-payments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0ade091c6bdd3f0d", "name": "Dangling fetch: POST /api/trips/${tripId}/settlement-payments (apps/api/src/__tests__/settlement-payments.test.ts:135)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/settlement-payments (apps/api/src/__tests__/settlement-payments.test.ts:135)"}, "fullDescription": {"text": "`apps/api/src/__tests__/settlement-payments.test.ts:135` calls `POST /api/trips/${tripId}/settlement-payments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/settlement-payments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-14cb0bf6457da6c4", "name": "Dangling fetch: POST /api/trips/${tripId}/settlement-payments (apps/api/src/__tests__/settlement-payments.test.ts:145)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/settlement-payments (apps/api/src/__tests__/settlement-payments.test.ts:145)"}, "fullDescription": {"text": "`apps/api/src/__tests__/settlement-payments.test.ts:145` calls `POST /api/trips/${tripId}/settlement-payments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/settlement-payments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-931a412473c3fec0", "name": "Dangling fetch: POST /api/trips/${tripId}/settlement-payments (apps/api/src/__tests__/settlement-payments.test.ts:167)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/settlement-payments (apps/api/src/__tests__/settlement-payments.test.ts:167)"}, "fullDescription": {"text": "`apps/api/src/__tests__/settlement-payments.test.ts:167` calls `POST /api/trips/${tripId}/settlement-payments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/settlement-payments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8a6ab3906dafd2b7", "name": "Dangling fetch: DELETE /api/trips/${tripId}/settlement-payments/sp-1 (apps/api/src/__tests__/settlement-payments.test.ts", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/settlement-payments/sp-1 (apps/api/src/__tests__/settlement-payments.test.ts:195)"}, "fullDescription": {"text": "`apps/api/src/__tests__/settlement-payments.test.ts:195` calls `DELETE /api/trips/${tripId}/settlement-payments/sp-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/settlement-payments/sp-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b1c376e48fbbfed6", "name": "Dangling fetch: DELETE /api/trips/${tripId}/settlement-payments/sp-missing (apps/api/src/__tests__/settlement-payments.t", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/settlement-payments/sp-missing (apps/api/src/__tests__/settlement-payments.test.ts:208)"}, "fullDescription": {"text": "`apps/api/src/__tests__/settlement-payments.test.ts:208` calls `DELETE /api/trips/${tripId}/settlement-payments/sp-missing` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/settlement-payments/sp-missing`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-128c720649014cc4", "name": "Dangling fetch: DELETE /api/trips/${tripId}/settlement-payments/sp-1 (apps/api/src/__tests__/settlement-payments.test.ts", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/settlement-payments/sp-1 (apps/api/src/__tests__/settlement-payments.test.ts:226)"}, "fullDescription": {"text": "`apps/api/src/__tests__/settlement-payments.test.ts:226` calls `DELETE /api/trips/${tripId}/settlement-payments/sp-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/settlement-payments/sp-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1470cca2fb4b61b3", "name": "Dangling fetch: GET /api/users/${fromUserId}/unsettled-summary (apps/api/src/__tests__/settlement-payments.test.ts:245)", "shortDescription": {"text": "Dangling fetch: GET /api/users/${fromUserId}/unsettled-summary (apps/api/src/__tests__/settlement-payments.test.ts:245)"}, "fullDescription": {"text": "`apps/api/src/__tests__/settlement-payments.test.ts:245` calls `GET /api/users/${fromUserId}/unsettled-summary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/users/<p>/unsettled-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-aa66bcd591c9b243", "name": "Dangling fetch: GET /api/users/other-user/unsettled-summary (apps/api/src/__tests__/settlement-payments.test.ts:255)", "shortDescription": {"text": "Dangling fetch: GET /api/users/other-user/unsettled-summary (apps/api/src/__tests__/settlement-payments.test.ts:255)"}, "fullDescription": {"text": "`apps/api/src/__tests__/settlement-payments.test.ts:255` calls `GET /api/users/other-user/unsettled-summary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/users/other-user/unsettled-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-becf3da236221596", "name": "Dangling fetch: GET /api/users/${fromUserId}/unsettled-summary (apps/api/src/__tests__/settlement-payments.test.ts:288)", "shortDescription": {"text": "Dangling fetch: GET /api/users/${fromUserId}/unsettled-summary (apps/api/src/__tests__/settlement-payments.test.ts:288)"}, "fullDescription": {"text": "`apps/api/src/__tests__/settlement-payments.test.ts:288` calls `GET /api/users/${fromUserId}/unsettled-summary` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/users/<p>/unsettled-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-2f9da823e458cdcf", "name": "Dangling fetch: POST /api/bookmark-lists/${listId}/duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:268)", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:268)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmark-lists.test.ts:268` calls `POST /api/bookmark-lists/${listId}/duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/<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-d839e9e8dd3e17b8", "name": "Dangling fetch: POST /api/bookmark-lists/${listId}/duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:285)", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:285)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmark-lists.test.ts:285` calls `POST /api/bookmark-lists/${listId}/duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/<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-6eb72b66dd671be3", "name": "Dangling fetch: POST /api/bookmark-lists/${listId}/duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:296)", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:296)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmark-lists.test.ts:296` calls `POST /api/bookmark-lists/${listId}/duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/<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-f62c9dd22c54357c", "name": "Dangling fetch: POST /api/bookmark-lists/${listId}/duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:312)", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:312)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmark-lists.test.ts:312` calls `POST /api/bookmark-lists/${listId}/duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/<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-25db69dc330cf410", "name": "Dangling fetch: POST /api/bookmark-lists/batch-delete (apps/api/src/__tests__/bookmark-lists.test.ts:334)", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/batch-delete (apps/api/src/__tests__/bookmark-lists.test.ts:334)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmark-lists.test.ts:334` calls `POST /api/bookmark-lists/batch-delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/batch-delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c5297cff0093d055", "name": "Dangling fetch: POST /api/bookmark-lists/batch-delete (apps/api/src/__tests__/bookmark-lists.test.ts:349)", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/batch-delete (apps/api/src/__tests__/bookmark-lists.test.ts:349)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmark-lists.test.ts:349` calls `POST /api/bookmark-lists/batch-delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/batch-delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d7f4ef16ebcdd76f", "name": "Dangling fetch: POST /api/bookmark-lists/batch-delete (apps/api/src/__tests__/bookmark-lists.test.ts:360)", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/batch-delete (apps/api/src/__tests__/bookmark-lists.test.ts:360)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmark-lists.test.ts:360` calls `POST /api/bookmark-lists/batch-delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/batch-delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-54a2abc60a1a10c6", "name": "Dangling fetch: POST /api/bookmark-lists/batch-duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:403)", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/batch-duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:403)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmark-lists.test.ts:403` calls `POST /api/bookmark-lists/batch-duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/batch-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-701e2220119737c7", "name": "Dangling fetch: POST /api/bookmark-lists/batch-duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:418)", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/batch-duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:418)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmark-lists.test.ts:418` calls `POST /api/bookmark-lists/batch-duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/batch-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-8f03f73595823510", "name": "Dangling fetch: POST /api/bookmark-lists/batch-duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:438)", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/batch-duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:438)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmark-lists.test.ts:438` calls `POST /api/bookmark-lists/batch-duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/batch-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-5892906d573e3e09", "name": "Dangling fetch: POST /api/bookmark-lists/batch-duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:449)", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/batch-duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:449)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmark-lists.test.ts:449` calls `POST /api/bookmark-lists/batch-duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/batch-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-154a2cf862b01093", "name": "Dangling fetch: GET /api/notification-preferences (apps/api/src/__tests__/notification-preferences.test.ts:39)", "shortDescription": {"text": "Dangling fetch: GET /api/notification-preferences (apps/api/src/__tests__/notification-preferences.test.ts:39)"}, "fullDescription": {"text": "`apps/api/src/__tests__/notification-preferences.test.ts:39` calls `GET /api/notification-preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/notification-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-7970fe14e663e413", "name": "Dangling fetch: PUT /api/notification-preferences (apps/api/src/__tests__/notification-preferences.test.ts:45)", "shortDescription": {"text": "Dangling fetch: PUT /api/notification-preferences (apps/api/src/__tests__/notification-preferences.test.ts:45)"}, "fullDescription": {"text": "`apps/api/src/__tests__/notification-preferences.test.ts:45` calls `PUT /api/notification-preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/notification-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-c8ada61bb5692124", "name": "Dangling fetch: PUT /api/notification-preferences (apps/api/src/__tests__/notification-preferences.test.ts:56)", "shortDescription": {"text": "Dangling fetch: PUT /api/notification-preferences (apps/api/src/__tests__/notification-preferences.test.ts:56)"}, "fullDescription": {"text": "`apps/api/src/__tests__/notification-preferences.test.ts:56` calls `PUT /api/notification-preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/notification-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-bac17e195c77bcc1", "name": "Dangling fetch: POST /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:59)", "shortDescription": {"text": "Dangling fetch: POST /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:59)"}, "fullDescription": {"text": "`apps/api/src/__tests__/poll-share.test.ts:59` calls `POST /api/polls/poll-1/share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/poll-1/share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bb2e3c24cb1fa005", "name": "Dangling fetch: POST /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:87)", "shortDescription": {"text": "Dangling fetch: POST /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:87)"}, "fullDescription": {"text": "`apps/api/src/__tests__/poll-share.test.ts:87` calls `POST /api/polls/poll-1/share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/poll-1/share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c382ef55443b4111", "name": "Dangling fetch: POST /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:115)", "shortDescription": {"text": "Dangling fetch: POST /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:115)"}, "fullDescription": {"text": "`apps/api/src/__tests__/poll-share.test.ts:115` calls `POST /api/polls/poll-1/share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/poll-1/share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c8fcf7faac0081a7", "name": "Dangling fetch: POST /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:145)", "shortDescription": {"text": "Dangling fetch: POST /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:145)"}, "fullDescription": {"text": "`apps/api/src/__tests__/poll-share.test.ts:145` calls `POST /api/polls/poll-1/share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/poll-1/share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-320c65eff8175ff4", "name": "Dangling fetch: POST /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:157)", "shortDescription": {"text": "Dangling fetch: POST /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:157)"}, "fullDescription": {"text": "`apps/api/src/__tests__/poll-share.test.ts:157` calls `POST /api/polls/poll-1/share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/poll-1/share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d5364f8fd68c7570", "name": "Dangling fetch: PUT /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:184)", "shortDescription": {"text": "Dangling fetch: PUT /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:184)"}, "fullDescription": {"text": "`apps/api/src/__tests__/poll-share.test.ts:184` calls `PUT /api/polls/poll-1/share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/poll-1/share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2834f8346c47fe7b", "name": "Dangling fetch: PUT /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:196)", "shortDescription": {"text": "Dangling fetch: PUT /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:196)"}, "fullDescription": {"text": "`apps/api/src/__tests__/poll-share.test.ts:196` calls `PUT /api/polls/poll-1/share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/poll-1/share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-87a52793697e2bcb", "name": "Dangling fetch: GET /api/shared/polls/valid-token (apps/api/src/__tests__/poll-share.test.ts:219)", "shortDescription": {"text": "Dangling fetch: GET /api/shared/polls/valid-token (apps/api/src/__tests__/poll-share.test.ts:219)"}, "fullDescription": {"text": "`apps/api/src/__tests__/poll-share.test.ts:219` calls `GET /api/shared/polls/valid-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/polls/valid-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-c6bd33c08a174e75", "name": "Dangling fetch: GET /api/shared/polls/expired-token (apps/api/src/__tests__/poll-share.test.ts:244)", "shortDescription": {"text": "Dangling fetch: GET /api/shared/polls/expired-token (apps/api/src/__tests__/poll-share.test.ts:244)"}, "fullDescription": {"text": "`apps/api/src/__tests__/poll-share.test.ts:244` calls `GET /api/shared/polls/expired-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/polls/expired-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-5ed42ce0baedd8a3", "name": "Dangling fetch: GET /api/shared/polls/invalid-token (apps/api/src/__tests__/poll-share.test.ts:253)", "shortDescription": {"text": "Dangling fetch: GET /api/shared/polls/invalid-token (apps/api/src/__tests__/poll-share.test.ts:253)"}, "fullDescription": {"text": "`apps/api/src/__tests__/poll-share.test.ts:253` calls `GET /api/shared/polls/invalid-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/polls/invalid-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-04e6fc465283414d", "name": "Dangling fetch: GET /api/shared/polls/valid-token (apps/api/src/__tests__/poll-share.test.ts:275)", "shortDescription": {"text": "Dangling fetch: GET /api/shared/polls/valid-token (apps/api/src/__tests__/poll-share.test.ts:275)"}, "fullDescription": {"text": "`apps/api/src/__tests__/poll-share.test.ts:275` calls `GET /api/shared/polls/valid-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/polls/valid-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-91e5f7d2f5d33e3f", "name": "Dangling fetch: GET /api/shared/polls/valid-token (apps/api/src/__tests__/poll-share.test.ts:301)", "shortDescription": {"text": "Dangling fetch: GET /api/shared/polls/valid-token (apps/api/src/__tests__/poll-share.test.ts:301)"}, "fullDescription": {"text": "`apps/api/src/__tests__/poll-share.test.ts:301` calls `GET /api/shared/polls/valid-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/polls/valid-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-a27e795ba2482402", "name": "Dangling fetch: GET /api/shared/polls/valid-token (apps/api/src/__tests__/poll-share.test.ts:304)", "shortDescription": {"text": "Dangling fetch: GET /api/shared/polls/valid-token (apps/api/src/__tests__/poll-share.test.ts:304)"}, "fullDescription": {"text": "`apps/api/src/__tests__/poll-share.test.ts:304` calls `GET /api/shared/polls/valid-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/polls/valid-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-77ecf99f32efa226", "name": "Dangling fetch: POST /api/trips/${tripId}/schedules/batch-unassign (apps/api/src/__tests__/schedules.test.ts:476)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/schedules/batch-unassign (apps/api/src/__tests__/schedules.test.ts:476)"}, "fullDescription": {"text": "`apps/api/src/__tests__/schedules.test.ts:476` calls `POST /api/trips/${tripId}/schedules/batch-unassign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/schedules/batch-unassign`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4b491c61ebf14a25", "name": "Dangling fetch: POST /api/trips/${tripId}/schedules/batch-unassign (apps/api/src/__tests__/schedules.test.ts:489)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/schedules/batch-unassign (apps/api/src/__tests__/schedules.test.ts:489)"}, "fullDescription": {"text": "`apps/api/src/__tests__/schedules.test.ts:489` calls `POST /api/trips/${tripId}/schedules/batch-unassign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/schedules/batch-unassign`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ad0bdfd2ef77c7f", "name": "Dangling fetch: POST /api/trips/${tripId}/schedules/batch-unassign (apps/api/src/__tests__/schedules.test.ts:504)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/schedules/batch-unassign (apps/api/src/__tests__/schedules.test.ts:504)"}, "fullDescription": {"text": "`apps/api/src/__tests__/schedules.test.ts:504` calls `POST /api/trips/${tripId}/schedules/batch-unassign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/schedules/batch-unassign`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a7943dd7a336f69a", "name": "Dangling fetch: GET /protected (apps/api/src/__tests__/guest.test.ts:49)", "shortDescription": {"text": "Dangling fetch: GET /protected (apps/api/src/__tests__/guest.test.ts:49)"}, "fullDescription": {"text": "`apps/api/src/__tests__/guest.test.ts:49` calls `GET /protected` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/protected`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fe26feca0b5b72a2", "name": "Dangling fetch: GET /protected (apps/api/src/__tests__/guest.test.ts:67)", "shortDescription": {"text": "Dangling fetch: GET /protected (apps/api/src/__tests__/guest.test.ts:67)"}, "fullDescription": {"text": "`apps/api/src/__tests__/guest.test.ts:67` calls `GET /protected` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/protected`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fbb66ed9ac1036e3", "name": "Dangling fetch: GET /protected (apps/api/src/__tests__/guest.test.ts:92)", "shortDescription": {"text": "Dangling fetch: GET /protected (apps/api/src/__tests__/guest.test.ts:92)"}, "fullDescription": {"text": "`apps/api/src/__tests__/guest.test.ts:92` calls `GET /protected` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/protected`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-324d6c4dff1f867d", "name": "Dangling fetch: GET /protected (apps/api/src/__tests__/guest.test.ts:109)", "shortDescription": {"text": "Dangling fetch: GET /protected (apps/api/src/__tests__/guest.test.ts:109)"}, "fullDescription": {"text": "`apps/api/src/__tests__/guest.test.ts:109` calls `GET /protected` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/protected`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9ca28d00861dec9c", "name": "Dangling fetch: POST /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:56)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:56)"}, "fullDescription": {"text": "`apps/api/src/__tests__/share.test.ts:56` calls `POST /api/trips/trip-1/share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1/share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3383d86e61fe83d2", "name": "Dangling fetch: POST /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:67)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:67)"}, "fullDescription": {"text": "`apps/api/src/__tests__/share.test.ts:67` calls `POST /api/trips/trip-1/share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1/share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c913f8dc8d802426", "name": "Dangling fetch: POST /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:82)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:82)"}, "fullDescription": {"text": "`apps/api/src/__tests__/share.test.ts:82` calls `POST /api/trips/trip-1/share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1/share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-65eebdd65998dc35", "name": "Dangling fetch: POST /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:98)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:98)"}, "fullDescription": {"text": "`apps/api/src/__tests__/share.test.ts:98` calls `POST /api/trips/trip-1/share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1/share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-42c6873f27ed6eed", "name": "Dangling fetch: POST /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:127)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:127)"}, "fullDescription": {"text": "`apps/api/src/__tests__/share.test.ts:127` calls `POST /api/trips/trip-1/share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1/share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e441c9724fb2b33", "name": "Dangling fetch: POST /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:155)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:155)"}, "fullDescription": {"text": "`apps/api/src/__tests__/share.test.ts:155` calls `POST /api/trips/trip-1/share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1/share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f3951072b180606c", "name": "Dangling fetch: PUT /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:181)", "shortDescription": {"text": "Dangling fetch: PUT /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:181)"}, "fullDescription": {"text": "`apps/api/src/__tests__/share.test.ts:181` calls `PUT /api/trips/trip-1/share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1/share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e5a38ba27f5cd0b6", "name": "Dangling fetch: PUT /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:199)", "shortDescription": {"text": "Dangling fetch: PUT /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:199)"}, "fullDescription": {"text": "`apps/api/src/__tests__/share.test.ts:199` calls `PUT /api/trips/trip-1/share` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1/share`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-373cdac2be2d032d", "name": "Dangling fetch: GET /api/shared/invalid-token (apps/api/src/__tests__/share.test.ts:212)", "shortDescription": {"text": "Dangling fetch: GET /api/shared/invalid-token (apps/api/src/__tests__/share.test.ts:212)"}, "fullDescription": {"text": "`apps/api/src/__tests__/share.test.ts:212` calls `GET /api/shared/invalid-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/invalid-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-e0cf1719b67d5253", "name": "Dangling fetch: GET /api/shared/valid-token (apps/api/src/__tests__/share.test.ts:233)", "shortDescription": {"text": "Dangling fetch: GET /api/shared/valid-token (apps/api/src/__tests__/share.test.ts:233)"}, "fullDescription": {"text": "`apps/api/src/__tests__/share.test.ts:233` calls `GET /api/shared/valid-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/valid-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-d96fd17146262dd9", "name": "Dangling fetch: GET /api/shared/valid-token (apps/api/src/__tests__/share.test.ts:286)", "shortDescription": {"text": "Dangling fetch: GET /api/shared/valid-token (apps/api/src/__tests__/share.test.ts:286)"}, "fullDescription": {"text": "`apps/api/src/__tests__/share.test.ts:286` calls `GET /api/shared/valid-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/valid-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-680eb5a87d9ba565", "name": "Dangling fetch: GET /api/shared/exact-expiry-token (apps/api/src/__tests__/share.test.ts:311)", "shortDescription": {"text": "Dangling fetch: GET /api/shared/exact-expiry-token (apps/api/src/__tests__/share.test.ts:311)"}, "fullDescription": {"text": "`apps/api/src/__tests__/share.test.ts:311` calls `GET /api/shared/exact-expiry-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/exact-expiry-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-926424032bbac964", "name": "Dangling fetch: GET /api/shared/expired-token (apps/api/src/__tests__/share.test.ts:329)", "shortDescription": {"text": "Dangling fetch: GET /api/shared/expired-token (apps/api/src/__tests__/share.test.ts:329)"}, "fullDescription": {"text": "`apps/api/src/__tests__/share.test.ts:329` calls `GET /api/shared/expired-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/expired-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-75905e068de542c1", "name": "Dangling fetch: GET /api/shared/valid-token (apps/api/src/__tests__/share.test.ts:346)", "shortDescription": {"text": "Dangling fetch: GET /api/shared/valid-token (apps/api/src/__tests__/share.test.ts:346)"}, "fullDescription": {"text": "`apps/api/src/__tests__/share.test.ts:346` calls `GET /api/shared/valid-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/valid-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-239195c8615fa6d0", "name": "Dangling fetch: GET /api/shared/valid-token (apps/api/src/__tests__/share.test.ts:371)", "shortDescription": {"text": "Dangling fetch: GET /api/shared/valid-token (apps/api/src/__tests__/share.test.ts:371)"}, "fullDescription": {"text": "`apps/api/src/__tests__/share.test.ts:371` calls `GET /api/shared/valid-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/valid-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-df3ad4ba89cd7c3c", "name": "Dangling fetch: GET /api/shared/valid-token (apps/api/src/__tests__/share.test.ts:374)", "shortDescription": {"text": "Dangling fetch: GET /api/shared/valid-token (apps/api/src/__tests__/share.test.ts:374)"}, "fullDescription": {"text": "`apps/api/src/__tests__/share.test.ts:374` calls `GET /api/shared/valid-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/valid-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-2dd8383cc0187fcb", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:25)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:25)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:25` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-7ea2512e4b9e3ac7", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:39)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:39)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:39` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-f3ba5a35520933b7", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:40)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:40)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:40` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-08bcd6088fcbc551", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:41)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:41)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:41` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-7086b2c3df370202", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:53)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:53)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:53` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-030f36b214d2ea93", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:54)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:54)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:54` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-98ab104951013e17", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:67)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:67)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:67` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-3671b532ed0b494d", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:68)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:68)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:68` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-2f34113e72bcacfe", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:73)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:73)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:73` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-66a572658010eafe", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:82)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:82)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:82` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-9baf40e3d30079cc", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:85)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:85)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:85` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-4be2dab95c366869", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:97)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:97)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:97` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-52ca301f5913ba63", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:101)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:101)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:101` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-6394b9527a75ae84", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:114)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:114)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:114` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-c43b007c9cf40c6e", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:117)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:117)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:117` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-2c61467bca3b60ac", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:154)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:154)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:154` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-b5be3d6c72fefd8e", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:170)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:170)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:170` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-a51bcdcd4db15bfd", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:187)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:187)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:187` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-d68828782821a07b", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:188)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:188)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:188` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-ee26605b6911d6e3", "name": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:201)", "shortDescription": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:201)"}, "fullDescription": {"text": "`apps/api/src/__tests__/rate-limit.test.ts:201` calls `GET /test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-13ef8d786c1a2618", "name": "Dangling fetch: POST /api/quick-polls (apps/api/src/__tests__/quick-polls.test.ts:71)", "shortDescription": {"text": "Dangling fetch: POST /api/quick-polls (apps/api/src/__tests__/quick-polls.test.ts:71)"}, "fullDescription": {"text": "`apps/api/src/__tests__/quick-polls.test.ts:71` calls `POST /api/quick-polls` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/quick-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-0a235edb95693def", "name": "Dangling fetch: POST /api/quick-polls (apps/api/src/__tests__/quick-polls.test.ts:84)", "shortDescription": {"text": "Dangling fetch: POST /api/quick-polls (apps/api/src/__tests__/quick-polls.test.ts:84)"}, "fullDescription": {"text": "`apps/api/src/__tests__/quick-polls.test.ts:84` calls `POST /api/quick-polls` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/quick-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-80277e03b8ce1972", "name": "Dangling fetch: POST /api/quick-polls (apps/api/src/__tests__/quick-polls.test.ts:99)", "shortDescription": {"text": "Dangling fetch: POST /api/quick-polls (apps/api/src/__tests__/quick-polls.test.ts:99)"}, "fullDescription": {"text": "`apps/api/src/__tests__/quick-polls.test.ts:99` calls `POST /api/quick-polls` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/quick-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-e5b4dff6fc1979c2", "name": "Dangling fetch: GET /api/quick-polls (apps/api/src/__tests__/quick-polls.test.ts:127)", "shortDescription": {"text": "Dangling fetch: GET /api/quick-polls (apps/api/src/__tests__/quick-polls.test.ts:127)"}, "fullDescription": {"text": "`apps/api/src/__tests__/quick-polls.test.ts:127` calls `GET /api/quick-polls` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/quick-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-27c8c03d7c76f307", "name": "Dangling fetch: PATCH /api/quick-polls/poll-1 (apps/api/src/__tests__/quick-polls.test.ts:147)", "shortDescription": {"text": "Dangling fetch: PATCH /api/quick-polls/poll-1 (apps/api/src/__tests__/quick-polls.test.ts:147)"}, "fullDescription": {"text": "`apps/api/src/__tests__/quick-polls.test.ts:147` calls `PATCH /api/quick-polls/poll-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/quick-polls/poll-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7d143b058603ba9f", "name": "Dangling fetch: PATCH /api/quick-polls/poll-1 (apps/api/src/__tests__/quick-polls.test.ts:159)", "shortDescription": {"text": "Dangling fetch: PATCH /api/quick-polls/poll-1 (apps/api/src/__tests__/quick-polls.test.ts:159)"}, "fullDescription": {"text": "`apps/api/src/__tests__/quick-polls.test.ts:159` calls `PATCH /api/quick-polls/poll-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/quick-polls/poll-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f71e43ae8acfb9e0", "name": "Dangling fetch: DELETE /api/quick-polls/poll-1 (apps/api/src/__tests__/quick-polls.test.ts:178)", "shortDescription": {"text": "Dangling fetch: DELETE /api/quick-polls/poll-1 (apps/api/src/__tests__/quick-polls.test.ts:178)"}, "fullDescription": {"text": "`apps/api/src/__tests__/quick-polls.test.ts:178` calls `DELETE /api/quick-polls/poll-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/quick-polls/poll-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6b4ecaa7dfd12af3", "name": "Dangling fetch: GET /api/shared/quick-polls/abc123 (apps/api/src/__tests__/quick-polls.test.ts:211)", "shortDescription": {"text": "Dangling fetch: GET /api/shared/quick-polls/abc123 (apps/api/src/__tests__/quick-polls.test.ts:211)"}, "fullDescription": {"text": "`apps/api/src/__tests__/quick-polls.test.ts:211` calls `GET /api/shared/quick-polls/abc123` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/quick-polls/abc123`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-51234c39e3141692", "name": "Dangling fetch: GET /api/shared/quick-polls/expired (apps/api/src/__tests__/quick-polls.test.ts:228)", "shortDescription": {"text": "Dangling fetch: GET /api/shared/quick-polls/expired (apps/api/src/__tests__/quick-polls.test.ts:228)"}, "fullDescription": {"text": "`apps/api/src/__tests__/quick-polls.test.ts:228` calls `GET /api/shared/quick-polls/expired` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/quick-polls/expired`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b399b3b9c5bafdb9", "name": "Dangling fetch: GET /api/shared/quick-polls/nonexistent (apps/api/src/__tests__/quick-polls.test.ts:236)", "shortDescription": {"text": "Dangling fetch: GET /api/shared/quick-polls/nonexistent (apps/api/src/__tests__/quick-polls.test.ts:236)"}, "fullDescription": {"text": "`apps/api/src/__tests__/quick-polls.test.ts:236` calls `GET /api/shared/quick-polls/nonexistent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/quick-polls/nonexistent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a0c6a7311bd8caff", "name": "Dangling fetch: POST /api/shared/quick-polls/abc123/vote (apps/api/src/__tests__/quick-polls.test.ts:261)", "shortDescription": {"text": "Dangling fetch: POST /api/shared/quick-polls/abc123/vote (apps/api/src/__tests__/quick-polls.test.ts:261)"}, "fullDescription": {"text": "`apps/api/src/__tests__/quick-polls.test.ts:261` calls `POST /api/shared/quick-polls/abc123/vote` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/quick-polls/abc123/vote`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8ae3aac9d9e8f897", "name": "Dangling fetch: POST /api/shared/quick-polls/abc123/vote (apps/api/src/__tests__/quick-polls.test.ts:282)", "shortDescription": {"text": "Dangling fetch: POST /api/shared/quick-polls/abc123/vote (apps/api/src/__tests__/quick-polls.test.ts:282)"}, "fullDescription": {"text": "`apps/api/src/__tests__/quick-polls.test.ts:282` calls `POST /api/shared/quick-polls/abc123/vote` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/quick-polls/abc123/vote`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b86ad5d2760ca3a4", "name": "Dangling fetch: POST /api/shared/quick-polls/abc123/vote (apps/api/src/__tests__/quick-polls.test.ts:303)", "shortDescription": {"text": "Dangling fetch: POST /api/shared/quick-polls/abc123/vote (apps/api/src/__tests__/quick-polls.test.ts:303)"}, "fullDescription": {"text": "`apps/api/src/__tests__/quick-polls.test.ts:303` calls `POST /api/shared/quick-polls/abc123/vote` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/quick-polls/abc123/vote`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f3e670a8fa9e3695", "name": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-delete (apps/api/src/__tests__/bookmarks.test.ts:263)", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-delete (apps/api/src/__tests__/bookmarks.test.ts:263)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmarks.test.ts:263` calls `POST /api/bookmark-lists/${listId}/bookmarks/batch-delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/<p>/bookmarks/batch-delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d6a6f3b68a799881", "name": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-delete (apps/api/src/__tests__/bookmarks.test.ts:275)", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-delete (apps/api/src/__tests__/bookmarks.test.ts:275)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmarks.test.ts:275` calls `POST /api/bookmark-lists/${listId}/bookmarks/batch-delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/<p>/bookmarks/batch-delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2667d8792b23351e", "name": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-delete (apps/api/src/__tests__/bookmarks.test.ts:288)", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-delete (apps/api/src/__tests__/bookmarks.test.ts:288)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmarks.test.ts:288` calls `POST /api/bookmark-lists/${listId}/bookmarks/batch-delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/<p>/bookmarks/batch-delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fc44d2931b1830e7", "name": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-delete (apps/api/src/__tests__/bookmarks.test.ts:301)", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-delete (apps/api/src/__tests__/bookmarks.test.ts:301)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmarks.test.ts:301` calls `POST /api/bookmark-lists/${listId}/bookmarks/batch-delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/<p>/bookmarks/batch-delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1ab4dbea89a56253", "name": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-duplicate (apps/api/src/__tests__/bookmarks.test.ts:3", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-duplicate (apps/api/src/__tests__/bookmarks.test.ts:340)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmarks.test.ts:340` calls `POST /api/bookmark-lists/${listId}/bookmarks/batch-duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/<p>/bookmarks/batch-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-15dbb0e1f5c7135c", "name": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-duplicate (apps/api/src/__tests__/bookmarks.test.ts:3", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-duplicate (apps/api/src/__tests__/bookmarks.test.ts:361)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmarks.test.ts:361` calls `POST /api/bookmark-lists/${listId}/bookmarks/batch-duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/<p>/bookmarks/batch-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-f811d107c334fbf8", "name": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-duplicate (apps/api/src/__tests__/bookmarks.test.ts:3", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-duplicate (apps/api/src/__tests__/bookmarks.test.ts:374)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmarks.test.ts:374` calls `POST /api/bookmark-lists/${listId}/bookmarks/batch-duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/<p>/bookmarks/batch-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-11d094b56b9df3ea", "name": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-duplicate (apps/api/src/__tests__/bookmarks.test.ts:3", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-duplicate (apps/api/src/__tests__/bookmarks.test.ts:387)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmarks.test.ts:387` calls `POST /api/bookmark-lists/${listId}/bookmarks/batch-duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/<p>/bookmarks/batch-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-7f5e61b8924d2c20", "name": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/from-schedules (apps/api/src/__tests__/bookmarks.test.ts:42", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/from-schedules (apps/api/src/__tests__/bookmarks.test.ts:423)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmarks.test.ts:423` calls `POST /api/bookmark-lists/${listId}/bookmarks/from-schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/<p>/bookmarks/from-schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-813d50008b9f3670", "name": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/from-schedules (apps/api/src/__tests__/bookmarks.test.ts:43", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/from-schedules (apps/api/src/__tests__/bookmarks.test.ts:436)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmarks.test.ts:436` calls `POST /api/bookmark-lists/${listId}/bookmarks/from-schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/<p>/bookmarks/from-schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7a4bdddf45590f1c", "name": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/from-schedules (apps/api/src/__tests__/bookmarks.test.ts:44", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/from-schedules (apps/api/src/__tests__/bookmarks.test.ts:449)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmarks.test.ts:449` calls `POST /api/bookmark-lists/${listId}/bookmarks/from-schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/<p>/bookmarks/from-schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aedbbd0322f0e501", "name": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/from-schedules (apps/api/src/__tests__/bookmarks.test.ts:46", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/from-schedules (apps/api/src/__tests__/bookmarks.test.ts:462)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmarks.test.ts:462` calls `POST /api/bookmark-lists/${listId}/bookmarks/from-schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/<p>/bookmarks/from-schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d1d4ce49d336ac95", "name": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/from-schedules (apps/api/src/__tests__/bookmarks.test.ts:48", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/from-schedules (apps/api/src/__tests__/bookmarks.test.ts:482)"}, "fullDescription": {"text": "`apps/api/src/__tests__/bookmarks.test.ts:482` calls `POST /api/bookmark-lists/${listId}/bookmarks/from-schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/<p>/bookmarks/from-schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1257d99c25fbc4aa", "name": "Dangling fetch: GET /protected (apps/api/src/__tests__/middleware.test.ts:24)", "shortDescription": {"text": "Dangling fetch: GET /protected (apps/api/src/__tests__/middleware.test.ts:24)"}, "fullDescription": {"text": "`apps/api/src/__tests__/middleware.test.ts:24` calls `GET /protected` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/protected`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6f7d8447d7364175", "name": "Dangling fetch: GET /protected (apps/api/src/__tests__/middleware.test.ts:36)", "shortDescription": {"text": "Dangling fetch: GET /protected (apps/api/src/__tests__/middleware.test.ts:36)"}, "fullDescription": {"text": "`apps/api/src/__tests__/middleware.test.ts:36` calls `GET /protected` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/protected`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-78555abd66164718", "name": "Dangling fetch: GET /protected (apps/api/src/__tests__/middleware.test.ts:52)", "shortDescription": {"text": "Dangling fetch: GET /protected (apps/api/src/__tests__/middleware.test.ts:52)"}, "fullDescription": {"text": "`apps/api/src/__tests__/middleware.test.ts:52` calls `GET /protected` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/protected`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c636e80468e98477", "name": "Dangling fetch: GET /protected (apps/api/src/__tests__/middleware.test.ts:72)", "shortDescription": {"text": "Dangling fetch: GET /protected (apps/api/src/__tests__/middleware.test.ts:72)"}, "fullDescription": {"text": "`apps/api/src/__tests__/middleware.test.ts:72` calls `GET /protected` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/protected`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aac655a60b612f8a", "name": "Dangling fetch: PATCH /api/trips/${tripId}/candidates/s1 (apps/api/src/__tests__/candidates.test.ts:330)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/candidates/s1 (apps/api/src/__tests__/candidates.test.ts:330)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:330` calls `PATCH /api/trips/${tripId}/candidates/s1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/s1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a4004534e84eaf57", "name": "Dangling fetch: PATCH /api/trips/${tripId}/candidates/s1 (apps/api/src/__tests__/candidates.test.ts:345)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/candidates/s1 (apps/api/src/__tests__/candidates.test.ts:345)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:345` calls `PATCH /api/trips/${tripId}/candidates/s1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/s1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-778ca5e43d59859e", "name": "Dangling fetch: PATCH /api/trips/${tripId}/candidates/s1 (apps/api/src/__tests__/candidates.test.ts:366)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/candidates/s1 (apps/api/src/__tests__/candidates.test.ts:366)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:366` calls `PATCH /api/trips/${tripId}/candidates/s1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/s1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2cdaf138ae57f768", "name": "Dangling fetch: DELETE /api/trips/${tripId}/candidates/s1 (apps/api/src/__tests__/candidates.test.ts:387)", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/candidates/s1 (apps/api/src/__tests__/candidates.test.ts:387)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:387` calls `DELETE /api/trips/${tripId}/candidates/s1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/s1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1740be5573c226df", "name": "Dangling fetch: DELETE /api/trips/${tripId}/candidates/s1 (apps/api/src/__tests__/candidates.test.ts:400)", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/candidates/s1 (apps/api/src/__tests__/candidates.test.ts:400)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:400` calls `DELETE /api/trips/${tripId}/candidates/s1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/s1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e9d36f771eb70a7", "name": "Dangling fetch: PATCH /api/trips/${tripId}/candidates/reorder (apps/api/src/__tests__/candidates.test.ts:423)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/candidates/reorder (apps/api/src/__tests__/candidates.test.ts:423)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:423` calls `PATCH /api/trips/${tripId}/candidates/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/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-39b9f58eddcdfeb9", "name": "Dangling fetch: PATCH /api/trips/${tripId}/candidates/reorder (apps/api/src/__tests__/candidates.test.ts:436)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/candidates/reorder (apps/api/src/__tests__/candidates.test.ts:436)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:436` calls `PATCH /api/trips/${tripId}/candidates/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/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-8566d04e00ff9dd4", "name": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-assign (apps/api/src/__tests__/candidates.test.ts:473)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-assign (apps/api/src/__tests__/candidates.test.ts:473)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:473` calls `POST /api/trips/${tripId}/candidates/batch-assign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/batch-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-22bd3223aa44380b", "name": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-assign (apps/api/src/__tests__/candidates.test.ts:486)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-assign (apps/api/src/__tests__/candidates.test.ts:486)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:486` calls `POST /api/trips/${tripId}/candidates/batch-assign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/batch-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-51e60f33502474d5", "name": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-assign (apps/api/src/__tests__/candidates.test.ts:503)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-assign (apps/api/src/__tests__/candidates.test.ts:503)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:503` calls `POST /api/trips/${tripId}/candidates/batch-assign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/batch-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-64e2e8df23737027", "name": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-assign (apps/api/src/__tests__/candidates.test.ts:517)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-assign (apps/api/src/__tests__/candidates.test.ts:517)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:517` calls `POST /api/trips/${tripId}/candidates/batch-assign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/batch-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-b93af6a7315b84bb", "name": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-delete (apps/api/src/__tests__/candidates.test.ts:541)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-delete (apps/api/src/__tests__/candidates.test.ts:541)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:541` calls `POST /api/trips/${tripId}/candidates/batch-delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/batch-delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3fbd2c5489155690", "name": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-delete (apps/api/src/__tests__/candidates.test.ts:554)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-delete (apps/api/src/__tests__/candidates.test.ts:554)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:554` calls `POST /api/trips/${tripId}/candidates/batch-delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/batch-delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bf1025bb2e96921d", "name": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-delete (apps/api/src/__tests__/candidates.test.ts:567)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-delete (apps/api/src/__tests__/candidates.test.ts:567)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:567` calls `POST /api/trips/${tripId}/candidates/batch-delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/batch-delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a368922235bb65b7", "name": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-duplicate (apps/api/src/__tests__/candidates.test.ts:635)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-duplicate (apps/api/src/__tests__/candidates.test.ts:635)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:635` calls `POST /api/trips/${tripId}/candidates/batch-duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/batch-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-1328eb2c96ca6364", "name": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-duplicate (apps/api/src/__tests__/candidates.test.ts:648)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-duplicate (apps/api/src/__tests__/candidates.test.ts:648)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:648` calls `POST /api/trips/${tripId}/candidates/batch-duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/batch-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-6b9605f0da3c8a8c", "name": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-duplicate (apps/api/src/__tests__/candidates.test.ts:661)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-duplicate (apps/api/src/__tests__/candidates.test.ts:661)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:661` calls `POST /api/trips/${tripId}/candidates/batch-duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/batch-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-72b4ad5f4ecfbfa4", "name": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-duplicate (apps/api/src/__tests__/candidates.test.ts:678)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-duplicate (apps/api/src/__tests__/candidates.test.ts:678)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:678` calls `POST /api/trips/${tripId}/candidates/batch-duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/batch-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-f3ba8c7c26cf777d", "name": "Dangling fetch: POST /api/trips/${tripId}/candidates/from-bookmarks (apps/api/src/__tests__/candidates.test.ts:733)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/from-bookmarks (apps/api/src/__tests__/candidates.test.ts:733)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:733` calls `POST /api/trips/${tripId}/candidates/from-bookmarks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/from-bookmarks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd23382739702ed8", "name": "Dangling fetch: POST /api/trips/${tripId}/candidates/from-bookmarks (apps/api/src/__tests__/candidates.test.ts:746)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/from-bookmarks (apps/api/src/__tests__/candidates.test.ts:746)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:746` calls `POST /api/trips/${tripId}/candidates/from-bookmarks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/from-bookmarks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d9cfdc6dc243930a", "name": "Dangling fetch: POST /api/trips/${tripId}/candidates/from-bookmarks (apps/api/src/__tests__/candidates.test.ts:759)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/from-bookmarks (apps/api/src/__tests__/candidates.test.ts:759)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:759` calls `POST /api/trips/${tripId}/candidates/from-bookmarks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/from-bookmarks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8bf484a6c9f8b6e2", "name": "Dangling fetch: POST /api/trips/${tripId}/candidates/from-bookmarks (apps/api/src/__tests__/candidates.test.ts:786)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/from-bookmarks (apps/api/src/__tests__/candidates.test.ts:786)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:786` calls `POST /api/trips/${tripId}/candidates/from-bookmarks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/from-bookmarks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-eed34cebe9895b9c", "name": "Dangling fetch: POST /api/trips/${tripId}/candidates/${scheduleId}/assign (apps/api/src/__tests__/candidates.test.ts:823", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/${scheduleId}/assign (apps/api/src/__tests__/candidates.test.ts:823)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:823` calls `POST /api/trips/${tripId}/candidates/${scheduleId}/assign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/<p>/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-fb1b2c199e6e37d4", "name": "Dangling fetch: POST /api/trips/${tripId}/candidates/s1/assign (apps/api/src/__tests__/candidates.test.ts:836)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/s1/assign (apps/api/src/__tests__/candidates.test.ts:836)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:836` calls `POST /api/trips/${tripId}/candidates/s1/assign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/s1/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-4d14706759fed762", "name": "Dangling fetch: POST /api/trips/${tripId}/candidates/s1/assign (apps/api/src/__tests__/candidates.test.ts:849)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/s1/assign (apps/api/src/__tests__/candidates.test.ts:849)"}, "fullDescription": {"text": "`apps/api/src/__tests__/candidates.test.ts:849` calls `POST /api/trips/${tripId}/candidates/s1/assign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/s1/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-8ef0f45ec02f5ed8", "name": "Dangling fetch: POST /api/polls/poll-1/options (apps/api/src/__tests__/polls.test.ts:120)", "shortDescription": {"text": "Dangling fetch: POST /api/polls/poll-1/options (apps/api/src/__tests__/polls.test.ts:120)"}, "fullDescription": {"text": "`apps/api/src/__tests__/polls.test.ts:120` calls `POST /api/polls/poll-1/options` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/poll-1/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-d13ed7748820c0d2", "name": "Dangling fetch: POST /api/polls/poll-1/options (apps/api/src/__tests__/polls.test.ts:181)", "shortDescription": {"text": "Dangling fetch: POST /api/polls/poll-1/options (apps/api/src/__tests__/polls.test.ts:181)"}, "fullDescription": {"text": "`apps/api/src/__tests__/polls.test.ts:181` calls `POST /api/polls/poll-1/options` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/poll-1/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-23fc6dae5b2e8e2a", "name": "Dangling fetch: POST /api/polls/poll-1/participants (apps/api/src/__tests__/polls.test.ts:234)", "shortDescription": {"text": "Dangling fetch: POST /api/polls/poll-1/participants (apps/api/src/__tests__/polls.test.ts:234)"}, "fullDescription": {"text": "`apps/api/src/__tests__/polls.test.ts:234` calls `POST /api/polls/poll-1/participants` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/poll-1/participants`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d5068e288938650f", "name": "Dangling fetch: POST /api/polls/${pollId}/confirm (apps/api/src/__tests__/polls.test.ts:317)", "shortDescription": {"text": "Dangling fetch: POST /api/polls/${pollId}/confirm (apps/api/src/__tests__/polls.test.ts:317)"}, "fullDescription": {"text": "`apps/api/src/__tests__/polls.test.ts:317` calls `POST /api/polls/${pollId}/confirm` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/<p>/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-56b83bb467643f54", "name": "Dangling fetch: POST /api/polls/${pollId}/confirm (apps/api/src/__tests__/polls.test.ts:372)", "shortDescription": {"text": "Dangling fetch: POST /api/polls/${pollId}/confirm (apps/api/src/__tests__/polls.test.ts:372)"}, "fullDescription": {"text": "`apps/api/src/__tests__/polls.test.ts:372` calls `POST /api/polls/${pollId}/confirm` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/<p>/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-ec8c97f3db8bd341", "name": "Dangling fetch: GET /api/_docs (apps/api/src/__tests__/docs.test.ts:87)", "shortDescription": {"text": "Dangling fetch: GET /api/_docs (apps/api/src/__tests__/docs.test.ts:87)"}, "fullDescription": {"text": "`apps/api/src/__tests__/docs.test.ts:87` calls `GET /api/_docs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/_docs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-54173f7eff6fd8f4", "name": "Dangling fetch: GET /api/_docs (apps/api/src/__tests__/docs.test.ts:95)", "shortDescription": {"text": "Dangling fetch: GET /api/_docs (apps/api/src/__tests__/docs.test.ts:95)"}, "fullDescription": {"text": "`apps/api/src/__tests__/docs.test.ts:95` calls `GET /api/_docs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/_docs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f407875e9e686ccb", "name": "Dangling fetch: GET /api/_docs (apps/api/src/__tests__/docs.test.ts:103)", "shortDescription": {"text": "Dangling fetch: GET /api/_docs (apps/api/src/__tests__/docs.test.ts:103)"}, "fullDescription": {"text": "`apps/api/src/__tests__/docs.test.ts:103` calls `GET /api/_docs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/_docs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1c8a892519e25f34", "name": "Dangling fetch: GET /api/_docs (apps/api/src/__tests__/docs.test.ts:111)", "shortDescription": {"text": "Dangling fetch: GET /api/_docs (apps/api/src/__tests__/docs.test.ts:111)"}, "fullDescription": {"text": "`apps/api/src/__tests__/docs.test.ts:111` calls `GET /api/_docs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/_docs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-406f64a5b62f9d5b", "name": "Dangling fetch: GET /api/_docs (apps/api/src/__tests__/docs.test.ts:119)", "shortDescription": {"text": "Dangling fetch: GET /api/_docs (apps/api/src/__tests__/docs.test.ts:119)"}, "fullDescription": {"text": "`apps/api/src/__tests__/docs.test.ts:119` calls `GET /api/_docs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/_docs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-27914ad7ec83182e", "name": "Dangling fetch: GET /api/_docs/openapi.json (apps/api/src/__tests__/docs.test.ts:137)", "shortDescription": {"text": "Dangling fetch: GET /api/_docs/openapi.json (apps/api/src/__tests__/docs.test.ts:137)"}, "fullDescription": {"text": "`apps/api/src/__tests__/docs.test.ts:137` calls `GET /api/_docs/openapi.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/_docs/openapi.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d0f9817d9d9a99e4", "name": "Dangling fetch: GET /api/_docs/openapi.json (apps/api/src/__tests__/docs.test.ts:145)", "shortDescription": {"text": "Dangling fetch: GET /api/_docs/openapi.json (apps/api/src/__tests__/docs.test.ts:145)"}, "fullDescription": {"text": "`apps/api/src/__tests__/docs.test.ts:145` calls `GET /api/_docs/openapi.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/_docs/openapi.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c30a2c59ddf48327", "name": "Dangling fetch: GET /api/_docs/openapi.json (apps/api/src/__tests__/docs.test.ts:153)", "shortDescription": {"text": "Dangling fetch: GET /api/_docs/openapi.json (apps/api/src/__tests__/docs.test.ts:153)"}, "fullDescription": {"text": "`apps/api/src/__tests__/docs.test.ts:153` calls `GET /api/_docs/openapi.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/_docs/openapi.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9ab07f7f906d6baf", "name": "Dangling fetch: GET /api/_docs/openapi.json (apps/api/src/__tests__/docs.test.ts:161)", "shortDescription": {"text": "Dangling fetch: GET /api/_docs/openapi.json (apps/api/src/__tests__/docs.test.ts:161)"}, "fullDescription": {"text": "`apps/api/src/__tests__/docs.test.ts:161` calls `GET /api/_docs/openapi.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/_docs/openapi.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8279b87b5f137cd7", "name": "Dangling fetch: GET /api/_docs/openapi.json (apps/api/src/__tests__/docs.test.ts:171)", "shortDescription": {"text": "Dangling fetch: GET /api/_docs/openapi.json (apps/api/src/__tests__/docs.test.ts:171)"}, "fullDescription": {"text": "`apps/api/src/__tests__/docs.test.ts:171` calls `GET /api/_docs/openapi.json` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/_docs/openapi.json`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a87e17ee843c79ae", "name": "Dangling fetch: GET /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:595)", "shortDescription": {"text": "Dangling fetch: GET /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:595)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:595` calls `GET /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f27d7b00cdb23a14", "name": "Dangling fetch: GET /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:616)", "shortDescription": {"text": "Dangling fetch: GET /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:616)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:616` calls `GET /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-201e9cfc75d8e970", "name": "Dangling fetch: GET /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:684)", "shortDescription": {"text": "Dangling fetch: GET /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:684)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:684` calls `GET /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c7f9603a87aa2445", "name": "Dangling fetch: GET /api/trips/nonexistent (apps/api/src/__tests__/trips.test.ts:696)", "shortDescription": {"text": "Dangling fetch: GET /api/trips/nonexistent (apps/api/src/__tests__/trips.test.ts:696)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:696` calls `GET /api/trips/nonexistent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/nonexistent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3c500f50909875d9", "name": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:725)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:725)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:725` calls `PATCH /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-54a9c140374827be", "name": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:740)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:740)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:740` calls `PATCH /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e39f0c5ac5cf62e8", "name": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:764)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:764)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:764` calls `PATCH /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7b0e390d0dc885b3", "name": "Dangling fetch: PATCH /api/trips/nonexistent (apps/api/src/__tests__/trips.test.ts:786)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/nonexistent (apps/api/src/__tests__/trips.test.ts:786)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:786` calls `PATCH /api/trips/nonexistent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/nonexistent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-835842686acfc7be", "name": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:803)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:803)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:803` calls `PATCH /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8f295a9897a377d7", "name": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:814)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:814)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:814` calls `PATCH /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-560648895ec7b898", "name": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:840)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:840)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:840` calls `PATCH /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9e2e608954929362", "name": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:853)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:853)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:853` calls `PATCH /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fd6eff468bfbadd4", "name": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:903)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:903)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:903` calls `PATCH /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2ced0fcdd4065150", "name": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:914)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:914)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:914` calls `PATCH /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-500af50e1bd1d8ac", "name": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:932)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:932)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:932` calls `PATCH /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f33f7a589e114b20", "name": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:985)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:985)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:985` calls `PATCH /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-78e6662e490ff7a8", "name": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1036)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1036)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:1036` calls `PATCH /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e7c23f116b442272", "name": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1054)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1054)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:1054` calls `PATCH /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3536e6b8601e8dbe", "name": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1074)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1074)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:1074` calls `PATCH /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4f45babe5b4e3a23", "name": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1127)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1127)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:1127` calls `PATCH /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4909f690e7e3f4ba", "name": "Dangling fetch: POST /api/trips/trip-1/duplicate (apps/api/src/__tests__/trips.test.ts:1146)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/trip-1/duplicate (apps/api/src/__tests__/trips.test.ts:1146)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:1146` calls `POST /api/trips/trip-1/duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1/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-cf3162187bb33656", "name": "Dangling fetch: POST /api/trips/trip-1/duplicate (apps/api/src/__tests__/trips.test.ts:1233)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/trip-1/duplicate (apps/api/src/__tests__/trips.test.ts:1233)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:1233` calls `POST /api/trips/trip-1/duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1/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-e7321eb289e99415", "name": "Dangling fetch: DELETE /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1253)", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1253)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:1253` calls `DELETE /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ea512cebf0933c01", "name": "Dangling fetch: DELETE /api/trips/nonexistent (apps/api/src/__tests__/trips.test.ts:1266)", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/nonexistent (apps/api/src/__tests__/trips.test.ts:1266)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:1266` calls `DELETE /api/trips/nonexistent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/nonexistent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b585c3801d2d30dc", "name": "Dangling fetch: DELETE /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1281)", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1281)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:1281` calls `DELETE /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-882be352a2e38585", "name": "Dangling fetch: DELETE /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1298)", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1298)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:1298` calls `DELETE /api/trips/trip-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-20a2ce4aae04186b", "name": "Dangling fetch: POST /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1312)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1312)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:1312` calls `POST /api/trips/trip-1/cover-image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1/cover-image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-44b9cd6431ab28c9", "name": "Dangling fetch: POST /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1329)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1329)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:1329` calls `POST /api/trips/trip-1/cover-image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1/cover-image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e26089520c065346", "name": "Dangling fetch: POST /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1348)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1348)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:1348` calls `POST /api/trips/trip-1/cover-image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1/cover-image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-637ad87465aedc76", "name": "Dangling fetch: POST /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1363)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1363)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:1363` calls `POST /api/trips/trip-1/cover-image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1/cover-image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c5845d6e6ffd92cd", "name": "Dangling fetch: POST /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1394)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1394)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:1394` calls `POST /api/trips/trip-1/cover-image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1/cover-image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-62a8760d9c6db4bc", "name": "Dangling fetch: POST /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1429)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1429)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:1429` calls `POST /api/trips/trip-1/cover-image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1/cover-image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7a23ca5c8cfb320c", "name": "Dangling fetch: DELETE /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1451)", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1451)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:1451` calls `DELETE /api/trips/trip-1/cover-image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1/cover-image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dff676aba50dda17", "name": "Dangling fetch: DELETE /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1467)", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1467)"}, "fullDescription": {"text": "`apps/api/src/__tests__/trips.test.ts:1467` calls `DELETE /api/trips/trip-1/cover-image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/trip-1/cover-image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0a476b84f803b2ab", "name": "Dangling fetch: GET /trips/not-a-uuid (apps/api/src/__tests__/v1-routes.test.ts:350)", "shortDescription": {"text": "Dangling fetch: GET /trips/not-a-uuid (apps/api/src/__tests__/v1-routes.test.ts:350)"}, "fullDescription": {"text": "`apps/api/src/__tests__/v1-routes.test.ts:350` calls `GET /trips/not-a-uuid` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/not-a-uuid`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1af4a2cfca11c8aa", "name": "Dangling fetch: GET /bookmark-lists/not-a-uuid/bookmarks (apps/api/src/__tests__/v1-routes.test.ts:723)", "shortDescription": {"text": "Dangling fetch: GET /bookmark-lists/not-a-uuid/bookmarks (apps/api/src/__tests__/v1-routes.test.ts:723)"}, "fullDescription": {"text": "`apps/api/src/__tests__/v1-routes.test.ts:723` calls `GET /bookmark-lists/not-a-uuid/bookmarks` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/not-a-uuid/bookmarks`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd61a7ac3eb04ec4", "name": "Dangling fetch: GET /articles/not-a-uuid (apps/api/src/__tests__/v1-routes.test.ts:948)", "shortDescription": {"text": "Dangling fetch: GET /articles/not-a-uuid (apps/api/src/__tests__/v1-routes.test.ts:948)"}, "fullDescription": {"text": "`apps/api/src/__tests__/v1-routes.test.ts:948` calls `GET /articles/not-a-uuid` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/articles/not-a-uuid`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-359f9a0a85ab0ed8", "name": "Dangling fetch: GET /api/v1/trips (apps/api/src/__tests__/v1-mounting.test.ts:12)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/trips (apps/api/src/__tests__/v1-mounting.test.ts:12)"}, "fullDescription": {"text": "`apps/api/src/__tests__/v1-mounting.test.ts:12` calls `GET /api/v1/trips` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/trips`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-72b751a6e87778f6", "name": "Dangling fetch: GET /api/v1/trips (apps/api/src/__tests__/v1-mounting.test.ts:19)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/trips (apps/api/src/__tests__/v1-mounting.test.ts:19)"}, "fullDescription": {"text": "`apps/api/src/__tests__/v1-mounting.test.ts:19` calls `GET /api/v1/trips` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/trips`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ec492059734676fe", "name": "Dangling fetch: GET /api/v1/does-not-exist (apps/api/src/__tests__/v1-mounting.test.ts:25)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/does-not-exist (apps/api/src/__tests__/v1-mounting.test.ts:25)"}, "fullDescription": {"text": "`apps/api/src/__tests__/v1-mounting.test.ts:25` calls `GET /api/v1/does-not-exist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/does-not-exist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-28d8e97407148f9c", "name": "Dangling fetch: GET /api/v1/does-not-exist (apps/api/src/__tests__/v1-mounting.test.ts:32)", "shortDescription": {"text": "Dangling fetch: GET /api/v1/does-not-exist (apps/api/src/__tests__/v1-mounting.test.ts:32)"}, "fullDescription": {"text": "`apps/api/src/__tests__/v1-mounting.test.ts:32` calls `GET /api/v1/does-not-exist` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/v1/does-not-exist`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0aa92fd0a38951fb", "name": "Dangling fetch: POST /api/auth/sign-up/email (apps/api/src/__tests__/auth-signup-intercept.test.ts:39)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/sign-up/email (apps/api/src/__tests__/auth-signup-intercept.test.ts:39)"}, "fullDescription": {"text": "`apps/api/src/__tests__/auth-signup-intercept.test.ts:39` calls `POST /api/auth/sign-up/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/sign-up/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-d260037a737eb0b2", "name": "Dangling fetch: POST /api/auth/sign-up/email (apps/api/src/__tests__/auth-signup-intercept.test.ts:48)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/sign-up/email (apps/api/src/__tests__/auth-signup-intercept.test.ts:48)"}, "fullDescription": {"text": "`apps/api/src/__tests__/auth-signup-intercept.test.ts:48` calls `POST /api/auth/sign-up/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/sign-up/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-ec22a373e457549c", "name": "Dangling fetch: POST /api/auth/sign-in/anonymous (apps/api/src/__tests__/auth-signup-intercept.test.ts:59)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/sign-in/anonymous (apps/api/src/__tests__/auth-signup-intercept.test.ts:59)"}, "fullDescription": {"text": "`apps/api/src/__tests__/auth-signup-intercept.test.ts:59` calls `POST /api/auth/sign-in/anonymous` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/sign-in/anonymous`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-81f905a20464630e", "name": "Dangling fetch: POST /api/auth/sign-up/email (apps/api/src/__tests__/auth-signup-intercept.test.ts:69)", "shortDescription": {"text": "Dangling fetch: POST /api/auth/sign-up/email (apps/api/src/__tests__/auth-signup-intercept.test.ts:69)"}, "fullDescription": {"text": "`apps/api/src/__tests__/auth-signup-intercept.test.ts:69` calls `POST /api/auth/sign-up/email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/auth/sign-up/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-366d756272f7322e", "name": "Dangling fetch: POST /api/push-subscriptions (apps/api/src/__tests__/push-subscriptions.test.ts:63)", "shortDescription": {"text": "Dangling fetch: POST /api/push-subscriptions (apps/api/src/__tests__/push-subscriptions.test.ts:63)"}, "fullDescription": {"text": "`apps/api/src/__tests__/push-subscriptions.test.ts:63` calls `POST /api/push-subscriptions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/push-subscriptions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9c28a6800f476c4e", "name": "Dangling fetch: DELETE /api/push-subscriptions (apps/api/src/__tests__/push-subscriptions.test.ts:74)", "shortDescription": {"text": "Dangling fetch: DELETE /api/push-subscriptions (apps/api/src/__tests__/push-subscriptions.test.ts:74)"}, "fullDescription": {"text": "`apps/api/src/__tests__/push-subscriptions.test.ts:74` calls `DELETE /api/push-subscriptions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/push-subscriptions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-53092b3872662b0c", "name": "Dangling fetch: GET /api/push-subscriptions/preferences?endpoint=${endpoint} (apps/api/src/__tests__/push-subscriptions.", "shortDescription": {"text": "Dangling fetch: GET /api/push-subscriptions/preferences?endpoint=${endpoint} (apps/api/src/__tests__/push-subscriptions.test.ts:92)"}, "fullDescription": {"text": "`apps/api/src/__tests__/push-subscriptions.test.ts:92` calls `GET /api/push-subscriptions/preferences?endpoint=${endpoint}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/push-subscriptions/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-f89c921760424bd1", "name": "Dangling fetch: GET /api/push-subscriptions/preferences?endpoint=${endpoint} (apps/api/src/__tests__/push-subscriptions.", "shortDescription": {"text": "Dangling fetch: GET /api/push-subscriptions/preferences?endpoint=${endpoint} (apps/api/src/__tests__/push-subscriptions.test.ts:109)"}, "fullDescription": {"text": "`apps/api/src/__tests__/push-subscriptions.test.ts:109` calls `GET /api/push-subscriptions/preferences?endpoint=${endpoint}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/push-subscriptions/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-ecf2e096dca6a389", "name": "Dangling fetch: GET /api/push-subscriptions/preferences (apps/api/src/__tests__/push-subscriptions.test.ts:116)", "shortDescription": {"text": "Dangling fetch: GET /api/push-subscriptions/preferences (apps/api/src/__tests__/push-subscriptions.test.ts:116)"}, "fullDescription": {"text": "`apps/api/src/__tests__/push-subscriptions.test.ts:116` calls `GET /api/push-subscriptions/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/push-subscriptions/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-b179777d285bab45", "name": "Dangling fetch: PUT /api/push-subscriptions/preferences (apps/api/src/__tests__/push-subscriptions.test.ts:130)", "shortDescription": {"text": "Dangling fetch: PUT /api/push-subscriptions/preferences (apps/api/src/__tests__/push-subscriptions.test.ts:130)"}, "fullDescription": {"text": "`apps/api/src/__tests__/push-subscriptions.test.ts:130` calls `PUT /api/push-subscriptions/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/push-subscriptions/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-43346a78e12d3f3b", "name": "Dangling fetch: PUT /api/push-subscriptions/preferences (apps/api/src/__tests__/push-subscriptions.test.ts:150)", "shortDescription": {"text": "Dangling fetch: PUT /api/push-subscriptions/preferences (apps/api/src/__tests__/push-subscriptions.test.ts:150)"}, "fullDescription": {"text": "`apps/api/src/__tests__/push-subscriptions.test.ts:150` calls `PUT /api/push-subscriptions/preferences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/push-subscriptions/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-216ae5aebb93662b", "name": "Dangling fetch: PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:66)", "shortDescription": {"text": "Dangling fetch: PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:66)"}, "fullDescription": {"text": "`apps/api/src/__tests__/reactions.test.ts:66` calls `PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/<p>/reaction`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7c7daa53ba72a6d6", "name": "Dangling fetch: PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:76)", "shortDescription": {"text": "Dangling fetch: PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:76)"}, "fullDescription": {"text": "`apps/api/src/__tests__/reactions.test.ts:76` calls `PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/<p>/reaction`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4257f64ec05c0861", "name": "Dangling fetch: PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:87)", "shortDescription": {"text": "Dangling fetch: PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:87)"}, "fullDescription": {"text": "`apps/api/src/__tests__/reactions.test.ts:87` calls `PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/<p>/reaction`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a55b0915b8affe3e", "name": "Dangling fetch: PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:114", "shortDescription": {"text": "Dangling fetch: PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:114)"}, "fullDescription": {"text": "`apps/api/src/__tests__/reactions.test.ts:114` calls `PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/<p>/reaction`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2251c906b132da8d", "name": "Dangling fetch: PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:149", "shortDescription": {"text": "Dangling fetch: PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:149)"}, "fullDescription": {"text": "`apps/api/src/__tests__/reactions.test.ts:149` calls `PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/<p>/reaction`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d4358d34d96dd65f", "name": "Dangling fetch: DELETE /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:162)"}, "fullDescription": {"text": "`apps/api/src/__tests__/reactions.test.ts:162` calls `DELETE /api/trips/${tripId}/candidates/${scheduleId}/reaction` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/<p>/reaction`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0aa67be162ac5622", "name": "Dangling fetch: DELETE /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:171)"}, "fullDescription": {"text": "`apps/api/src/__tests__/reactions.test.ts:171` calls `DELETE /api/trips/${tripId}/candidates/${scheduleId}/reaction` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/<p>/reaction`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f83b6591f44e7c23", "name": "Dangling fetch: DELETE /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:193)"}, "fullDescription": {"text": "`apps/api/src/__tests__/reactions.test.ts:193` calls `DELETE /api/trips/${tripId}/candidates/${scheduleId}/reaction` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/<p>/reaction`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5c8c779cb8ce1f4d", "name": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:697)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:697)"}, "fullDescription": {"text": "`apps/api/src/__tests__/expenses.test.ts:697` calls `PATCH /api/trips/${tripId}/expenses/exp-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/expenses/exp-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-54db0fb5f49ed1ed", "name": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:735)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:735)"}, "fullDescription": {"text": "`apps/api/src/__tests__/expenses.test.ts:735` calls `PATCH /api/trips/${tripId}/expenses/exp-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/expenses/exp-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6a1c9e79d34e28b5", "name": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:758)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:758)"}, "fullDescription": {"text": "`apps/api/src/__tests__/expenses.test.ts:758` calls `PATCH /api/trips/${tripId}/expenses/exp-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/expenses/exp-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a7bb56fa023d0e1a", "name": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:777)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:777)"}, "fullDescription": {"text": "`apps/api/src/__tests__/expenses.test.ts:777` calls `PATCH /api/trips/${tripId}/expenses/exp-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/expenses/exp-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aab0b6e87e61b7f5", "name": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:811)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:811)"}, "fullDescription": {"text": "`apps/api/src/__tests__/expenses.test.ts:811` calls `PATCH /api/trips/${tripId}/expenses/exp-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/expenses/exp-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-45443e1c8e20c6da", "name": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:838)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:838)"}, "fullDescription": {"text": "`apps/api/src/__tests__/expenses.test.ts:838` calls `PATCH /api/trips/${tripId}/expenses/exp-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/expenses/exp-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ba25618d5b26158b", "name": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/non-existent (apps/api/src/__tests__/expenses.test.ts:850)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/non-existent (apps/api/src/__tests__/expenses.test.ts:850)"}, "fullDescription": {"text": "`apps/api/src/__tests__/expenses.test.ts:850` calls `PATCH /api/trips/${tripId}/expenses/non-existent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/expenses/non-existent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6aecdb49bb716db0", "name": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:901)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:901)"}, "fullDescription": {"text": "`apps/api/src/__tests__/expenses.test.ts:901` calls `PATCH /api/trips/${tripId}/expenses/exp-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/expenses/exp-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-04356cb79d5e36e9", "name": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:939)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:939)"}, "fullDescription": {"text": "`apps/api/src/__tests__/expenses.test.ts:939` calls `PATCH /api/trips/${tripId}/expenses/exp-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/expenses/exp-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-19408f21a8f7f6d3", "name": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:957)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:957)"}, "fullDescription": {"text": "`apps/api/src/__tests__/expenses.test.ts:957` calls `PATCH /api/trips/${tripId}/expenses/exp-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/expenses/exp-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ec26f6b7b066c867", "name": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:997)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:997)"}, "fullDescription": {"text": "`apps/api/src/__tests__/expenses.test.ts:997` calls `PATCH /api/trips/${tripId}/expenses/exp-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/expenses/exp-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-81c74376a0f803d1", "name": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:1027)", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:1027)"}, "fullDescription": {"text": "`apps/api/src/__tests__/expenses.test.ts:1027` calls `PATCH /api/trips/${tripId}/expenses/exp-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/expenses/exp-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-99bd350ff2143cda", "name": "Dangling fetch: DELETE /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:1057)", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:1057)"}, "fullDescription": {"text": "`apps/api/src/__tests__/expenses.test.ts:1057` calls `DELETE /api/trips/${tripId}/expenses/exp-1` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/expenses/exp-1`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e06335dc221f85d2", "name": "Dangling fetch: DELETE /api/trips/${tripId}/expenses/non-existent (apps/api/src/__tests__/expenses.test.ts:1075)", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/expenses/non-existent (apps/api/src/__tests__/expenses.test.ts:1075)"}, "fullDescription": {"text": "`apps/api/src/__tests__/expenses.test.ts:1075` calls `DELETE /api/trips/${tripId}/expenses/non-existent` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/expenses/non-existent`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d43850d1acc3eb1b", "name": "Dangling fetch: POST /api/trips/${tripId}/expenses/batch-delete (apps/api/src/__tests__/expenses.test.ts:1090)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/expenses/batch-delete (apps/api/src/__tests__/expenses.test.ts:1090)"}, "fullDescription": {"text": "`apps/api/src/__tests__/expenses.test.ts:1090` calls `POST /api/trips/${tripId}/expenses/batch-delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/expenses/batch-delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3db332a1084c6bb4", "name": "Dangling fetch: POST /api/trips/${tripId}/expenses/batch-delete (apps/api/src/__tests__/expenses.test.ts:1108)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/expenses/batch-delete (apps/api/src/__tests__/expenses.test.ts:1108)"}, "fullDescription": {"text": "`apps/api/src/__tests__/expenses.test.ts:1108` calls `POST /api/trips/${tripId}/expenses/batch-delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/expenses/batch-delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d2f2f21bd8905ee2", "name": "Dangling fetch: POST /api/trips/${tripId}/expenses/batch-delete (apps/api/src/__tests__/expenses.test.ts:1120)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/expenses/batch-delete (apps/api/src/__tests__/expenses.test.ts:1120)"}, "fullDescription": {"text": "`apps/api/src/__tests__/expenses.test.ts:1120` calls `POST /api/trips/${tripId}/expenses/batch-delete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/expenses/batch-delete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f9476bd315bafc27", "name": "Dangling fetch: GET /api/notifications (apps/api/src/__tests__/notifications-routes.test.ts:43)", "shortDescription": {"text": "Dangling fetch: GET /api/notifications (apps/api/src/__tests__/notifications-routes.test.ts:43)"}, "fullDescription": {"text": "`apps/api/src/__tests__/notifications-routes.test.ts:43` calls `GET /api/notifications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\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-3d471edd276c2033", "name": "Dangling fetch: GET /api/notifications (apps/api/src/__tests__/notifications-routes.test.ts:49)", "shortDescription": {"text": "Dangling fetch: GET /api/notifications (apps/api/src/__tests__/notifications-routes.test.ts:49)"}, "fullDescription": {"text": "`apps/api/src/__tests__/notifications-routes.test.ts:49` calls `GET /api/notifications` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\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-65014ebed1c4f5fc", "name": "Dangling fetch: PUT /api/notifications/read-all (apps/api/src/__tests__/notifications-routes.test.ts:58)", "shortDescription": {"text": "Dangling fetch: PUT /api/notifications/read-all (apps/api/src/__tests__/notifications-routes.test.ts:58)"}, "fullDescription": {"text": "`apps/api/src/__tests__/notifications-routes.test.ts:58` calls `PUT /api/notifications/read-all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/notifications/read-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-6608500b60d58def", "name": "Dangling fetch: GET /api/test (apps/api/src/__tests__/request-logger.test.ts:24)", "shortDescription": {"text": "Dangling fetch: GET /api/test (apps/api/src/__tests__/request-logger.test.ts:24)"}, "fullDescription": {"text": "`apps/api/src/__tests__/request-logger.test.ts:24` calls `GET /api/test` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-0e7f744e8ecc68d1", "name": "Dangling fetch: GET /api/bad (apps/api/src/__tests__/request-logger.test.ts:42)", "shortDescription": {"text": "Dangling fetch: GET /api/bad (apps/api/src/__tests__/request-logger.test.ts:42)"}, "fullDescription": {"text": "`apps/api/src/__tests__/request-logger.test.ts:42` calls `GET /api/bad` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bad`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d671aaccadcb6f36", "name": "Dangling fetch: GET /api/fail (apps/api/src/__tests__/request-logger.test.ts:54)", "shortDescription": {"text": "Dangling fetch: GET /api/fail (apps/api/src/__tests__/request-logger.test.ts:54)"}, "fullDescription": {"text": "`apps/api/src/__tests__/request-logger.test.ts:54` calls `GET /api/fail` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/fail`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f701117c2ed256e4", "name": "Dangling fetch: GET /api/check (apps/api/src/__tests__/request-logger.test.ts:82)", "shortDescription": {"text": "Dangling fetch: GET /api/check (apps/api/src/__tests__/request-logger.test.ts:82)"}, "fullDescription": {"text": "`apps/api/src/__tests__/request-logger.test.ts:82` calls `GET /api/check` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/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-afddd4fc2594b35f", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:76)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:76` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-164b5db3e9875d84", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:96)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:96` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4ef2b24e4352c24e", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:102)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:102` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-909e4a51237c357e", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:116)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:116` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d7695b7320c060be", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:121)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:121` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ad08c6f6c3bd5d4e", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:138)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:138` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fbde989aa71cede3", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:148)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:148` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-da44e8888b7c2dfd", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:159)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:159` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/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-16e89bb80d83c482", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:179)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:179` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f0bf6be5b3b0d0a4", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id} (apps/api/src/__", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id} (apps/api/src/__tests__/integration/schedules.integration.test.ts:189)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:189` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/<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-1e9fd802bbdc7dac", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:204)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:204` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6560002c020b7821", "name": "Dangling fetch: DELETE /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id} (apps/api/src/_", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id} (apps/api/src/__tests__/integration/schedules.integration.test.ts:214)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:214` calls `DELETE /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/<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-d2042bfcdef144b5", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:231)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:231` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-beaa52c4688efa72", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id} (apps/api/src/__", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id} (apps/api/src/__tests__/integration/schedules.integration.test.ts:242)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:242` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/<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-eafa09aa212e9283", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id} (apps/api/src/__", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id} (apps/api/src/__tests__/integration/schedules.integration.test.ts:256)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:256` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/<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-3a40b215c0c086a4", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:271)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:271` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a6acf583965b6821", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id} (apps/api/src/__", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id} (apps/api/src/__tests__/integration/schedules.integration.test.ts:281)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:281` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/<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-8d8ced0f7b8b5425", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:306)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:306` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26edacd8003746e0", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:318)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:318` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-edb859975fec7fd8", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:345)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:345` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0e3defe8c8e86add", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:622)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:622` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dcb3ce6be7515890", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:655)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:655` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/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-4c1e5ded4efa4a52", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:677)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:677` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/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-47fc5e9cb64ce0ae", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:694)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:694` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/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-3a361880eeea8450", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:715)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:715` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/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-a701c1cfc20faa0a", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:736)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:736` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/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-35e346d1f32ec0d9", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${hotel.id} (apps/api/src/__tes", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${hotel.id} (apps/api/src/__tests__/integration/schedules.integration.test.ts:748)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:748` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${hotel.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/<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-3533e27a17d3f57e", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:770)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:770` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/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-23eae00021c9bcfb", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:796)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:796` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/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-4482b7134bcdb988", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:808)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:808` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/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-0fcf6d134f05aec5", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:825)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:825` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/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-16a348d6aac4019b", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:847)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:847` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2e7bd260e4990f2f", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:873)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:873` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/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-27773d701bd25afa", "name": "Dangling fetch: DELETE /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${hotel.id} (apps/api/src/__te", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${hotel.id} (apps/api/src/__tests__/integration/schedules.integration.test.ts:888)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:888` calls `DELETE /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${hotel.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/<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-8b402db8926c1b16", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:910)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:910` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/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-f1ea707c293b5bd2", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:922)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:922` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/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-54c3a1acc7f2b3f4", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:947)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:947` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/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-00f795da30f7aff9", "name": "Dangling fetch: POST /api/trips/${tripId}/schedules/${target.id}/unassign (apps/api/src/__tests__/integration/schedules.", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/schedules/${target.id}/unassign (apps/api/src/__tests__/integration/schedules.integration.test.ts:959)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:959` calls `POST /api/trips/${tripId}/schedules/${target.id}/unassign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/schedules/<p>/unassign`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-03f1adaa083295d0", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:978)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:978` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules/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-c5b8195d6faf250c", "name": "Dangling fetch: POST /api/trips/${tripId}/schedules/batch-unassign (apps/api/src/__tests__/integration/schedules.integra", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/schedules/batch-unassign (apps/api/src/__tests__/integration/schedules.integration.test.ts:993)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/schedules.integration.test.ts:993` calls `POST /api/trips/${tripId}/schedules/batch-unassign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/schedules/batch-unassign`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cec09c81f0ec13a6", "name": "Dangling fetch: GET /api/polls (apps/api/src/__tests__/integration/polls.integration.test.ts:130)", "shortDescription": {"text": "Dangling fetch: GET /api/polls (apps/api/src/__tests__/integration/polls.integration.test.ts:130)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/polls.integration.test.ts:130` calls `GET /api/polls` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\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-10d2ecd8b723aa15", "name": "Dangling fetch: GET /api/polls (apps/api/src/__tests__/integration/polls.integration.test.ts:153)", "shortDescription": {"text": "Dangling fetch: GET /api/polls (apps/api/src/__tests__/integration/polls.integration.test.ts:153)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/polls.integration.test.ts:153` calls `GET /api/polls` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\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-34790d1431c2ffa2", "name": "Dangling fetch: GET /api/polls/${pollId} (apps/api/src/__tests__/integration/polls.integration.test.ts:163)", "shortDescription": {"text": "Dangling fetch: GET /api/polls/${pollId} (apps/api/src/__tests__/integration/polls.integration.test.ts:163)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/polls.integration.test.ts:163` calls `GET /api/polls/${pollId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/<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-2d7a4e6ca34a68e6", "name": "Dangling fetch: DELETE /api/polls/${pollId}/options/${middle.id} (apps/api/src/__tests__/integration/polls.integration.t", "shortDescription": {"text": "Dangling fetch: DELETE /api/polls/${pollId}/options/${middle.id} (apps/api/src/__tests__/integration/polls.integration.test.ts:183)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/polls.integration.test.ts:183` calls `DELETE /api/polls/${pollId}/options/${middle.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/<p>/options/<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-84a3a1734410640a", "name": "Dangling fetch: DELETE /api/polls/${pollId} (apps/api/src/__tests__/integration/polls.integration.test.ts:220)", "shortDescription": {"text": "Dangling fetch: DELETE /api/polls/${pollId} (apps/api/src/__tests__/integration/polls.integration.test.ts:220)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/polls.integration.test.ts:220` calls `DELETE /api/polls/${pollId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/<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-bfa0c51c2ac2d5b9", "name": "Dangling fetch: GET /api/polls/${pollId} (apps/api/src/__tests__/integration/polls.integration.test.ts:252)", "shortDescription": {"text": "Dangling fetch: GET /api/polls/${pollId} (apps/api/src/__tests__/integration/polls.integration.test.ts:252)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/polls.integration.test.ts:252` calls `GET /api/polls/${pollId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/<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-f08a231fc073020c", "name": "Dangling fetch: DELETE /api/polls/${pollId}/options/${optionId} (apps/api/src/__tests__/integration/polls.integration.te", "shortDescription": {"text": "Dangling fetch: DELETE /api/polls/${pollId}/options/${optionId} (apps/api/src/__tests__/integration/polls.integration.test.ts:275)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/polls.integration.test.ts:275` calls `DELETE /api/polls/${pollId}/options/${optionId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/<p>/options/<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-5099a6f35a1e4dd4", "name": "Dangling fetch: DELETE /api/polls/${pollId}/participants/${participant.id} (apps/api/src/__tests__/integration/polls.int", "shortDescription": {"text": "Dangling fetch: DELETE /api/polls/${pollId}/participants/${participant.id} (apps/api/src/__tests__/integration/polls.integration.test.ts:323)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/polls.integration.test.ts:323` calls `DELETE /api/polls/${pollId}/participants/${participant.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/<p>/participants/<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-cc00356ca92b1d4d", "name": "Dangling fetch: GET /api/shared/polls/invalid-token (apps/api/src/__tests__/integration/polls.integration.test.ts:447)", "shortDescription": {"text": "Dangling fetch: GET /api/shared/polls/invalid-token (apps/api/src/__tests__/integration/polls.integration.test.ts:447)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/polls.integration.test.ts:447` calls `GET /api/shared/polls/invalid-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/polls/invalid-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-aea3914f4036a7b4", "name": "Dangling fetch: DELETE /api/polls/${poll.id} (apps/api/src/__tests__/integration/polls.integration.test.ts:808)", "shortDescription": {"text": "Dangling fetch: DELETE /api/polls/${poll.id} (apps/api/src/__tests__/integration/polls.integration.test.ts:808)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/polls.integration.test.ts:808` calls `DELETE /api/polls/${poll.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/<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-035097fba3418806", "name": "Dangling fetch: DELETE /api/polls/${poll.id} (apps/api/src/__tests__/integration/polls.integration.test.ts:839)", "shortDescription": {"text": "Dangling fetch: DELETE /api/polls/${poll.id} (apps/api/src/__tests__/integration/polls.integration.test.ts:839)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/polls.integration.test.ts:839` calls `DELETE /api/polls/${poll.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/polls/<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-9e8796398d580245", "name": "Dangling fetch: GET /api/trips/${tripId}/days/${dayId}/patterns (apps/api/src/__tests__/integration/patterns.integration", "shortDescription": {"text": "Dangling fetch: GET /api/trips/${tripId}/days/${dayId}/patterns (apps/api/src/__tests__/integration/patterns.integration.test.ts:82)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/patterns.integration.test.ts:82` calls `GET /api/trips/${tripId}/days/${dayId}/patterns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/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-81004dd22ea76c34", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns (apps/api/src/__tests__/integration/patterns.integratio", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns (apps/api/src/__tests__/integration/patterns.integration.test.ts:91)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/patterns.integration.test.ts:91` calls `POST /api/trips/${tripId}/days/${dayId}/patterns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/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-5ea30eb4e6b9a0ee", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns (apps/api/src/__tests__/integration/patterns.integratio", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns (apps/api/src/__tests__/integration/patterns.integration.test.ts:104)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/patterns.integration.test.ts:104` calls `POST /api/trips/${tripId}/days/${dayId}/patterns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/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-de026cf9b6729b79", "name": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${created.id} (apps/api/src/__tests__/integration/patt", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${created.id} (apps/api/src/__tests__/integration/patterns.integration.test.ts:111)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/patterns.integration.test.ts:111` calls `PATCH /api/trips/${tripId}/days/${dayId}/patterns/${created.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<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-479c9eb03a667fa4", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns (apps/api/src/__tests__/integration/patterns.integratio", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns (apps/api/src/__tests__/integration/patterns.integration.test.ts:122)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/patterns.integration.test.ts:122` calls `POST /api/trips/${tripId}/days/${dayId}/patterns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/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-a05a273f2118d002", "name": "Dangling fetch: DELETE /api/trips/${tripId}/days/${dayId}/patterns/${created.id} (apps/api/src/__tests__/integration/pat", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/days/${dayId}/patterns/${created.id} (apps/api/src/__tests__/integration/patterns.integration.test.ts:129)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/patterns.integration.test.ts:129` calls `DELETE /api/trips/${tripId}/days/${dayId}/patterns/${created.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<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-d1d5b4984a338f08", "name": "Dangling fetch: GET /api/trips/${tripId}/days/${dayId}/patterns (apps/api/src/__tests__/integration/patterns.integration", "shortDescription": {"text": "Dangling fetch: GET /api/trips/${tripId}/days/${dayId}/patterns (apps/api/src/__tests__/integration/patterns.integration.test.ts:134)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/patterns.integration.test.ts:134` calls `GET /api/trips/${tripId}/days/${dayId}/patterns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/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-cb01a83d6df6b4f7", "name": "Dangling fetch: DELETE /api/trips/${tripId}/days/${dayId}/patterns/${defaultPatternId} (apps/api/src/__tests__/integrati", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/days/${dayId}/patterns/${defaultPatternId} (apps/api/src/__tests__/integration/patterns.integration.test.ts:140)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/patterns.integration.test.ts:140` calls `DELETE /api/trips/${tripId}/days/${dayId}/patterns/${defaultPatternId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<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-deb4df254c7b3005", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${defaultPatternId}/schedules (apps/api/src/__tests__/i", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${defaultPatternId}/schedules (apps/api/src/__tests__/integration/patterns.integration.test.ts:148)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/patterns.integration.test.ts:148` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${defaultPatternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5cd7510897b53eb9", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${defaultPatternId}/duplicate (apps/api/src/__tests__/i", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${defaultPatternId}/duplicate (apps/api/src/__tests__/integration/patterns.integration.test.ts:154)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/patterns.integration.test.ts:154` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${defaultPatternId}/duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<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-30c25a2fa04c59f6", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns (apps/api/src/__tests__/integration/patterns.integratio", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns (apps/api/src/__tests__/integration/patterns.integration.test.ts:176)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/patterns.integration.test.ts:176` calls `POST /api/trips/${tripId}/days/${dayId}/patterns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/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-1074a11e9870dafa", "name": "Dangling fetch: POST /api/bookmark-lists/${a.id}/duplicate (apps/api/src/__tests__/integration/bookmarks.integration.tes", "shortDescription": {"text": "Dangling fetch: POST /api/bookmark-lists/${a.id}/duplicate (apps/api/src/__tests__/integration/bookmarks.integration.test.ts:135)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/bookmarks.integration.test.ts:135` calls `POST /api/bookmark-lists/${a.id}/duplicate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/bookmark-lists/<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-641db2c49c77b870", "name": "Dangling fetch: POST /api/trips/${trip.id}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integra", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${trip.id}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/trips.integration.test.ts:153)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/trips.integration.test.ts:153` calls `POST /api/trips/${trip.id}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-301b694121a48d77", "name": "Dangling fetch: PATCH /api/trips/${tripId}/candidates/reorder (apps/api/src/__tests__/integration/candidates.integration", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/candidates/reorder (apps/api/src/__tests__/integration/candidates.integration.test.ts:179)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/candidates.integration.test.ts:179` calls `PATCH /api/trips/${tripId}/candidates/reorder` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/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-8588010fdbc37769", "name": "Dangling fetch: POST /api/trips/${tripId}/candidates/${candidate.id}/assign (apps/api/src/__tests__/integration/candidat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/${candidate.id}/assign (apps/api/src/__tests__/integration/candidates.integration.test.ts:200)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/candidates.integration.test.ts:200` calls `POST /api/trips/${tripId}/candidates/${candidate.id}/assign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/candidates/<p>/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-ec315721690382ed", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/candidates.integration.test.ts:217)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/candidates.integration.test.ts:217` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-403e2c65e7ba0816", "name": "Dangling fetch: POST /api/trips/${tripId}/schedules/${schedule.id}/unassign (apps/api/src/__tests__/integration/candidat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/schedules/${schedule.id}/unassign (apps/api/src/__tests__/integration/candidates.integration.test.ts:229)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/candidates.integration.test.ts:229` calls `POST /api/trips/${tripId}/schedules/${schedule.id}/unassign` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/schedules/<p>/unassign`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a888f349cf6bec24", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/candidates.integration.test.ts:297)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/candidates.integration.test.ts:297` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-100935ed2f04fc97", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/candidates.integration.test.ts:330)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/candidates.integration.test.ts:330` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7ba4382b0eaef9a0", "name": "Dangling fetch: GET /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:67)", "shortDescription": {"text": "Dangling fetch: GET /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:67)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/members.integration.test.ts:67` calls `GET /api/trips/${tripId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<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-bda44067a85ea279", "name": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:78)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:78)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/members.integration.test.ts:78` calls `POST /api/trips/${tripId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<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-34c955870d9ad4f7", "name": "Dangling fetch: GET /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:85)", "shortDescription": {"text": "Dangling fetch: GET /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:85)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/members.integration.test.ts:85` calls `GET /api/trips/${tripId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<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-c4a3de71f2b0d4c2", "name": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:96)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:96)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/members.integration.test.ts:96` calls `POST /api/trips/${tripId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<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-b331fe0b718c0edd", "name": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:102)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:102)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/members.integration.test.ts:102` calls `POST /api/trips/${tripId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<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-6f1246da2fcef509", "name": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:113)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:113)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/members.integration.test.ts:113` calls `POST /api/trips/${tripId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<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-e073202ebd567544", "name": "Dangling fetch: PATCH /api/trips/${tripId}/members/${editor.id} (apps/api/src/__tests__/integration/members.integration.", "shortDescription": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/members/${editor.id} (apps/api/src/__tests__/integration/members.integration.test.ts:119)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/members.integration.test.ts:119` calls `PATCH /api/trips/${tripId}/members/${editor.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/members/<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-e5ae240b737d0730", "name": "Dangling fetch: GET /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:126)", "shortDescription": {"text": "Dangling fetch: GET /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:126)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/members.integration.test.ts:126` calls `GET /api/trips/${tripId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<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-a4bb8b776a98d442", "name": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:135)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:135)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/members.integration.test.ts:135` calls `POST /api/trips/${tripId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<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-af00e0bc480761af", "name": "Dangling fetch: DELETE /api/trips/${tripId}/members/${editor.id} (apps/api/src/__tests__/integration/members.integration", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/members/${editor.id} (apps/api/src/__tests__/integration/members.integration.test.ts:141)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/members.integration.test.ts:141` calls `DELETE /api/trips/${tripId}/members/${editor.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/members/<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-46af8d94041e49d4", "name": "Dangling fetch: GET /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:146)", "shortDescription": {"text": "Dangling fetch: GET /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:146)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/members.integration.test.ts:146` calls `GET /api/trips/${tripId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<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-44a521269f0e1b4a", "name": "Dangling fetch: DELETE /api/trips/${tripId}/members/${owner.id} (apps/api/src/__tests__/integration/members.integration.", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/members/${owner.id} (apps/api/src/__tests__/integration/members.integration.test.ts:152)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/members.integration.test.ts:152` calls `DELETE /api/trips/${tripId}/members/${owner.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/members/<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-331e69674173aab4", "name": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:161)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:161)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/members.integration.test.ts:161` calls `POST /api/trips/${tripId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<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-b752f5e538b785d6", "name": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:174)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:174)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/members.integration.test.ts:174` calls `POST /api/trips/${tripId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<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-686e0258eda74f7e", "name": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:185)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:185)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/members.integration.test.ts:185` calls `POST /api/trips/${tripId}/members` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<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-0a2fc0be40b8663c", "name": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integrat", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/share.integration.test.ts:69)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/share.integration.test.ts:69` calls `POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/trips/<p>/days/<p>/patterns/<p>/schedules`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-95036d1934e59872", "name": "Dangling fetch: GET /api/shared/nonexistent-token (apps/api/src/__tests__/integration/share.integration.test.ts:130)", "shortDescription": {"text": "Dangling fetch: GET /api/shared/nonexistent-token (apps/api/src/__tests__/integration/share.integration.test.ts:130)"}, "fullDescription": {"text": "`apps/api/src/__tests__/integration/share.integration.test.ts:130` calls `GET /api/shared/nonexistent-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/shared/nonexistent-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-36185594f5800d43", "name": "Dangling fetch: GET https://api.frankfurter.dev/v1/latest?from=${encodeURIComponent(from)}&to=${encodeURIComponent(to)} ", "shortDescription": {"text": "Dangling fetch: GET https://api.frankfurter.dev/v1/latest?from=${encodeURIComponent(from)}&to=${encodeURIComponent(to)} (apps/api/src/lib/exchange-rate.ts:14)"}, "fullDescription": {"text": "`apps/api/src/lib/exchange-rate.ts:14` calls `GET https://api.frankfurter.dev/v1/latest?from=${encodeURIComponent(from)}&to=${encodeURIComponent(to)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.frankfurter.dev/v1/latest`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b53f4c71ebbc8f5d", "name": "Dangling fetch: GET /x (apps/api/src/lib/external-api/audit-log.test.ts:19)", "shortDescription": {"text": "Dangling fetch: GET /x (apps/api/src/lib/external-api/audit-log.test.ts:19)"}, "fullDescription": {"text": "`apps/api/src/lib/external-api/audit-log.test.ts:19` calls `GET /x` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/x`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-82edb75051721d7f", "name": "Dangling fetch: GET /x (apps/api/src/lib/external-api/audit-log.test.ts:33)", "shortDescription": {"text": "Dangling fetch: GET /x (apps/api/src/lib/external-api/audit-log.test.ts:33)"}, "fullDescription": {"text": "`apps/api/src/lib/external-api/audit-log.test.ts:33` calls `GET /x` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/x`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bad454412975eca4", "name": "Dangling fetch: GET /x (apps/api/src/lib/external-api/audit-log.test.ts:53)", "shortDescription": {"text": "Dangling fetch: GET /x (apps/api/src/lib/external-api/audit-log.test.ts:53)"}, "fullDescription": {"text": "`apps/api/src/lib/external-api/audit-log.test.ts:53` calls `GET /x` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/x`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c8aae5f329f38f66", "name": "Dangling fetch: POST https://routes.googleapis.com/directions/v2:computeRoutes (apps/api/src/routes/directions.ts:92)", "shortDescription": {"text": "Dangling fetch: POST https://routes.googleapis.com/directions/v2:computeRoutes (apps/api/src/routes/directions.ts:92)"}, "fullDescription": {"text": "`apps/api/src/routes/directions.ts:92` calls `POST https://routes.googleapis.com/directions/v2:computeRoutes` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/routes.googleapis.com/directions/v2/<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-c90830e9b0c06e78", "name": "Dangling fetch: POST https://api.github.com/repos/${repo}/issues (apps/api/src/routes/feedback.ts:51)", "shortDescription": {"text": "Dangling fetch: POST https://api.github.com/repos/${repo}/issues (apps/api/src/routes/feedback.ts:51)"}, "fullDescription": {"text": "`apps/api/src/routes/feedback.ts:51` calls `POST https://api.github.com/repos/${repo}/issues` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.github.com/repos/<p>/issues`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dbaa14432647d2de", "name": "Dangling fetch: PATCH https://api.vercel.com/v1/edge-config/${configId}/items (apps/api/src/routes/admin.ts:333)", "shortDescription": {"text": "Dangling fetch: PATCH https://api.vercel.com/v1/edge-config/${configId}/items (apps/api/src/routes/admin.ts:333)"}, "fullDescription": {"text": "`apps/api/src/routes/admin.ts:333` calls `PATCH https://api.vercel.com/v1/edge-config/${configId}/items` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.vercel.com/v1/edge-config/<p>/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-2e0934dd36c4b7ff", "name": "Dangling fetch: POST /api/trips/${tripId}/cover-image (apps/web/lib/hooks/use-cover-image-upload.ts:38)", "shortDescription": {"text": "Dangling fetch: POST /api/trips/${tripId}/cover-image (apps/web/lib/hooks/use-cover-image-upload.ts:38)"}, "fullDescription": {"text": "`apps/web/lib/hooks/use-cover-image-upload.ts:38` calls `POST /api/trips/${tripId}/cover-image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/trips/<p>/cover-image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-306338348530dbd8", "name": "Dangling fetch: DELETE /api/trips/${tripId}/cover-image (apps/web/lib/hooks/use-cover-image-upload.ts:64)", "shortDescription": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/cover-image (apps/web/lib/hooks/use-cover-image-upload.ts:64)"}, "fullDescription": {"text": "`apps/web/lib/hooks/use-cover-image-upload.ts:64` calls `DELETE /api/trips/${tripId}/cover-image` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/trips/<p>/cover-image`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7a009b1a56794f45", "name": "Unused endpoint: POST /", "shortDescription": {"text": "Unused endpoint: POST /"}, "fullDescription": {"text": "`apps/api/src/routes/quick-polls.ts` declares `POST /` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ca5756175765b49d", "name": "Unused endpoint: GET /:id", "shortDescription": {"text": "Unused endpoint: GET /:id"}, "fullDescription": {"text": "`apps/api/src/routes/quick-polls.ts` declares `GET /:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5fbc954f63526821", "name": "Unused endpoint: PATCH /:id", "shortDescription": {"text": "Unused endpoint: PATCH /:id"}, "fullDescription": {"text": "`apps/api/src/routes/quick-polls.ts` declares `PATCH /:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7a61c112b611f4bb", "name": "Unused endpoint: DELETE /:id", "shortDescription": {"text": "Unused endpoint: DELETE /:id"}, "fullDescription": {"text": "`apps/api/src/routes/quick-polls.ts` declares `DELETE /:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-48a7839bfc82d2b3", "name": "Unused endpoint: GET /api/shared/quick-polls/:shareToken", "shortDescription": {"text": "Unused endpoint: GET /api/shared/quick-polls/:shareToken"}, "fullDescription": {"text": "`apps/api/src/routes/quick-poll-share.ts` declares `GET /api/shared/quick-polls/:shareToken` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9fc415a2ce5f8d61", "name": "Unused endpoint: POST /api/shared/quick-polls/:shareToken/vote", "shortDescription": {"text": "Unused endpoint: POST /api/shared/quick-polls/:shareToken/vote"}, "fullDescription": {"text": "`apps/api/src/routes/quick-poll-share.ts` declares `POST /api/shared/quick-polls/:shareToken/vote` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b162789903bb095a", "name": "Unused endpoint: DELETE /api/shared/quick-polls/:shareToken/vote", "shortDescription": {"text": "Unused endpoint: DELETE /api/shared/quick-polls/:shareToken/vote"}, "fullDescription": {"text": "`apps/api/src/routes/quick-poll-share.ts` declares `DELETE /api/shared/quick-polls/:shareToken/vote` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e9371f01af18504c", "name": "Unused endpoint: USE /api/auth/sign-in/anonymous", "shortDescription": {"text": "Unused endpoint: USE /api/auth/sign-in/anonymous"}, "fullDescription": {"text": "`apps/api/src/routes/auth.ts` declares `USE /api/auth/sign-in/anonymous` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-051a98dcfcafed15", "name": "Unused endpoint: USE /api/auth/sign-up/*", "shortDescription": {"text": "Unused endpoint: USE /api/auth/sign-up/*"}, "fullDescription": {"text": "`apps/api/src/routes/auth.ts` declares `USE /api/auth/sign-up/*` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1d080cd58ccbcb36", "name": "Unused endpoint: USE /api/auth/change-password", "shortDescription": {"text": "Unused endpoint: USE /api/auth/change-password"}, "fullDescription": {"text": "`apps/api/src/routes/auth.ts` declares `USE /api/auth/change-password` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-503e5bab75b8662d", "name": "Unused endpoint: USE /api/auth/sign-in/*", "shortDescription": {"text": "Unused endpoint: USE /api/auth/sign-in/*"}, "fullDescription": {"text": "`apps/api/src/routes/auth.ts` declares `USE /api/auth/sign-in/*` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7d27a6f971a4463f", "name": "Unused endpoint: USE /api/auth/*", "shortDescription": {"text": "Unused endpoint: USE /api/auth/*"}, "fullDescription": {"text": "`apps/api/src/routes/auth.ts` declares `USE /api/auth/*` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4170ca2e6bef3e9e", "name": "Unused endpoint: POST /api/auth/sign-up/*", "shortDescription": {"text": "Unused endpoint: POST /api/auth/sign-up/*"}, "fullDescription": {"text": "`apps/api/src/routes/auth.ts` declares `POST /api/auth/sign-up/*` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2bc61a2eb1cd4064", "name": "Unused endpoint: POST /:id/duplicate", "shortDescription": {"text": "Unused endpoint: POST /:id/duplicate"}, "fullDescription": {"text": "`apps/api/src/routes/trips.ts` declares `POST /:id/duplicate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-17e7b55be061ba07", "name": "Unused endpoint: POST /:id/cover-image", "shortDescription": {"text": "Unused endpoint: POST /:id/cover-image"}, "fullDescription": {"text": "`apps/api/src/routes/trips.ts` declares `POST /:id/cover-image` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c5b220bb35291e9a", "name": "Unused endpoint: DELETE /:id/cover-image", "shortDescription": {"text": "Unused endpoint: DELETE /:id/cover-image"}, "fullDescription": {"text": "`apps/api/src/routes/trips.ts` declares `DELETE /:id/cover-image` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-968d4311ce08cfe9", "name": "Unused endpoint: GET /openapi.json", "shortDescription": {"text": "Unused endpoint: GET /openapi.json"}, "fullDescription": {"text": "`apps/api/src/routes/docs.ts` declares `GET /openapi.json` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-518b51cf24b852c3", "name": "Unused endpoint: GET /:tripId/members", "shortDescription": {"text": "Unused endpoint: GET /:tripId/members"}, "fullDescription": {"text": "`apps/api/src/routes/members.ts` declares `GET /:tripId/members` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e69594b080176710", "name": "Unused endpoint: POST /:tripId/members", "shortDescription": {"text": "Unused endpoint: POST /:tripId/members"}, "fullDescription": {"text": "`apps/api/src/routes/members.ts` declares `POST /:tripId/members` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0e0d2cc58f3ff3c6", "name": "Unused endpoint: PATCH /:tripId/members/:userId", "shortDescription": {"text": "Unused endpoint: PATCH /:tripId/members/:userId"}, "fullDescription": {"text": "`apps/api/src/routes/members.ts` declares `PATCH /:tripId/members/:userId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-42cd8dde33aa4e7a", "name": "Unused endpoint: DELETE /:tripId/members/:userId", "shortDescription": {"text": "Unused endpoint: DELETE /:tripId/members/:userId"}, "fullDescription": {"text": "`apps/api/src/routes/members.ts` declares `DELETE /:tripId/members/:userId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c69d3da79044c7ea", "name": "Unused endpoint: GET /:tripId/activity-logs", "shortDescription": {"text": "Unused endpoint: GET /:tripId/activity-logs"}, "fullDescription": {"text": "`apps/api/src/routes/activity-logs.ts` declares `GET /:tripId/activity-logs` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e2a4a0defd4898f4", "name": "Unused endpoint: PUT /:tripId/candidates/:scheduleId/reaction", "shortDescription": {"text": "Unused endpoint: PUT /:tripId/candidates/:scheduleId/reaction"}, "fullDescription": {"text": "`apps/api/src/routes/reactions.ts` declares `PUT /:tripId/candidates/:scheduleId/reaction` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ae9424bad4ef31c0", "name": "Unused endpoint: DELETE /:tripId/candidates/:scheduleId/reaction", "shortDescription": {"text": "Unused endpoint: DELETE /:tripId/candidates/:scheduleId/reaction"}, "fullDescription": {"text": "`apps/api/src/routes/reactions.ts` declares `DELETE /:tripId/candidates/:scheduleId/reaction` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-996f5515a35cfa45", "name": "Unused endpoint: PATCH /:tripId/days/:dayId", "shortDescription": {"text": "Unused endpoint: PATCH /:tripId/days/:dayId"}, "fullDescription": {"text": "`apps/api/src/routes/trip-days.ts` declares `PATCH /:tripId/days/:dayId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0535da675f219221", "name": "Unused endpoint: PUT /read-all", "shortDescription": {"text": "Unused endpoint: PUT /read-all"}, "fullDescription": {"text": "`apps/api/src/routes/notifications.ts` declares `PUT /read-all` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-abc47697a68f0331", "name": "Unused endpoint: PUT /:id/read", "shortDescription": {"text": "Unused endpoint: PUT /:id/read"}, "fullDescription": {"text": "`apps/api/src/routes/notifications.ts` declares `PUT /:id/read` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8127360bd09cbdfa", "name": "Unused endpoint: PATCH /:groupId", "shortDescription": {"text": "Unused endpoint: PATCH /:groupId"}, "fullDescription": {"text": "`apps/api/src/routes/groups.ts` declares `PATCH /:groupId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9db7d0ffea6b5791", "name": "Unused endpoint: DELETE /:groupId", "shortDescription": {"text": "Unused endpoint: DELETE /:groupId"}, "fullDescription": {"text": "`apps/api/src/routes/groups.ts` declares `DELETE /:groupId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fa09d657191279c0", "name": "Unused endpoint: GET /:groupId/members", "shortDescription": {"text": "Unused endpoint: GET /:groupId/members"}, "fullDescription": {"text": "`apps/api/src/routes/groups.ts` declares `GET /:groupId/members` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2838bdd9fffe27a1", "name": "Unused endpoint: POST /:groupId/members", "shortDescription": {"text": "Unused endpoint: POST /:groupId/members"}, "fullDescription": {"text": "`apps/api/src/routes/groups.ts` declares `POST /:groupId/members` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4c23c7e41ff3a039", "name": "Unused endpoint: POST /:groupId/members/bulk", "shortDescription": {"text": "Unused endpoint: POST /:groupId/members/bulk"}, "fullDescription": {"text": "`apps/api/src/routes/groups.ts` declares `POST /:groupId/members/bulk` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-84e3210641a3f764", "name": "Unused endpoint: DELETE /:groupId/members/:userId", "shortDescription": {"text": "Unused endpoint: DELETE /:groupId/members/:userId"}, "fullDescription": {"text": "`apps/api/src/routes/groups.ts` declares `DELETE /:groupId/members/:userId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-847d8fa9572c79fc", "name": "Unused endpoint: GET /:userId/bookmark-lists", "shortDescription": {"text": "Unused endpoint: GET /:userId/bookmark-lists"}, "fullDescription": {"text": "`apps/api/src/routes/profile.ts` declares `GET /:userId/bookmark-lists` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d09a3b4ac8f98547", "name": "Unused endpoint: GET /:userId/articles", "shortDescription": {"text": "Unused endpoint: GET /:userId/articles"}, "fullDescription": {"text": "`apps/api/src/routes/profile.ts` declares `GET /:userId/articles` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bc36d93efa5e17cb", "name": "Unused endpoint: GET /:userId/profile", "shortDescription": {"text": "Unused endpoint: GET /:userId/profile"}, "fullDescription": {"text": "`apps/api/src/routes/profile.ts` declares `GET /:userId/profile` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-eee087b16b27ef48", "name": "Unused endpoint: GET /:userId/bookmark-lists/:listId", "shortDescription": {"text": "Unused endpoint: GET /:userId/bookmark-lists/:listId"}, "fullDescription": {"text": "`apps/api/src/routes/profile.ts` declares `GET /:userId/bookmark-lists/:listId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d73c7ea9ecdeb278", "name": "Unused endpoint: POST /:tripId/settlement-payments", "shortDescription": {"text": "Unused endpoint: POST /:tripId/settlement-payments"}, "fullDescription": {"text": "`apps/api/src/routes/settlement-payments.ts` declares `POST /:tripId/settlement-payments` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d32bed69c2d27377", "name": "Unused endpoint: DELETE /:tripId/settlement-payments/:id", "shortDescription": {"text": "Unused endpoint: DELETE /:tripId/settlement-payments/:id"}, "fullDescription": {"text": "`apps/api/src/routes/settlement-payments.ts` declares `DELETE /:tripId/settlement-payments/:id` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d0ea9095a923813", "name": "Unused endpoint: GET /:userId/unsettled-summary", "shortDescription": {"text": "Unused endpoint: GET /:userId/unsettled-summary"}, "fullDescription": {"text": "`apps/api/src/routes/settlement-payments.ts` declares `GET /:userId/unsettled-summary` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0aa63dbd57fdf464", "name": "Unused endpoint: GET /:tripId/candidates", "shortDescription": {"text": "Unused endpoint: GET /:tripId/candidates"}, "fullDescription": {"text": "`apps/api/src/routes/candidates.ts` declares `GET /:tripId/candidates` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b7d15c6511e01679", "name": "Unused endpoint: POST /:tripId/candidates", "shortDescription": {"text": "Unused endpoint: POST /:tripId/candidates"}, "fullDescription": {"text": "`apps/api/src/routes/candidates.ts` declares `POST /:tripId/candidates` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e732344ee9099616", "name": "Unused endpoint: POST /:tripId/candidates/batch-assign", "shortDescription": {"text": "Unused endpoint: POST /:tripId/candidates/batch-assign"}, "fullDescription": {"text": "`apps/api/src/routes/candidates.ts` declares `POST /:tripId/candidates/batch-assign` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9d60e11408e22243", "name": "Unused endpoint: POST /:tripId/candidates/batch-delete", "shortDescription": {"text": "Unused endpoint: POST /:tripId/candidates/batch-delete"}, "fullDescription": {"text": "`apps/api/src/routes/candidates.ts` declares `POST /:tripId/candidates/batch-delete` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4a3165c6e268570b", "name": "Unused endpoint: POST /:tripId/candidates/batch-duplicate", "shortDescription": {"text": "Unused endpoint: POST /:tripId/candidates/batch-duplicate"}, "fullDescription": {"text": "`apps/api/src/routes/candidates.ts` declares `POST /:tripId/candidates/batch-duplicate` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8118cc0a9ccdf795", "name": "Unused endpoint: POST /:tripId/candidates/from-bookmarks", "shortDescription": {"text": "Unused endpoint: POST /:tripId/candidates/from-bookmarks"}, "fullDescription": {"text": "`apps/api/src/routes/candidates.ts` declares `POST /:tripId/candidates/from-bookmarks` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-53e632b16f56091b", "name": "Unused endpoint: PATCH /:tripId/candidates/reorder", "shortDescription": {"text": "Unused endpoint: PATCH /:tripId/candidates/reorder"}, "fullDescription": {"text": "`apps/api/src/routes/candidates.ts` declares `PATCH /:tripId/candidates/reorder` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8652f8acb558a4d0", "name": "Unused endpoint: PATCH /:tripId/candidates/:scheduleId", "shortDescription": {"text": "Unused endpoint: PATCH /:tripId/candidates/:scheduleId"}, "fullDescription": {"text": "`apps/api/src/routes/candidates.ts` declares `PATCH /:tripId/candidates/:scheduleId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-037ff5e37f70ee1b", "name": "Unused endpoint: DELETE /:tripId/candidates/:scheduleId", "shortDescription": {"text": "Unused endpoint: DELETE /:tripId/candidates/:scheduleId"}, "fullDescription": {"text": "`apps/api/src/routes/candidates.ts` declares `DELETE /:tripId/candidates/:scheduleId` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-48dfc4258c5e57f9", "name": "Unused endpoint: POST /:tripId/candidates/:scheduleId/assign", "shortDescription": {"text": "Unused endpoint: POST /:tripId/candidates/:scheduleId/assign"}, "fullDescription": {"text": "`apps/api/src/routes/candidates.ts` declares `POST /:tripId/candidates/:scheduleId/assign` 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/21833"}, "properties": {"repository": "u-stem/sugara", "repoUrl": "https://github.com/u-stem/sugara", "branch": "main"}, "results": [{"ruleId": "scanner-2cdb6db5bd3923d9", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/api/src/__tests__/storage.test.ts:46"}, "properties": {"repobilityId": "86fd4e10bd46c7fa", "scanner": "scanner-primary", "fingerprint": "2cdb6db5bd3923d9", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-79293167949a3ba2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/cleanup-guests.ts:5"}, "properties": {"repobilityId": "c9ba561f6e585415", "scanner": "scanner-primary", "fingerprint": "79293167949a3ba2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1756b7f0c8fbb172", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/seed-user.ts:16"}, "properties": {"repobilityId": "8ca59dd7143b9f9a", "scanner": "scanner-primary", "fingerprint": "1756b7f0c8fbb172", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-de7994b4ed2bcb96", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/create-test-db.ts:9"}, "properties": {"repobilityId": "cc393a07e125c1e3", "scanner": "scanner-primary", "fingerprint": "de7994b4ed2bcb96", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e7629f165c8febfe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/seed.ts:589"}, "properties": {"repobilityId": "f2fdc56da7066198", "scanner": "scanner-primary", "fingerprint": "e7629f165c8febfe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2d5a0ee12868c80b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/setup-test-db.ts:17"}, "properties": {"repobilityId": "0677286923037b6c", "scanner": "scanner-primary", "fingerprint": "2d5a0ee12868c80b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a01b48658dbdd42b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/migrate.ts:17"}, "properties": {"repobilityId": "4c947c823da5fa9d", "scanner": "scanner-primary", "fingerprint": "a01b48658dbdd42b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2bc73f82ed8ba16d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/seed-faqs.ts:923"}, "properties": {"repobilityId": "a74d71c425fd76f4", "scanner": "scanner-primary", "fingerprint": "2bc73f82ed8ba16d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e2b1eb6acfbbf364", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/api/src/db/ensure-faqs-table.ts:26"}, "properties": {"repobilityId": "521f49db97daa84e", "scanner": "scanner-primary", "fingerprint": "e2b1eb6acfbbf364", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-49822839fb8aec97", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/web/scripts/copy-scalar-assets.ts:30"}, "properties": {"repobilityId": "d4c66e2ddadaecb3", "scanner": "scanner-primary", "fingerprint": "49822839fb8aec97", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f58bd8ed68b76e08", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 apps/web/scripts/check-i18n-symmetry.ts:47"}, "properties": {"repobilityId": "2f3b578d75b884ec", "scanner": "scanner-primary", "fingerprint": "f58bd8ed68b76e08", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a7e4c46579188689", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/bookmark-list-card.tsx:39"}, "properties": {"repobilityId": "5db70cf1125fa2aa", "scanner": "scanner-primary", "fingerprint": "a7e4c46579188689", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7e41a5bf8856f05d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/trip-card.tsx:71"}, "properties": {"repobilityId": "89ece3b0aa767f57", "scanner": "scanner-primary", "fingerprint": "7e41a5bf8856f05d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4b26107a08766643", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/sent-requests-card.tsx:85"}, "properties": {"repobilityId": "c4f638ab8c9e0eb8", "scanner": "scanner-primary", "fingerprint": "4b26107a08766643", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-61c543588540ca33", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/bookmark-list-picker-dialog.tsx:83"}, "properties": {"repobilityId": "1cf11a799274cc13", "scanner": "scanner-primary", "fingerprint": "61c543588540ca33", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-68ab2fc3a3b210e2", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/sp-bottom-nav.tsx:62"}, "properties": {"repobilityId": "e7ab9e1a5f95fa58", "scanner": "scanner-primary", "fingerprint": "68ab2fc3a3b210e2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-44efe3ec644a76aa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/article-editor-dialog.tsx:453"}, "properties": {"repobilityId": "299a4e810848cfd7", "scanner": "scanner-primary", "fingerprint": "44efe3ec644a76aa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1f2140de1c0d8d92", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/friend-requests-card.tsx:113"}, "properties": {"repobilityId": "514714600dee64b7", "scanner": "scanner-primary", "fingerprint": "1f2140de1c0d8d92", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-45335a772012a09a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/expense-panel.tsx:491"}, "properties": {"repobilityId": "8256349a037c6fc7", "scanner": "scanner-primary", "fingerprint": "45335a772012a09a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4f8540f96aadbcaa", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/unsettled-summary.tsx:57"}, "properties": {"repobilityId": "885b763ba4d1ba17", "scanner": "scanner-primary", "fingerprint": "4f8540f96aadbcaa", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1d9dc35de14844e5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/install-banner.tsx:26"}, "properties": {"repobilityId": "84b9bcf96ab6864d", "scanner": "scanner-primary", "fingerprint": "1d9dc35de14844e5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e89eead57b9dcb3f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/member-dialog.tsx:301"}, "properties": {"repobilityId": "d12095fb4b5bc8ec", "scanner": "scanner-primary", "fingerprint": "e89eead57b9dcb3f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-95837088dbb2e11a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/souvenir-panel.tsx:556"}, "properties": {"repobilityId": "200d4ddc008a1853", "scanner": "scanner-primary", "fingerprint": "95837088dbb2e11a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-234f9cd2cca45d47", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/bookmark-panel.tsx:308"}, "properties": {"repobilityId": "2026c9cc2e6679c0", "scanner": "scanner-primary", "fingerprint": "234f9cd2cca45d47", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-53ffe383f1eb948d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/article-card.tsx:64"}, "properties": {"repobilityId": "ef390b5c6c8b051a", "scanner": "scanner-primary", "fingerprint": "53ffe383f1eb948d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-94e247b125c288b8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/sp-swipe-tabs.tsx:287"}, "properties": {"repobilityId": "ff02a42fa69c794f", "scanner": "scanner-primary", "fingerprint": "94e247b125c288b8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7a41fd70ef7bf4ae", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/guest-banner.tsx:34"}, "properties": {"repobilityId": "8fabfa7ac1cdcda7", "scanner": "scanner-primary", "fingerprint": "7a41fd70ef7bf4ae", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0a5c2413ab455a9c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/candidate-item.tsx:158"}, "properties": {"repobilityId": "2d9d28f856e4e936", "scanner": "scanner-primary", "fingerprint": "0a5c2413ab455a9c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-065672b7d43f5eda", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/batch-shift-dialog.tsx:124"}, "properties": {"repobilityId": "8ea401eafc7e0b67", "scanner": "scanner-primary", "fingerprint": "065672b7d43f5eda", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c65b5eba6b884e53", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/schedule-items/primitives.tsx:486"}, "properties": {"repobilityId": "33fc295d074e8e80", "scanner": "scanner-primary", "fingerprint": "c65b5eba6b884e53", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c4379f4fe4df495e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/schedule-items/place-item.tsx:127"}, "properties": {"repobilityId": "30e33d13c17bec8d", "scanner": "scanner-primary", "fingerprint": "c4379f4fe4df495e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9170520f050f35d4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/components/schedule-items/transport-item.tsx:169"}, "properties": {"repobilityId": "60773c61c2f1b617", "scanner": "scanner-primary", "fingerprint": "9170520f050f35d4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1e027402110d94f0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/users/[userId]/page.tsx:89"}, "properties": {"repobilityId": "9f7fd453e269e954", "scanner": "scanner-primary", "fingerprint": "1e027402110d94f0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4fd102e18ffa2365", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(sp)/sp/trips/[id]/print/page.tsx:90"}, "properties": {"repobilityId": "9936adc590ad9774", "scanner": "scanner-primary", "fingerprint": "4fd102e18ffa2365", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-748421bb3fdd5174", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(sp)/sp/trips/[id]/members/page.tsx:280"}, "properties": {"repobilityId": "e98c49f60b0a72dc", "scanner": "scanner-primary", "fingerprint": "748421bb3fdd5174", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4584e42a4df9a356", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(sp)/sp/trips/[id]/export/page.tsx:382"}, "properties": {"repobilityId": "cd9da9e2a164f67e", "scanner": "scanner-primary", "fingerprint": "4584e42a4df9a356", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-85167be3f49da467", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(sp)/sp/home/layout.tsx:29"}, "properties": {"repobilityId": "2beb29a9d59367cd", "scanner": "scanner-primary", "fingerprint": "85167be3f49da467", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1effca8cfa1903b0", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(sp)/sp/friends/groups/[id]/page.tsx:100"}, "properties": {"repobilityId": "dc034a4e60e7875d", "scanner": "scanner-primary", "fingerprint": "1effca8cfa1903b0", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4cfaff66fac3c912", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(sp)/sp/friends/groups/[id]/add/page.tsx:173"}, "properties": {"repobilityId": "be316fae94733c08", "scanner": "scanner-primary", "fingerprint": "4cfaff66fac3c912", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-9cd40baf0b67170a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/shared/[token]/_components/shared-trip-client.tsx:439"}, "properties": {"repobilityId": "3474842e6cf750cf", "scanner": "scanner-primary", "fingerprint": "9cd40baf0b67170a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a7cab35af4d914ea", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/trips/[id]/print/page.tsx:252"}, "properties": {"repobilityId": "aec2342e645bd40c", "scanner": "scanner-primary", "fingerprint": "a7cab35af4d914ea", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-c0f8227a2ecd1e6b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/trips/[id]/_components/trip-header.tsx:86"}, "properties": {"repobilityId": "17609881540139be", "scanner": "scanner-primary", "fingerprint": "c0f8227a2ecd1e6b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5d758daeaaec58d4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/trips/[id]/_components/pattern-tabs.tsx:246"}, "properties": {"repobilityId": "78d900e19e941a39", "scanner": "scanner-primary", "fingerprint": "5d758daeaaec58d4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-3c4bf5401adf6d1b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/trips/[id]/_components/trip-dialogs.tsx:203"}, "properties": {"repobilityId": "27f6881b8986b6fc", "scanner": "scanner-primary", "fingerprint": "3c4bf5401adf6d1b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4ebf593ee9ff799a", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/trips/[id]/export/page.tsx:81"}, "properties": {"repobilityId": "e233d059e2fd82ce", "scanner": "scanner-primary", "fingerprint": "4ebf593ee9ff799a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6a64f9512376a306", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/bookmarks/[listId]/_components/sortable-bookmark-item.tsx:40"}, "properties": {"repobilityId": "a135ecacd472c1d3", "scanner": "scanner-primary", "fingerprint": "6a64f9512376a306", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-93923f28f1e20a4e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/home/layout.tsx:29"}, "properties": {"repobilityId": "6d9e7019face0948", "scanner": "scanner-primary", "fingerprint": "93923f28f1e20a4e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8db422e50b6313d8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/friends/_components/group-detail-modal.tsx:186"}, "properties": {"repobilityId": "2763e114f0df3597", "scanner": "scanner-primary", "fingerprint": "8db422e50b6313d8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-981737393b54b396", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/friends/_components/friends-tab.tsx:111"}, "properties": {"repobilityId": "261636885f8b501d", "scanner": "scanner-primary", "fingerprint": "981737393b54b396", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ef3cd17eb7017031", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/friends/_components/groups-tab.tsx:162"}, "properties": {"repobilityId": "9aade08aecd415b9", "scanner": "scanner-primary", "fingerprint": "ef3cd17eb7017031", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f492883c23b73355", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/web/app/(authenticated)/my/page.tsx:82"}, "properties": {"repobilityId": "3459c229c61bbcb3", "scanner": "scanner-primary", "fingerprint": "f492883c23b73355", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-734ae7f81325acde", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/app/news/[slug]/page.tsx:72"}, "properties": {"repobilityId": "fb217bfb8eb01696", "scanner": "scanner-primary", "fingerprint": "734ae7f81325acde", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-9e0564e2d444dfd0", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/app/faq/page.tsx:35"}, "properties": {"repobilityId": "94f96956b98aee2a", "scanner": "scanner-primary", "fingerprint": "9e0564e2d444dfd0", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b2b3248d0cac4130", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 apps/web/lib/linkify.tsx:40"}, "properties": {"repobilityId": "ca0d1a25b170767e", "scanner": "scanner-primary", "fingerprint": "b2b3248d0cac4130", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-7d74c99237c630d3", "level": "error", "message": {"text": "Possible secret in apps/api/src/db/seed.ts"}, "properties": {"repobilityId": "add7507a868eeba4", "scanner": "scanner-primary", "fingerprint": "7d74c99237c630d3", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/db/seed.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-7d74c99237c630d3", "level": "error", "message": {"text": "Possible secret in apps/api/src/db/seed.ts"}, "properties": {"repobilityId": "add7507a868eeba4", "scanner": "scanner-primary", "fingerprint": "7d74c99237c630d3", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/db/seed.ts"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-7d74c99237c630d3", "level": "error", "message": {"text": "Possible secret in apps/api/src/db/seed.ts"}, "properties": {"repobilityId": "add7507a868eeba4", "scanner": "scanner-primary", "fingerprint": "7d74c99237c630d3", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/src/db/seed.ts"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-275c883e2b3a664b", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/app/news/[slug]/page.tsx:72"}, "properties": {"repobilityId": "624b6601a9f8e477", "scanner": "scanner-primary", "fingerprint": "275c883e2b3a664b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/app/news/[slug]/page.tsx"}, "region": {"startLine": 72}}}]}, {"ruleId": "scanner-b93d2af90e85a052", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in apps/web/app/faq/page.tsx:35"}, "properties": {"repobilityId": "83704fd7fa772f00", "scanner": "scanner-primary", "fingerprint": "b93d2af90e85a052", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/app/faq/page.tsx"}, "region": {"startLine": 35}}}]}, {"ruleId": "scanner-819b54c051bf1c1c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/web/lib/__tests__/hotkeys.test.ts:6"}, "properties": {"repobilityId": "49a2b9946734b294", "scanner": "scanner-primary", "fingerprint": "819b54c051bf1c1c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/lib/__tests__/hotkeys.test.ts"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-f121dc5c37e29008", "level": "error", "message": {"text": "Possible secret in apps/web/e2e/docs.spec.ts"}, "properties": {"repobilityId": "c0094fcc35534a6d", "scanner": "scanner-primary", "fingerprint": "f121dc5c37e29008", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/e2e/docs.spec.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-b00d667c838fbe7c", "level": "error", "message": {"text": "Possible secret in apps/web/e2e/delete-account.spec.ts"}, "properties": {"repobilityId": "eb0b6bb85de82822", "scanner": "scanner-primary", "fingerprint": "b00d667c838fbe7c", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/e2e/delete-account.spec.ts"}, "region": {"startLine": 3}}}]}, {"ruleId": "scanner-912ff473885f33ed", "level": "error", "message": {"text": "Possible secret in apps/web/e2e/auth.spec.ts"}, "properties": {"repobilityId": "3ab2eec8754328b5", "scanner": "scanner-primary", "fingerprint": "912ff473885f33ed", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/e2e/auth.spec.ts"}, "region": {"startLine": 7}}}]}, {"ruleId": "scanner-b402b2a90c351d65", "level": "error", "message": {"text": "Possible secret in apps/web/e2e/api-keys.spec.ts"}, "properties": {"repobilityId": "4e7de864ce4218c2", "scanner": "scanner-primary", "fingerprint": "b402b2a90c351d65", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/e2e/api-keys.spec.ts"}, "region": {"startLine": 14}}}]}, {"ruleId": "scanner-bf52d7a679ea671f", "level": "error", "message": {"text": "Possible secret in packages/shared/src/messages.ts"}, "properties": {"repobilityId": "0dafc42fbd48a252", "scanner": "scanner-primary", "fingerprint": "bf52d7a679ea671f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/shared/src/messages.ts"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-bf52d7a679ea671f", "level": "error", "message": {"text": "Possible secret in packages/shared/src/messages.ts"}, "properties": {"repobilityId": "0dafc42fbd48a252", "scanner": "scanner-primary", "fingerprint": "bf52d7a679ea671f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/shared/src/messages.ts"}, "region": {"startLine": 448}}}]}, {"ruleId": "scanner-bf52d7a679ea671f", "level": "error", "message": {"text": "Possible secret in packages/shared/src/messages.ts"}, "properties": {"repobilityId": "0dafc42fbd48a252", "scanner": "scanner-primary", "fingerprint": "bf52d7a679ea671f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/shared/src/messages.ts"}, "region": {"startLine": 449}}}]}, {"ruleId": "scanner-bf52d7a679ea671f", "level": "error", "message": {"text": "Possible secret in packages/shared/src/messages.ts"}, "properties": {"repobilityId": "0dafc42fbd48a252", "scanner": "scanner-primary", "fingerprint": "bf52d7a679ea671f", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/shared/src/messages.ts"}, "region": {"startLine": 464}}}]}, {"ruleId": "scanner-768e8f28c1850d98", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "f3c306ca3743dfa1", "scanner": "scanner-primary", "fingerprint": "768e8f28c1850d98", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/dependabot-auto-merge.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-fa7ba2c6d4604ca1", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "b9efc2d701502cd7", "scanner": "scanner-primary", "fingerprint": "fa7ba2c6d4604ca1", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/desktop-build.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c1ba729df93d1c08", "level": "warning", "message": {"text": "GitHub Actions workflow grants broad write permissions"}, "properties": {"repobilityId": "4c35238667667dde", "scanner": "scanner-primary", "fingerprint": "c1ba729df93d1c08", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "least-privilege"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/desktop-tag.yml"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cb639d9a10a47b23", "level": "note", "message": {"text": "package.json defines install-time lifecycle scripts"}, "properties": {"repobilityId": "edeab51902066991", "scanner": "scanner-primary", "fingerprint": "cb639d9a10a47b23", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "npm", "install-scripts"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8a5c5dcb218610bf", "level": "note", "message": {"text": "Very large file: apps/api/src/__tests__/v1-write-routes.test.ts (1799 lines)"}, "properties": {"repobilityId": "0894e1c676798e73", "scanner": "scanner-primary", "fingerprint": "8a5c5dcb218610bf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4addc1f7b516d628", "level": "note", "message": {"text": "Very large file: apps/api/src/db/seed-faqs.ts (952 lines)"}, "properties": {"repobilityId": "37b8a6cdf88fd963", "scanner": "scanner-primary", "fingerprint": "4addc1f7b516d628", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "49b223ba91266634", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b06b8d86f24c77f9", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/api/package.json"}, "properties": {"repobilityId": "ce77cd34ed0306d4", "scanner": "scanner-primary", "fingerprint": "b06b8d86f24c77f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/api/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-33bfb396f1c1ee27", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/mcp/package.json"}, "properties": {"repobilityId": "81d32da25bb5012e", "scanner": "scanner-primary", "fingerprint": "33bfb396f1c1ee27", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/mcp/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d57b3f82d2270c5b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/desktop/package.json"}, "properties": {"repobilityId": "a5d1a254ecc349f8", "scanner": "scanner-primary", "fingerprint": "d57b3f82d2270c5b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/desktop/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4a9eb7dc7c6e3880", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: apps/web/package.json"}, "properties": {"repobilityId": "6c1704bf24cf19ac", "scanner": "scanner-primary", "fingerprint": "4a9eb7dc7c6e3880", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/web/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2699d5f16ae11282", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/shared/package.json"}, "properties": {"repobilityId": "37ac218a4ef9b430", "scanner": "scanner-primary", "fingerprint": "2699d5f16ae11282", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/shared/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "5dc94e34f4ad9933", "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": "ba37b0109fe2d68f", "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": "19a70620b6f7c1cf", "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": "73898cf846af0f78", "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": "143fff54b76a4289", "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": "12312b50a38e134a", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "c1d3f460c623ea2c", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "25e5960a63da1e2c", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-149fad1f84450cf6", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/app.ts:49"}, "properties": {"repobilityId": "ce3df8c3ea79b131", "scanner": "scanner-primary", "fingerprint": "149fad1f84450cf6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e316cb1224db5830", "level": "none", "message": {"text": "Commented-code block (9 lines) in apps/api/src/__tests__/v1-write-routes.test.ts:3"}, "properties": {"repobilityId": "c2a81bc7b5836574", "scanner": "scanner-primary", "fingerprint": "e316cb1224db5830", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35d8165597eb6c61", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/__tests__/docs.test.ts:54"}, "properties": {"repobilityId": "44e1dc3322d5f85b", "scanner": "scanner-primary", "fingerprint": "35d8165597eb6c61", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e88278f587339c3b", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/__tests__/v1-mounting.test.ts:4"}, "properties": {"repobilityId": "4fe1bbeebbd8fa77", "scanner": "scanner-primary", "fingerprint": "e88278f587339c3b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b07ea785abf92f61", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/middleware/require-api-key.ts:6"}, "properties": {"repobilityId": "6e7d8a0952de4865", "scanner": "scanner-primary", "fingerprint": "b07ea785abf92f61", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e48b2d7d48e2c59f", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/lib/auth.ts:34"}, "properties": {"repobilityId": "c6102fb422b268e4", "scanner": "scanner-primary", "fingerprint": "e48b2d7d48e2c59f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05f1780c94f7b982", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/lib/poll-access.ts:68"}, "properties": {"repobilityId": "aaabdd37afc3fb26", "scanner": "scanner-primary", "fingerprint": "05f1780c94f7b982", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-baf4f92626e86762", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/lib/candidate-service.ts:3"}, "properties": {"repobilityId": "983b8a8df4b113a5", "scanner": "scanner-primary", "fingerprint": "baf4f92626e86762", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7e2b80fd9b95a8fb", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/lib/auth-hooks.ts:16"}, "properties": {"repobilityId": "d690b00a43f10416", "scanner": "scanner-primary", "fingerprint": "7e2b80fd9b95a8fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-86bd0242d668239f", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/api/src/lib/sort-order.ts:10"}, "properties": {"repobilityId": "2028b754cbd9d6f2", "scanner": "scanner-primary", "fingerprint": "86bd0242d668239f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-371cbe5fbebdb920", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/lib/souvenir-service.ts:11"}, "properties": {"repobilityId": "374d930d6c3d4b83", "scanner": "scanner-primary", "fingerprint": "371cbe5fbebdb920", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ddeb692b43d8bc2f", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/lib/external-api/member-no.ts:3"}, "properties": {"repobilityId": "fe8bcc314da36772", "scanner": "scanner-primary", "fingerprint": "ddeb692b43d8bc2f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05dbf7eb365a3a66", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/lib/external-api/api-key.ts:14"}, "properties": {"repobilityId": "38e305bd65914d85", "scanner": "scanner-primary", "fingerprint": "05dbf7eb365a3a66", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5c13f9a11c94ba7b", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/lib/external-api/errors.ts:36"}, "properties": {"repobilityId": "df42aa92001a2a9e", "scanner": "scanner-primary", "fingerprint": "5c13f9a11c94ba7b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-deac641f693e4927", "level": "none", "message": {"text": "Commented-code block (9 lines) in apps/api/src/routes/auth.ts:9"}, "properties": {"repobilityId": "83d814c9842e16fd", "scanner": "scanner-primary", "fingerprint": "deac641f693e4927", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b7f5d3356f995012", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/api/src/routes/docs.ts:24"}, "properties": {"repobilityId": "47af3f7ee6a9d3d0", "scanner": "scanner-primary", "fingerprint": "b7f5d3356f995012", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23fd04e975aa7f59", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/routes/directions.ts:92"}, "properties": {"repobilityId": "659c2f316e7a10cc", "scanner": "scanner-primary", "fingerprint": "23fd04e975aa7f59", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5df4c5acfed0cec1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/routes/admin.ts:333"}, "properties": {"repobilityId": "1c8f3a3f8db8566a", "scanner": "scanner-primary", "fingerprint": "5df4c5acfed0cec1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e2d2e5e0cb363d7c", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/routes/v1/candidates-write.ts:420"}, "properties": {"repobilityId": "663aeb895426ac94", "scanner": "scanner-primary", "fingerprint": "e2d2e5e0cb363d7c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d5085441c239496b", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/routes/v1/souvenirs-write.ts:9"}, "properties": {"repobilityId": "88de7f3580bd3509", "scanner": "scanner-primary", "fingerprint": "d5085441c239496b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-85d39c281b7fa59f", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/api/src/routes/v1/shared.ts:40"}, "properties": {"repobilityId": "9d7ed187f7de0bde", "scanner": "scanner-primary", "fingerprint": "85d39c281b7fa59f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5df415ae5c25fbc5", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/api/src/routes/v1/write-schemas.ts:3"}, "properties": {"repobilityId": "64e7a2a0e3f108f8", "scanner": "scanner-primary", "fingerprint": "5df415ae5c25fbc5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be0505f2365ac712", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/api/src/routes/v1/serializers.ts:118"}, "properties": {"repobilityId": "998686ada768f918", "scanner": "scanner-primary", "fingerprint": "be0505f2365ac712", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc73f482c1c80ca6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/db/seed-user.ts:19"}, "properties": {"repobilityId": "d856ab477484824b", "scanner": "scanner-primary", "fingerprint": "cc73f482c1c80ca6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f6c5b11d29303278", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/api/src/db/seed.ts:560"}, "properties": {"repobilityId": "3dde922ba8018eec", "scanner": "scanner-primary", "fingerprint": "f6c5b11d29303278", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a4b3284ab80bb07d", "level": "none", "message": {"text": "Commented-code block (8 lines) in apps/mcp/src/tools.ts:302"}, "properties": {"repobilityId": "ffd4780d5b160dda", "scanner": "scanner-primary", "fingerprint": "a4b3284ab80bb07d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-55666f185202aa58", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/mcp/src/client.ts:140"}, "properties": {"repobilityId": "5e24dd10d5b1dc6d", "scanner": "scanner-primary", "fingerprint": "55666f185202aa58", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eccf8949d5b8ed54", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/instrumentation-client.ts:5"}, "properties": {"repobilityId": "81f24a25bc3ef89e", "scanner": "scanner-primary", "fingerprint": "eccf8949d5b8ed54", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-46a50e032500e642", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/proxy.ts:95"}, "properties": {"repobilityId": "5699ed27fe2165a1", "scanner": "scanner-primary", "fingerprint": "46a50e032500e642", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-32d8fb6673b524a1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/proxy.ts:138"}, "properties": {"repobilityId": "e43e320a1a79d531", "scanner": "scanner-primary", "fingerprint": "32d8fb6673b524a1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c681647d05fd7857", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/action-sheet.tsx:26"}, "properties": {"repobilityId": "a43bf61e31bb51b3", "scanner": "scanner-primary", "fingerprint": "c681647d05fd7857", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b0919bb6f4e78f6e", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/components/ui/__mocks__/responsive-alert-dialog.tsx:1"}, "properties": {"repobilityId": "d7e2b8d8a8070fa9", "scanner": "scanner-primary", "fingerprint": "b0919bb6f4e78f6e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-faf644cbb754b300", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/app/sw.ts:56"}, "properties": {"repobilityId": "ae80362b76317c32", "scanner": "scanner-primary", "fingerprint": "faf644cbb754b300", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b38ab37e620a862f", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/p/[token]/page.tsx:26"}, "properties": {"repobilityId": "1c7005d9784ef54a", "scanner": "scanner-primary", "fingerprint": "b38ab37e620a862f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c01cd8ba55717c8b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/app/polls/shared/[token]/page.tsx:64"}, "properties": {"repobilityId": "c8055c3c122f44e3", "scanner": "scanner-primary", "fingerprint": "c01cd8ba55717c8b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-61d203abfde42d4e", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/lib/json-ld.ts:1"}, "properties": {"repobilityId": "89a214bc5e496d17", "scanner": "scanner-primary", "fingerprint": "61d203abfde42d4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-23f3c74f02655933", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/lib/markdown.tsx:6"}, "properties": {"repobilityId": "0cb6b20127c23e0b", "scanner": "scanner-primary", "fingerprint": "23f3c74f02655933", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a056f3600a74b6d", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/lib/format.ts:74"}, "properties": {"repobilityId": "68de018b0aaab956", "scanner": "scanner-primary", "fingerprint": "6a056f3600a74b6d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c81ed090a0702b9b", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/lib/merge-timeline.ts:121"}, "properties": {"repobilityId": "f9fac06a73ada427", "scanner": "scanner-primary", "fingerprint": "c81ed090a0702b9b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc379d1de75a8e0b", "level": "none", "message": {"text": "Commented-code block (9 lines) in apps/web/lib/supabase.ts:17"}, "properties": {"repobilityId": "811d46829db2de42", "scanner": "scanner-primary", "fingerprint": "cc379d1de75a8e0b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-deea368d9ca15f4b", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/lib/drop-position.ts:247"}, "properties": {"repobilityId": "d2757d2e0c54b8fa", "scanner": "scanner-primary", "fingerprint": "deea368d9ca15f4b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d0d05fff638169fe", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/lib/no-content-endpoints.ts:3"}, "properties": {"repobilityId": "dafb11675d36afd7", "scanner": "scanner-primary", "fingerprint": "d0d05fff638169fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e9063d3cdaeba7b5", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/lib/__tests__/drop-position.test.ts:361"}, "properties": {"repobilityId": "a2ac8d92541cabea", "scanner": "scanner-primary", "fingerprint": "e9063d3cdaeba7b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75c11da0ca88ccf6", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/lib/hooks/use-trip-drag-and-drop.ts:52"}, "properties": {"repobilityId": "301a64788624bf24", "scanner": "scanner-primary", "fingerprint": "75c11da0ca88ccf6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8598a6f58a6fd14", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/lib/hooks/use-trip-drag-and-drop.test.ts:576"}, "properties": {"repobilityId": "65e7f413b06f4f86", "scanner": "scanner-primary", "fingerprint": "f8598a6f58a6fd14", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a074da8de36c3c33", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/lib/hooks/use-push-subscription.ts:39"}, "properties": {"repobilityId": "37082a67062d98d5", "scanner": "scanner-primary", "fingerprint": "a074da8de36c3c33", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cddd72a4c133cbec", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/lib/hooks/use-swipe-tab.ts:11"}, "properties": {"repobilityId": "887f3c6a4839f771", "scanner": "scanner-primary", "fingerprint": "cddd72a4c133cbec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f10cc0ed2d866046", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/e2e/docs.spec.ts:5"}, "properties": {"repobilityId": "b11ea961087ead47", "scanner": "scanner-primary", "fingerprint": "f10cc0ed2d866046", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-163d9cac8fe037dd", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/e2e/delete-account.spec.ts:145"}, "properties": {"repobilityId": "484f6536f0740fe0", "scanner": "scanner-primary", "fingerprint": "163d9cac8fe037dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1343a1e7ba8c11c3", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/web/e2e/delete-account.spec.ts:210"}, "properties": {"repobilityId": "144a2e347a117ae1", "scanner": "scanner-primary", "fingerprint": "1343a1e7ba8c11c3", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6cfcfb7274089da7", "level": "none", "message": {"text": "Commented-code block (7 lines) in apps/web/e2e/settlement.spec.ts:55"}, "properties": {"repobilityId": "eabb7aa1c7f78bb0", "scanner": "scanner-primary", "fingerprint": "6cfcfb7274089da7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-355dede6414f30bb", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/e2e/password-reset.spec.ts:66"}, "properties": {"repobilityId": "4f770ff8d38a9547", "scanner": "scanner-primary", "fingerprint": "355dede6414f30bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5579cdad85325aa0", "level": "none", "message": {"text": "Commented-code block (6 lines) in apps/web/e2e/souvenirs.spec.ts:136"}, "properties": {"repobilityId": "665873006be18c81", "scanner": "scanner-primary", "fingerprint": "5579cdad85325aa0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-141cd1cd96de2412", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/e2e/mobile-layout.spec.ts:44"}, "properties": {"repobilityId": "1e50ab9f287aa3b5", "scanner": "scanner-primary", "fingerprint": "141cd1cd96de2412", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-44d124e0d5dcb50c", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/e2e/shared-trip.spec.ts:83"}, "properties": {"repobilityId": "491e81ecc2730c0d", "scanner": "scanner-primary", "fingerprint": "44d124e0d5dcb50c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1986b8c394db9b11", "level": "none", "message": {"text": "Commented-code block (5 lines) in apps/web/e2e/fixtures/auth.ts:27"}, "properties": {"repobilityId": "0715b2fd5df61f79", "scanner": "scanner-primary", "fingerprint": "1986b8c394db9b11", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66180198a00c2a8d", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/shared/src/currency.ts:104"}, "properties": {"repobilityId": "374ff0a220f9e25c", "scanner": "scanner-primary", "fingerprint": "66180198a00c2a8d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-590603e14211a66d", "level": "none", "message": {"text": "Commented-code block (5 lines) in packages/shared/src/errors.ts:3"}, "properties": {"repobilityId": "1770f6e67f53f03f", "scanner": "scanner-primary", "fingerprint": "590603e14211a66d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9996447513897762", "level": "note", "message": {"text": "30 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "b3285186f72a5bb9", "scanner": "scanner-primary", "fingerprint": "9996447513897762", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-c0a00fc5c088a867", "level": "error", "message": {"text": "Dangling fetch: GET /api/friends (apps/api/src/__tests__/friends.test.ts:79)"}, "properties": {"repobilityId": "797302c2e00b9dc3", "scanner": "scanner-primary", "fingerprint": "c0a00fc5c088a867", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a1246a5b25749c7c", "level": "error", "message": {"text": "Dangling fetch: GET /api/friends (apps/api/src/__tests__/friends.test.ts:102)"}, "properties": {"repobilityId": "46758fe1695413a0", "scanner": "scanner-primary", "fingerprint": "a1246a5b25749c7c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d8433989274951a7", "level": "error", "message": {"text": "Dangling fetch: GET /api/friends (apps/api/src/__tests__/friends.test.ts:115)"}, "properties": {"repobilityId": "73d7031afafa2e6b", "scanner": "scanner-primary", "fingerprint": "d8433989274951a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3ff503998d2f086f", "level": "error", "message": {"text": "Dangling fetch: GET /api/friends (apps/api/src/__tests__/friends.test.ts:126)"}, "properties": {"repobilityId": "302750f9023aacf5", "scanner": "scanner-primary", "fingerprint": "3ff503998d2f086f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a65e98c2fee249cf", "level": "error", "message": {"text": "Dangling fetch: GET /api/friends/requests (apps/api/src/__tests__/friends.test.ts:147)"}, "properties": {"repobilityId": "eefc1f9ee91bf992", "scanner": "scanner-primary", "fingerprint": "a65e98c2fee249cf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2bb1fd41375eb708", "level": "error", "message": {"text": "Dangling fetch: GET /api/friends/requests (apps/api/src/__tests__/friends.test.ts:161)"}, "properties": {"repobilityId": "51832d7e5ab2abea", "scanner": "scanner-primary", "fingerprint": "2bb1fd41375eb708", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b14df85dfe62ecec", "level": "error", "message": {"text": "Dangling fetch: GET /api/friends/requests (apps/api/src/__tests__/friends.test.ts:172)"}, "properties": {"repobilityId": "cc3a1d3607c1567d", "scanner": "scanner-primary", "fingerprint": "b14df85dfe62ecec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6acc7273b7210a39", "level": "error", "message": {"text": "Dangling fetch: POST /api/friends/requests (apps/api/src/__tests__/friends.test.ts:193)"}, "properties": {"repobilityId": "6524f12e2b4ceddc", "scanner": "scanner-primary", "fingerprint": "6acc7273b7210a39", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-48e96c7b45377253", "level": "error", "message": {"text": "Dangling fetch: POST /api/friends/requests (apps/api/src/__tests__/friends.test.ts:204)"}, "properties": {"repobilityId": "a6be6d5e9e0462b8", "scanner": "scanner-primary", "fingerprint": "48e96c7b45377253", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c0e042583f34ee0a", "level": "error", "message": {"text": "Dangling fetch: POST /api/friends/requests (apps/api/src/__tests__/friends.test.ts:215)"}, "properties": {"repobilityId": "bb2899c1d5534af5", "scanner": "scanner-primary", "fingerprint": "c0e042583f34ee0a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3010d24a781debf5", "level": "error", "message": {"text": "Dangling fetch: POST /api/friends/requests (apps/api/src/__tests__/friends.test.ts:228)"}, "properties": {"repobilityId": "49841b0e90187381", "scanner": "scanner-primary", "fingerprint": "3010d24a781debf5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-aa5e2b7c3f3fb2b8", "level": "error", "message": {"text": "Dangling fetch: POST /api/friends/requests (apps/api/src/__tests__/friends.test.ts:250)"}, "properties": {"repobilityId": "d453cf42536b1c15", "scanner": "scanner-primary", "fingerprint": "aa5e2b7c3f3fb2b8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-bbc6d3d73e9a17ac", "level": "error", "message": {"text": "Dangling fetch: POST /api/friends/requests (apps/api/src/__tests__/friends.test.ts:267)"}, "properties": {"repobilityId": "f7dede69e5cad0e8", "scanner": "scanner-primary", "fingerprint": "bbc6d3d73e9a17ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-53b5ccad8c8189d9", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:293)"}, "properties": {"repobilityId": "ddbf449aba04ff88", "scanner": "scanner-primary", "fingerprint": "53b5ccad8c8189d9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e66ae48124a615d7", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:308)"}, "properties": {"repobilityId": "2342c1b9dc72d279", "scanner": "scanner-primary", "fingerprint": "e66ae48124a615d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-95d746029d28a61d", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:326)"}, "properties": {"repobilityId": "08f8c8de2d7dd77a", "scanner": "scanner-primary", "fingerprint": "95d746029d28a61d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-62d05c2ac4ffd457", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:350)"}, "properties": {"repobilityId": "7a4b103bf28b8036", "scanner": "scanner-primary", "fingerprint": "62d05c2ac4ffd457", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7c67fc06779683fd", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:371)"}, "properties": {"repobilityId": "b761893fe4fba2bd", "scanner": "scanner-primary", "fingerprint": "7c67fc06779683fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-200ef25363de9eaf", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:384)"}, "properties": {"repobilityId": "ad4490b4be0e6eaf", "scanner": "scanner-primary", "fingerprint": "200ef25363de9eaf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cfb51822ad88b627", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/friends/requests/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:400)"}, "properties": {"repobilityId": "f88f83a932719e6e", "scanner": "scanner-primary", "fingerprint": "cfb51822ad88b627", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-25840cd48dd35231", "level": "error", "message": {"text": "Dangling fetch: GET /api/friends/requests/sent (apps/api/src/__tests__/friends.test.ts:423)"}, "properties": {"repobilityId": "903c30544dca0f20", "scanner": "scanner-primary", "fingerprint": "25840cd48dd35231", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-bcb691055efbf9ef", "level": "error", "message": {"text": "Dangling fetch: GET /api/friends/requests/sent (apps/api/src/__tests__/friends.test.ts:437)"}, "properties": {"repobilityId": "b5236c5c887c4b94", "scanner": "scanner-primary", "fingerprint": "bcb691055efbf9ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-aadec3d38eb7b316", "level": "error", "message": {"text": "Dangling fetch: GET /api/friends/requests/sent (apps/api/src/__tests__/friends.test.ts:448)"}, "properties": {"repobilityId": "fdbf53cfbf463600", "scanner": "scanner-primary", "fingerprint": "aadec3d38eb7b316", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1bfda69adf896aa0", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/friends/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:468)"}, "properties": {"repobilityId": "e7df8542a560a86d", "scanner": "scanner-primary", "fingerprint": "1bfda69adf896aa0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ef614cc98350c142", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/friends/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:489)"}, "properties": {"repobilityId": "9a0c2163a605d7bb", "scanner": "scanner-primary", "fingerprint": "ef614cc98350c142", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e45e9c23f0147a49", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/friends/${friendRecordId} (apps/api/src/__tests__/friends.test.ts:502)"}, "properties": {"repobilityId": "d196ee89d78ffae4", "scanner": "scanner-primary", "fingerprint": "e45e9c23f0147a49", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-30af7f6179847ef0", "level": "error", "message": {"text": "Dangling fetch: GET /boom (apps/api/src/__tests__/error-handler.test.ts:24)"}, "properties": {"repobilityId": "680876b6588ba609", "scanner": "scanner-primary", "fingerprint": "30af7f6179847ef0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-06e57b555e62f7f3", "level": "error", "message": {"text": "Dangling fetch: GET /boom (apps/api/src/__tests__/error-handler.test.ts:31)"}, "properties": {"repobilityId": "54ee5656928ddf3b", "scanner": "scanner-primary", "fingerprint": "06e57b555e62f7f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5be946524785608f", "level": "error", "message": {"text": "Dangling fetch: GET /boom (apps/api/src/__tests__/error-handler.test.ts:47)"}, "properties": {"repobilityId": "e4a6a4e57becdbbc", "scanner": "scanner-primary", "fingerprint": "5be946524785608f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-23c2bfd42178754c", "level": "error", "message": {"text": "Dangling fetch: GET /boom (apps/api/src/__tests__/error-handler.test.ts:66)"}, "properties": {"repobilityId": "d072c162cd1c4e7f", "scanner": "scanner-primary", "fingerprint": "23c2bfd42178754c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e4b6df37717d288b", "level": "error", "message": {"text": "Dangling fetch: GET /boom (apps/api/src/__tests__/error-handler.test.ts:71)"}, "properties": {"repobilityId": "359a5a439ee69efe", "scanner": "scanner-primary", "fingerprint": "e4b6df37717d288b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3e2349e9809c3599", "level": "error", "message": {"text": "Dangling fetch: GET /boom (apps/api/src/__tests__/error-handler.test.ts:85)"}, "properties": {"repobilityId": "b272746a977c9bcf", "scanner": "scanner-primary", "fingerprint": "3e2349e9809c3599", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e11913aaf48663ef", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/articles/reorder (apps/api/src/__tests__/articles.test.ts:176)"}, "properties": {"repobilityId": "35b242fd5594b39f", "scanner": "scanner-primary", "fingerprint": "e11913aaf48663ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ef55f122365a336d", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/articles/reorder (apps/api/src/__tests__/articles.test.ts:193)"}, "properties": {"repobilityId": "d3820d50d07a762e", "scanner": "scanner-primary", "fingerprint": "ef55f122365a336d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-15f13d0c829f336c", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/articles/reorder (apps/api/src/__tests__/articles.test.ts:211)"}, "properties": {"repobilityId": "f3a189296dc7f2b3", "scanner": "scanner-primary", "fingerprint": "15f13d0c829f336c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-45e3b15515cf2a0b", "level": "error", "message": {"text": "Dangling fetch: PUT /api/articles/${articleId}/trips (apps/api/src/__tests__/articles.test.ts:335)"}, "properties": {"repobilityId": "b719d66ab0562308", "scanner": "scanner-primary", "fingerprint": "45e3b15515cf2a0b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ca02e62ee5953fd6", "level": "error", "message": {"text": "Dangling fetch: PUT /api/articles/${articleId}/trips (apps/api/src/__tests__/articles.test.ts:350)"}, "properties": {"repobilityId": "e73c1538a20e094f", "scanner": "scanner-primary", "fingerprint": "ca02e62ee5953fd6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-11ac0f8ca1137e22", "level": "error", "message": {"text": "Dangling fetch: PUT /api/articles/${articleId}/trips (apps/api/src/__tests__/articles.test.ts:365)"}, "properties": {"repobilityId": "a8b9ebff977c07ed", "scanner": "scanner-primary", "fingerprint": "11ac0f8ca1137e22", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6e2bd76de29ff421", "level": "error", "message": {"text": "Dangling fetch: POST /api/articles/batch-delete (apps/api/src/__tests__/articles.test.ts:498)"}, "properties": {"repobilityId": "e246d437ee7bd6b5", "scanner": "scanner-primary", "fingerprint": "6e2bd76de29ff421", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-69b73eafe0cb2b3b", "level": "error", "message": {"text": "Dangling fetch: POST /api/articles/batch-delete (apps/api/src/__tests__/articles.test.ts:515)"}, "properties": {"repobilityId": "bedad943a3234389", "scanner": "scanner-primary", "fingerprint": "69b73eafe0cb2b3b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e3af3ba50d5574fe", "level": "error", "message": {"text": "Dangling fetch: POST /api/articles/batch-delete (apps/api/src/__tests__/articles.test.ts:531)"}, "properties": {"repobilityId": "49664212318f86e7", "scanner": "scanner-primary", "fingerprint": "e3af3ba50d5574fe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6ff38d09f6b3c8ae", "level": "error", "message": {"text": "Dangling fetch: POST /api/articles/batch-delete (apps/api/src/__tests__/articles.test.ts:542)"}, "properties": {"repobilityId": "5ccc85e1bacca574", "scanner": "scanner-primary", "fingerprint": "6ff38d09f6b3c8ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-af0e0f15899d6863", "level": "error", "message": {"text": "Dangling fetch: POST /api/articles/batch-delete (apps/api/src/__tests__/articles.test.ts:553)"}, "properties": {"repobilityId": "6a27557f65a598ac", "scanner": "scanner-primary", "fingerprint": "af0e0f15899d6863", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-72a24ef888ec0410", "level": "error", "message": {"text": "Dangling fetch: GET /api/trips/${tripId}/articles (apps/api/src/__tests__/articles.test.ts:568)"}, "properties": {"repobilityId": "492edd8c1efab0a5", "scanner": "scanner-primary", "fingerprint": "72a24ef888ec0410", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8e3def4346c7902a", "level": "error", "message": {"text": "Dangling fetch: GET /api/trips/${tripId}/articles (apps/api/src/__tests__/articles.test.ts:592)"}, "properties": {"repobilityId": "728aaf87eb16578c", "scanner": "scanner-primary", "fingerprint": "8e3def4346c7902a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e807cfb30883c00d", "level": "error", "message": {"text": "Dangling fetch: POST /api/articles/${articleId}/like (apps/api/src/__tests__/articles.test.ts:621)"}, "properties": {"repobilityId": "ee57b42599b5111f", "scanner": "scanner-primary", "fingerprint": "e807cfb30883c00d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3a19c932f0f3a0a7", "level": "error", "message": {"text": "Dangling fetch: POST /api/articles/${articleId}/like (apps/api/src/__tests__/articles.test.ts:639)"}, "properties": {"repobilityId": "b2bfa52905a2ab64", "scanner": "scanner-primary", "fingerprint": "3a19c932f0f3a0a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2e3f4c1031a3fbfa", "level": "error", "message": {"text": "Dangling fetch: POST /api/articles/${articleId}/like (apps/api/src/__tests__/articles.test.ts:651)"}, "properties": {"repobilityId": "2c08705918e1dc42", "scanner": "scanner-primary", "fingerprint": "2e3f4c1031a3fbfa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6cbf88632f0bbfce", "level": "error", "message": {"text": "Dangling fetch: POST /api/articles/not-a-uuid/like (apps/api/src/__tests__/articles.test.ts:658)"}, "properties": {"repobilityId": "8e38901067be3dd2", "scanner": "scanner-primary", "fingerprint": "6cbf88632f0bbfce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ab9d905007124ddb", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/articles/${articleId}/like (apps/api/src/__tests__/articles.test.ts:672)"}, "properties": {"repobilityId": "560ccdb8b90c3f5a", "scanner": "scanner-primary", "fingerprint": "ab9d905007124ddb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-03adeeb5f4c416e4", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/articles/${articleId}/like (apps/api/src/__tests__/articles.test.ts:690)"}, "properties": {"repobilityId": "ebe582895c4b1116", "scanner": "scanner-primary", "fingerprint": "03adeeb5f4c416e4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3aa73bdb74cf96b6", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/articles/${articleId}/like (apps/api/src/__tests__/articles.test.ts:709)"}, "properties": {"repobilityId": "7f738723bf8d1138", "scanner": "scanner-primary", "fingerprint": "3aa73bdb74cf96b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-80f2b596ad6d66c0", "level": "error", "message": {"text": "Dangling fetch: GET /api/articles/not-a-uuid (apps/api/src/__tests__/articles.test.ts:722)"}, "properties": {"repobilityId": "5683f06ae8c9b57d", "scanner": "scanner-primary", "fingerprint": "80f2b596ad6d66c0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-859430699a918db0", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/articles/not-a-uuid (apps/api/src/__tests__/articles.test.ts:728)"}, "properties": {"repobilityId": "c32784473f1dd9b2", "scanner": "scanner-primary", "fingerprint": "859430699a918db0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d07beaa12a4f3f0a", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/articles/not-a-uuid (apps/api/src/__tests__/articles.test.ts:738)"}, "properties": {"repobilityId": "0544d6f89d2e13bd", "scanner": "scanner-primary", "fingerprint": "d07beaa12a4f3f0a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-abe1cd93199c9d6e", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/not-a-uuid/articles (apps/api/src/__tests__/profile.test.ts:106)"}, "properties": {"repobilityId": "360b5ef9513f4097", "scanner": "scanner-primary", "fingerprint": "abe1cd93199c9d6e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-444cbd4ecaf73a8c", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists (apps/api/src/__tests__/profile.test.ts:132)"}, "properties": {"repobilityId": "ed9f631dd93a60ce", "scanner": "scanner-primary", "fingerprint": "444cbd4ecaf73a8c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-186f664b22167761", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists (apps/api/src/__tests__/profile.test.ts:149)"}, "properties": {"repobilityId": "8c2aec225f6f7f02", "scanner": "scanner-primary", "fingerprint": "186f664b22167761", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7a0c061fef21d1b2", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists (apps/api/src/__tests__/profile.test.ts:159)"}, "properties": {"repobilityId": "7b6214ea6d082f8f", "scanner": "scanner-primary", "fingerprint": "7a0c061fef21d1b2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-debe737b1dd6d101", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/${ownerId}/profile (apps/api/src/__tests__/profile.test.ts:286)"}, "properties": {"repobilityId": "8869400ad9eb4292", "scanner": "scanner-primary", "fingerprint": "debe737b1dd6d101", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1c3e640fbc643142", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists/${listId} (apps/api/src/__tests__/profile.test.ts:337)"}, "properties": {"repobilityId": "ae6b60f7ee128b91", "scanner": "scanner-primary", "fingerprint": "1c3e640fbc643142", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-48886bbb8a922b3c", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists/${listId} (apps/api/src/__tests__/profile.test.ts:353)"}, "properties": {"repobilityId": "3309feec11e63be1", "scanner": "scanner-primary", "fingerprint": "48886bbb8a922b3c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cb62afbb50c3a981", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists/${listId} (apps/api/src/__tests__/profile.test.ts:361)"}, "properties": {"repobilityId": "3afae0491ca51e63", "scanner": "scanner-primary", "fingerprint": "cb62afbb50c3a981", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d2d618eda654e3f9", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/${ownerId}/bookmark-lists/${listId} (apps/api/src/__tests__/profile.test.ts:436)"}, "properties": {"repobilityId": "babfefd28d44e948", "scanner": "scanner-primary", "fingerprint": "d2d618eda654e3f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-38479ac7d05de7e5", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/users/user-target/trip-limit (apps/api/src/__tests__/admin-users.test.ts:120)"}, "properties": {"repobilityId": "387a01bd4c933615", "scanner": "scanner-primary", "fingerprint": "38479ac7d05de7e5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6683aa5730009dec", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/users/user-target/trip-limit (apps/api/src/__tests__/admin-users.test.ts:133)"}, "properties": {"repobilityId": "d585d3ba12b01c6c", "scanner": "scanner-primary", "fingerprint": "6683aa5730009dec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c34d4f477d8ef870", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/users/non-existent-id/trip-limit (apps/api/src/__tests__/admin-users.test.ts:153)"}, "properties": {"repobilityId": "2e111f70260d6d19", "scanner": "scanner-primary", "fingerprint": "c34d4f477d8ef870", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ddadf19dde4db738", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/users/user-target/trip-limit (apps/api/src/__tests__/admin-users.test.ts:173)"}, "properties": {"repobilityId": "80977721a0ef818d", "scanner": "scanner-primary", "fingerprint": "ddadf19dde4db738", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9954a291946363eb", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/users/some-user-id/temp-password (apps/api/src/__tests__/admin-users.test.ts:204)"}, "properties": {"repobilityId": "e21c16fc35f3d96b", "scanner": "scanner-primary", "fingerprint": "9954a291946363eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-076091b759347fe6", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/users/non-existent-id/temp-password (apps/api/src/__tests__/admin-users.test.ts:222)"}, "properties": {"repobilityId": "d0dbf984824c69ad", "scanner": "scanner-primary", "fingerprint": "076091b759347fe6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-715694abbfd6210e", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/users/user-target/temp-password (apps/api/src/__tests__/admin-users.test.ts:240)"}, "properties": {"repobilityId": "074a7d5a7060b7e2", "scanner": "scanner-primary", "fingerprint": "715694abbfd6210e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d400cae4683dd7bc", "level": "error", "message": {"text": "Dangling fetch: GET /api/directions?tripId=trip-1 (apps/api/src/__tests__/directions.test.ts:99)"}, "properties": {"repobilityId": "05fbe694efad3e49", "scanner": "scanner-primary", "fingerprint": "d400cae4683dd7bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5d178fb1475a0ed1", "level": "error", "message": {"text": "Dangling fetch: GET /api/groups (apps/api/src/__tests__/groups.test.ts:87)"}, "properties": {"repobilityId": "228cccada6639205", "scanner": "scanner-primary", "fingerprint": "5d178fb1475a0ed1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f856e535ef5ff6eb", "level": "error", "message": {"text": "Dangling fetch: GET /api/groups (apps/api/src/__tests__/groups.test.ts:101)"}, "properties": {"repobilityId": "37f08b56b1148a92", "scanner": "scanner-primary", "fingerprint": "f856e535ef5ff6eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9ba4a686ad6bb15a", "level": "error", "message": {"text": "Dangling fetch: GET /api/groups (apps/api/src/__tests__/groups.test.ts:112)"}, "properties": {"repobilityId": "eb6ca310c06986fb", "scanner": "scanner-primary", "fingerprint": "9ba4a686ad6bb15a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-322c99bd13a57b9c", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups (apps/api/src/__tests__/groups.test.ts:135)"}, "properties": {"repobilityId": "5ca97cf5a0e08420", "scanner": "scanner-primary", "fingerprint": "322c99bd13a57b9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9b8deabe7a8d2c0b", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups (apps/api/src/__tests__/groups.test.ts:149)"}, "properties": {"repobilityId": "566a856f677f1f53", "scanner": "scanner-primary", "fingerprint": "9b8deabe7a8d2c0b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cfcfafc2e38384bc", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups (apps/api/src/__tests__/groups.test.ts:162)"}, "properties": {"repobilityId": "8fe5914950f4e722", "scanner": "scanner-primary", "fingerprint": "cfcfafc2e38384bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3a9fd8ec8fb0f1f4", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/groups/${groupId} (apps/api/src/__tests__/groups.test.ts:196)"}, "properties": {"repobilityId": "d53e20f70027f1fd", "scanner": "scanner-primary", "fingerprint": "3a9fd8ec8fb0f1f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6e32c40e58079f0d", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/groups/${groupId} (apps/api/src/__tests__/groups.test.ts:211)"}, "properties": {"repobilityId": "9ec013dfb387168b", "scanner": "scanner-primary", "fingerprint": "6e32c40e58079f0d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1b2232a4bb455b53", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/groups/${groupId} (apps/api/src/__tests__/groups.test.ts:225)"}, "properties": {"repobilityId": "458f21c0c60d0928", "scanner": "scanner-primary", "fingerprint": "1b2232a4bb455b53", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0817af76b13abea1", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/groups/${groupId} (apps/api/src/__tests__/groups.test.ts:248)"}, "properties": {"repobilityId": "8f40fbc349c65376", "scanner": "scanner-primary", "fingerprint": "0817af76b13abea1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fc6eba5c1872265c", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/groups/${groupId} (apps/api/src/__tests__/groups.test.ts:261)"}, "properties": {"repobilityId": "4aa58c274680532c", "scanner": "scanner-primary", "fingerprint": "fc6eba5c1872265c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-12bd2ed18f7d90fe", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/groups/${groupId} (apps/api/src/__tests__/groups.test.ts:273)"}, "properties": {"repobilityId": "e9c77bba10c32d77", "scanner": "scanner-primary", "fingerprint": "12bd2ed18f7d90fe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c4fb71ba2a0113b3", "level": "error", "message": {"text": "Dangling fetch: GET /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:298)"}, "properties": {"repobilityId": "cfa19d7d0d835cb2", "scanner": "scanner-primary", "fingerprint": "c4fb71ba2a0113b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3dd3ab3350027035", "level": "error", "message": {"text": "Dangling fetch: GET /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:311)"}, "properties": {"repobilityId": "55af0415dc45bd9d", "scanner": "scanner-primary", "fingerprint": "3dd3ab3350027035", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1aa77986305caa20", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:335)"}, "properties": {"repobilityId": "095e6ac1568a505b", "scanner": "scanner-primary", "fingerprint": "1aa77986305caa20", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-484544b7d64d5bef", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:348)"}, "properties": {"repobilityId": "dc5b7c2cda63a449", "scanner": "scanner-primary", "fingerprint": "484544b7d64d5bef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6a05621c492f546f", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:366)"}, "properties": {"repobilityId": "9691800cdb8bbabd", "scanner": "scanner-primary", "fingerprint": "6a05621c492f546f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-09b4c17e7a650a54", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:393)"}, "properties": {"repobilityId": "622d4d8f9c6c65a9", "scanner": "scanner-primary", "fingerprint": "09b4c17e7a650a54", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6064b1408d52df6a", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:420)"}, "properties": {"repobilityId": "1502114a8ea4cc9f", "scanner": "scanner-primary", "fingerprint": "6064b1408d52df6a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-59b17fee41a2f5a3", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:444)"}, "properties": {"repobilityId": "2fc0678c92a51f24", "scanner": "scanner-primary", "fingerprint": "59b17fee41a2f5a3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b3cf1fd3f3c443ae", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:466)"}, "properties": {"repobilityId": "0b6ed569aaa9204c", "scanner": "scanner-primary", "fingerprint": "b3cf1fd3f3c443ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5c8fb2684eff11bd", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups/${groupId}/members (apps/api/src/__tests__/groups.test.ts:489)"}, "properties": {"repobilityId": "4812c6f027bd80a5", "scanner": "scanner-primary", "fingerprint": "5c8fb2684eff11bd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5f62cbd41eeef6e3", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups/${groupId}/members/bulk (apps/api/src/__tests__/groups.test.ts:546)"}, "properties": {"repobilityId": "ff0c7ba666770abf", "scanner": "scanner-primary", "fingerprint": "5f62cbd41eeef6e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8e066df19fa32e75", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups/${groupId}/members/bulk (apps/api/src/__tests__/groups.test.ts:574)"}, "properties": {"repobilityId": "4ea9b114fb35f5e7", "scanner": "scanner-primary", "fingerprint": "8e066df19fa32e75", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4eedec7991e38619", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups/${groupId}/members/bulk (apps/api/src/__tests__/groups.test.ts:591)"}, "properties": {"repobilityId": "0c4ea17baabb90a7", "scanner": "scanner-primary", "fingerprint": "4eedec7991e38619", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6300caa0d036d06f", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups/${groupId}/members/bulk (apps/api/src/__tests__/groups.test.ts:608)"}, "properties": {"repobilityId": "24170acba149f608", "scanner": "scanner-primary", "fingerprint": "6300caa0d036d06f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cfe668385dee6125", "level": "error", "message": {"text": "Dangling fetch: POST /api/groups/${groupId}/members/bulk (apps/api/src/__tests__/groups.test.ts:626)"}, "properties": {"repobilityId": "69cd156a1ec74667", "scanner": "scanner-primary", "fingerprint": "cfe668385dee6125", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7df5617615c33ecf", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/groups/${groupId}/members/${otherUserId} (apps/api/src/__tests__/groups.test.ts:653)"}, "properties": {"repobilityId": "64b1175c7e7730bc", "scanner": "scanner-primary", "fingerprint": "7df5617615c33ecf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7bed6e4004056c56", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/groups/${groupId}/members/${otherUserId} (apps/api/src/__tests__/groups.test.ts:671)"}, "properties": {"repobilityId": "1af68ff7d6ad528c", "scanner": "scanner-primary", "fingerprint": "7bed6e4004056c56", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4fcbdb35d4da811b", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/groups/${groupId}/members/${otherUserId} (apps/api/src/__tests__/groups.test.ts:682)"}, "properties": {"repobilityId": "e5a7305261e2f887", "scanner": "scanner-primary", "fingerprint": "4fcbdb35d4da811b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6f013b893dd28466", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/settlement-payments (apps/api/src/__tests__/settlement-payments.test.ts:115)"}, "properties": {"repobilityId": "f6543c9a4a1571a0", "scanner": "scanner-primary", "fingerprint": "6f013b893dd28466", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0ade091c6bdd3f0d", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/settlement-payments (apps/api/src/__tests__/settlement-payments.test.ts:135)"}, "properties": {"repobilityId": "1c693b3c1953d7c8", "scanner": "scanner-primary", "fingerprint": "0ade091c6bdd3f0d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-14cb0bf6457da6c4", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/settlement-payments (apps/api/src/__tests__/settlement-payments.test.ts:145)"}, "properties": {"repobilityId": "461c5e20decf171b", "scanner": "scanner-primary", "fingerprint": "14cb0bf6457da6c4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-931a412473c3fec0", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/settlement-payments (apps/api/src/__tests__/settlement-payments.test.ts:167)"}, "properties": {"repobilityId": "cc21fed68bc127ea", "scanner": "scanner-primary", "fingerprint": "931a412473c3fec0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8a6ab3906dafd2b7", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/settlement-payments/sp-1 (apps/api/src/__tests__/settlement-payments.test.ts:195)"}, "properties": {"repobilityId": "455022459d570216", "scanner": "scanner-primary", "fingerprint": "8a6ab3906dafd2b7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b1c376e48fbbfed6", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/settlement-payments/sp-missing (apps/api/src/__tests__/settlement-payments.test.ts:208)"}, "properties": {"repobilityId": "2a754de2d23603e5", "scanner": "scanner-primary", "fingerprint": "b1c376e48fbbfed6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-128c720649014cc4", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/settlement-payments/sp-1 (apps/api/src/__tests__/settlement-payments.test.ts:226)"}, "properties": {"repobilityId": "cdbeab92ed563eba", "scanner": "scanner-primary", "fingerprint": "128c720649014cc4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1470cca2fb4b61b3", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/${fromUserId}/unsettled-summary (apps/api/src/__tests__/settlement-payments.test.ts:245)"}, "properties": {"repobilityId": "26901027e2dc6f71", "scanner": "scanner-primary", "fingerprint": "1470cca2fb4b61b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-aa66bcd591c9b243", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/other-user/unsettled-summary (apps/api/src/__tests__/settlement-payments.test.ts:255)"}, "properties": {"repobilityId": "f40603e8452971c7", "scanner": "scanner-primary", "fingerprint": "aa66bcd591c9b243", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-becf3da236221596", "level": "error", "message": {"text": "Dangling fetch: GET /api/users/${fromUserId}/unsettled-summary (apps/api/src/__tests__/settlement-payments.test.ts:288)"}, "properties": {"repobilityId": "8e9a1af3bdb60136", "scanner": "scanner-primary", "fingerprint": "becf3da236221596", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2f9da823e458cdcf", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:268)"}, "properties": {"repobilityId": "00153e71a8218cd5", "scanner": "scanner-primary", "fingerprint": "2f9da823e458cdcf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d839e9e8dd3e17b8", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:285)"}, "properties": {"repobilityId": "1ea0ad2b6874d802", "scanner": "scanner-primary", "fingerprint": "d839e9e8dd3e17b8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6eb72b66dd671be3", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:296)"}, "properties": {"repobilityId": "17284ff40f802b39", "scanner": "scanner-primary", "fingerprint": "6eb72b66dd671be3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f62c9dd22c54357c", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:312)"}, "properties": {"repobilityId": "ca0bdced8a19d2bb", "scanner": "scanner-primary", "fingerprint": "f62c9dd22c54357c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-25db69dc330cf410", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/batch-delete (apps/api/src/__tests__/bookmark-lists.test.ts:334)"}, "properties": {"repobilityId": "3a10e2cd96aae3cd", "scanner": "scanner-primary", "fingerprint": "25db69dc330cf410", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c5297cff0093d055", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/batch-delete (apps/api/src/__tests__/bookmark-lists.test.ts:349)"}, "properties": {"repobilityId": "03c7a326e9e84e4d", "scanner": "scanner-primary", "fingerprint": "c5297cff0093d055", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d7f4ef16ebcdd76f", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/batch-delete (apps/api/src/__tests__/bookmark-lists.test.ts:360)"}, "properties": {"repobilityId": "b909dbf72fe9a39e", "scanner": "scanner-primary", "fingerprint": "d7f4ef16ebcdd76f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-54a2abc60a1a10c6", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/batch-duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:403)"}, "properties": {"repobilityId": "d3aa1883b44d5f85", "scanner": "scanner-primary", "fingerprint": "54a2abc60a1a10c6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-701e2220119737c7", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/batch-duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:418)"}, "properties": {"repobilityId": "cf0f5083dcb33f4d", "scanner": "scanner-primary", "fingerprint": "701e2220119737c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8f03f73595823510", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/batch-duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:438)"}, "properties": {"repobilityId": "593094600d05e29b", "scanner": "scanner-primary", "fingerprint": "8f03f73595823510", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5892906d573e3e09", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/batch-duplicate (apps/api/src/__tests__/bookmark-lists.test.ts:449)"}, "properties": {"repobilityId": "e2d13a6495b9e08d", "scanner": "scanner-primary", "fingerprint": "5892906d573e3e09", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-154a2cf862b01093", "level": "error", "message": {"text": "Dangling fetch: GET /api/notification-preferences (apps/api/src/__tests__/notification-preferences.test.ts:39)"}, "properties": {"repobilityId": "d4871e6b81f70f3f", "scanner": "scanner-primary", "fingerprint": "154a2cf862b01093", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7970fe14e663e413", "level": "error", "message": {"text": "Dangling fetch: PUT /api/notification-preferences (apps/api/src/__tests__/notification-preferences.test.ts:45)"}, "properties": {"repobilityId": "ec0846fa9eaa7464", "scanner": "scanner-primary", "fingerprint": "7970fe14e663e413", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c8ada61bb5692124", "level": "error", "message": {"text": "Dangling fetch: PUT /api/notification-preferences (apps/api/src/__tests__/notification-preferences.test.ts:56)"}, "properties": {"repobilityId": "c34d548489f8450e", "scanner": "scanner-primary", "fingerprint": "c8ada61bb5692124", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-bac17e195c77bcc1", "level": "error", "message": {"text": "Dangling fetch: POST /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:59)"}, "properties": {"repobilityId": "2bac576f897b22c6", "scanner": "scanner-primary", "fingerprint": "bac17e195c77bcc1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-bb2e3c24cb1fa005", "level": "error", "message": {"text": "Dangling fetch: POST /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:87)"}, "properties": {"repobilityId": "e0ece76440154cc4", "scanner": "scanner-primary", "fingerprint": "bb2e3c24cb1fa005", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c382ef55443b4111", "level": "error", "message": {"text": "Dangling fetch: POST /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:115)"}, "properties": {"repobilityId": "ce63b3e45c11ba5e", "scanner": "scanner-primary", "fingerprint": "c382ef55443b4111", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c8fcf7faac0081a7", "level": "error", "message": {"text": "Dangling fetch: POST /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:145)"}, "properties": {"repobilityId": "23a409e159397ffa", "scanner": "scanner-primary", "fingerprint": "c8fcf7faac0081a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-320c65eff8175ff4", "level": "error", "message": {"text": "Dangling fetch: POST /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:157)"}, "properties": {"repobilityId": "3819c817e7fd134a", "scanner": "scanner-primary", "fingerprint": "320c65eff8175ff4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d5364f8fd68c7570", "level": "error", "message": {"text": "Dangling fetch: PUT /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:184)"}, "properties": {"repobilityId": "eb14d4ae572f33f3", "scanner": "scanner-primary", "fingerprint": "d5364f8fd68c7570", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2834f8346c47fe7b", "level": "error", "message": {"text": "Dangling fetch: PUT /api/polls/poll-1/share (apps/api/src/__tests__/poll-share.test.ts:196)"}, "properties": {"repobilityId": "8fd601b02e529d4f", "scanner": "scanner-primary", "fingerprint": "2834f8346c47fe7b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-87a52793697e2bcb", "level": "error", "message": {"text": "Dangling fetch: GET /api/shared/polls/valid-token (apps/api/src/__tests__/poll-share.test.ts:219)"}, "properties": {"repobilityId": "1afd4ef49febbabd", "scanner": "scanner-primary", "fingerprint": "87a52793697e2bcb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c6bd33c08a174e75", "level": "error", "message": {"text": "Dangling fetch: GET /api/shared/polls/expired-token (apps/api/src/__tests__/poll-share.test.ts:244)"}, "properties": {"repobilityId": "1d0b0204721a8fc0", "scanner": "scanner-primary", "fingerprint": "c6bd33c08a174e75", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5ed42ce0baedd8a3", "level": "error", "message": {"text": "Dangling fetch: GET /api/shared/polls/invalid-token (apps/api/src/__tests__/poll-share.test.ts:253)"}, "properties": {"repobilityId": "becf133d5fb48e29", "scanner": "scanner-primary", "fingerprint": "5ed42ce0baedd8a3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-04e6fc465283414d", "level": "error", "message": {"text": "Dangling fetch: GET /api/shared/polls/valid-token (apps/api/src/__tests__/poll-share.test.ts:275)"}, "properties": {"repobilityId": "6be84a42e8a07c3a", "scanner": "scanner-primary", "fingerprint": "04e6fc465283414d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-91e5f7d2f5d33e3f", "level": "error", "message": {"text": "Dangling fetch: GET /api/shared/polls/valid-token (apps/api/src/__tests__/poll-share.test.ts:301)"}, "properties": {"repobilityId": "a5b9c1dfab974c04", "scanner": "scanner-primary", "fingerprint": "91e5f7d2f5d33e3f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a27e795ba2482402", "level": "error", "message": {"text": "Dangling fetch: GET /api/shared/polls/valid-token (apps/api/src/__tests__/poll-share.test.ts:304)"}, "properties": {"repobilityId": "1da55805b60c81fd", "scanner": "scanner-primary", "fingerprint": "a27e795ba2482402", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-77ecf99f32efa226", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/schedules/batch-unassign (apps/api/src/__tests__/schedules.test.ts:476)"}, "properties": {"repobilityId": "9c9292468038d8c2", "scanner": "scanner-primary", "fingerprint": "77ecf99f32efa226", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4b491c61ebf14a25", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/schedules/batch-unassign (apps/api/src/__tests__/schedules.test.ts:489)"}, "properties": {"repobilityId": "c7756f8422e639c8", "scanner": "scanner-primary", "fingerprint": "4b491c61ebf14a25", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1ad0bdfd2ef77c7f", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/schedules/batch-unassign (apps/api/src/__tests__/schedules.test.ts:504)"}, "properties": {"repobilityId": "16b7b7d96d598633", "scanner": "scanner-primary", "fingerprint": "1ad0bdfd2ef77c7f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a7943dd7a336f69a", "level": "error", "message": {"text": "Dangling fetch: GET /protected (apps/api/src/__tests__/guest.test.ts:49)"}, "properties": {"repobilityId": "fbc6f3079009f809", "scanner": "scanner-primary", "fingerprint": "a7943dd7a336f69a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fe26feca0b5b72a2", "level": "error", "message": {"text": "Dangling fetch: GET /protected (apps/api/src/__tests__/guest.test.ts:67)"}, "properties": {"repobilityId": "87f89c62d3b49a94", "scanner": "scanner-primary", "fingerprint": "fe26feca0b5b72a2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fbb66ed9ac1036e3", "level": "error", "message": {"text": "Dangling fetch: GET /protected (apps/api/src/__tests__/guest.test.ts:92)"}, "properties": {"repobilityId": "c179b213e596b50b", "scanner": "scanner-primary", "fingerprint": "fbb66ed9ac1036e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-324d6c4dff1f867d", "level": "error", "message": {"text": "Dangling fetch: GET /protected (apps/api/src/__tests__/guest.test.ts:109)"}, "properties": {"repobilityId": "288e0b00b67c1da4", "scanner": "scanner-primary", "fingerprint": "324d6c4dff1f867d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9ca28d00861dec9c", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:56)"}, "properties": {"repobilityId": "26f9cb4e2f6d2cf9", "scanner": "scanner-primary", "fingerprint": "9ca28d00861dec9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3383d86e61fe83d2", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:67)"}, "properties": {"repobilityId": "d7d8cd6cd9631744", "scanner": "scanner-primary", "fingerprint": "3383d86e61fe83d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c913f8dc8d802426", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:82)"}, "properties": {"repobilityId": "7289759e8bba1e04", "scanner": "scanner-primary", "fingerprint": "c913f8dc8d802426", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-65eebdd65998dc35", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:98)"}, "properties": {"repobilityId": "c22c21e09939b7a9", "scanner": "scanner-primary", "fingerprint": "65eebdd65998dc35", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-42c6873f27ed6eed", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:127)"}, "properties": {"repobilityId": "b05a0a0962a9bef5", "scanner": "scanner-primary", "fingerprint": "42c6873f27ed6eed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0e441c9724fb2b33", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:155)"}, "properties": {"repobilityId": "866cb2d21edbc049", "scanner": "scanner-primary", "fingerprint": "0e441c9724fb2b33", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f3951072b180606c", "level": "error", "message": {"text": "Dangling fetch: PUT /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:181)"}, "properties": {"repobilityId": "9eb4f1a27ecffe5e", "scanner": "scanner-primary", "fingerprint": "f3951072b180606c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e5a38ba27f5cd0b6", "level": "error", "message": {"text": "Dangling fetch: PUT /api/trips/trip-1/share (apps/api/src/__tests__/share.test.ts:199)"}, "properties": {"repobilityId": "7d86dc04855d34bc", "scanner": "scanner-primary", "fingerprint": "e5a38ba27f5cd0b6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-373cdac2be2d032d", "level": "error", "message": {"text": "Dangling fetch: GET /api/shared/invalid-token (apps/api/src/__tests__/share.test.ts:212)"}, "properties": {"repobilityId": "7f16ebce3e8e3fba", "scanner": "scanner-primary", "fingerprint": "373cdac2be2d032d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e0cf1719b67d5253", "level": "error", "message": {"text": "Dangling fetch: GET /api/shared/valid-token (apps/api/src/__tests__/share.test.ts:233)"}, "properties": {"repobilityId": "e5f33b0cd511e3aa", "scanner": "scanner-primary", "fingerprint": "e0cf1719b67d5253", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d96fd17146262dd9", "level": "error", "message": {"text": "Dangling fetch: GET /api/shared/valid-token (apps/api/src/__tests__/share.test.ts:286)"}, "properties": {"repobilityId": "b0fdf8b46bd6fad3", "scanner": "scanner-primary", "fingerprint": "d96fd17146262dd9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-680eb5a87d9ba565", "level": "error", "message": {"text": "Dangling fetch: GET /api/shared/exact-expiry-token (apps/api/src/__tests__/share.test.ts:311)"}, "properties": {"repobilityId": "2a15e775b92c09f4", "scanner": "scanner-primary", "fingerprint": "680eb5a87d9ba565", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-926424032bbac964", "level": "error", "message": {"text": "Dangling fetch: GET /api/shared/expired-token (apps/api/src/__tests__/share.test.ts:329)"}, "properties": {"repobilityId": "6a0d6750e77ce15a", "scanner": "scanner-primary", "fingerprint": "926424032bbac964", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-75905e068de542c1", "level": "error", "message": {"text": "Dangling fetch: GET /api/shared/valid-token (apps/api/src/__tests__/share.test.ts:346)"}, "properties": {"repobilityId": "22d87de448e9bb05", "scanner": "scanner-primary", "fingerprint": "75905e068de542c1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-239195c8615fa6d0", "level": "error", "message": {"text": "Dangling fetch: GET /api/shared/valid-token (apps/api/src/__tests__/share.test.ts:371)"}, "properties": {"repobilityId": "773edb611744a0f0", "scanner": "scanner-primary", "fingerprint": "239195c8615fa6d0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-df3ad4ba89cd7c3c", "level": "error", "message": {"text": "Dangling fetch: GET /api/shared/valid-token (apps/api/src/__tests__/share.test.ts:374)"}, "properties": {"repobilityId": "919e08b3742307f6", "scanner": "scanner-primary", "fingerprint": "df3ad4ba89cd7c3c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2dd8383cc0187fcb", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:25)"}, "properties": {"repobilityId": "63deaf4bfd806b2a", "scanner": "scanner-primary", "fingerprint": "2dd8383cc0187fcb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7ea2512e4b9e3ac7", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:39)"}, "properties": {"repobilityId": "7951b646c9be91d1", "scanner": "scanner-primary", "fingerprint": "7ea2512e4b9e3ac7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f3ba5a35520933b7", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:40)"}, "properties": {"repobilityId": "cde602da60a3ba52", "scanner": "scanner-primary", "fingerprint": "f3ba5a35520933b7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-08bcd6088fcbc551", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:41)"}, "properties": {"repobilityId": "d0b15b19d48e9254", "scanner": "scanner-primary", "fingerprint": "08bcd6088fcbc551", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7086b2c3df370202", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:53)"}, "properties": {"repobilityId": "d6a3c71e9251efce", "scanner": "scanner-primary", "fingerprint": "7086b2c3df370202", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-030f36b214d2ea93", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:54)"}, "properties": {"repobilityId": "332f538e638e047d", "scanner": "scanner-primary", "fingerprint": "030f36b214d2ea93", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-98ab104951013e17", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:67)"}, "properties": {"repobilityId": "6bd432ed7fcc5d14", "scanner": "scanner-primary", "fingerprint": "98ab104951013e17", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3671b532ed0b494d", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:68)"}, "properties": {"repobilityId": "8ab74b2e10658d15", "scanner": "scanner-primary", "fingerprint": "3671b532ed0b494d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2f34113e72bcacfe", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:73)"}, "properties": {"repobilityId": "afc745b668836a59", "scanner": "scanner-primary", "fingerprint": "2f34113e72bcacfe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-66a572658010eafe", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:82)"}, "properties": {"repobilityId": "8c99c6af1e33ef23", "scanner": "scanner-primary", "fingerprint": "66a572658010eafe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9baf40e3d30079cc", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:85)"}, "properties": {"repobilityId": "5b8027524a5c98a9", "scanner": "scanner-primary", "fingerprint": "9baf40e3d30079cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4be2dab95c366869", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:97)"}, "properties": {"repobilityId": "d87acced8ab4c54a", "scanner": "scanner-primary", "fingerprint": "4be2dab95c366869", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-52ca301f5913ba63", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:101)"}, "properties": {"repobilityId": "04846b4a19612f9e", "scanner": "scanner-primary", "fingerprint": "52ca301f5913ba63", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6394b9527a75ae84", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:114)"}, "properties": {"repobilityId": "97a4c801cb805cab", "scanner": "scanner-primary", "fingerprint": "6394b9527a75ae84", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c43b007c9cf40c6e", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:117)"}, "properties": {"repobilityId": "4c98f68c7454f00e", "scanner": "scanner-primary", "fingerprint": "c43b007c9cf40c6e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2c61467bca3b60ac", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:154)"}, "properties": {"repobilityId": "a1cad26e0e6ccf7c", "scanner": "scanner-primary", "fingerprint": "2c61467bca3b60ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b5be3d6c72fefd8e", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:170)"}, "properties": {"repobilityId": "3e72d6c8f7e29c6d", "scanner": "scanner-primary", "fingerprint": "b5be3d6c72fefd8e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a51bcdcd4db15bfd", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:187)"}, "properties": {"repobilityId": "0d300bbddad8af54", "scanner": "scanner-primary", "fingerprint": "a51bcdcd4db15bfd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d68828782821a07b", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:188)"}, "properties": {"repobilityId": "236a042589d4d832", "scanner": "scanner-primary", "fingerprint": "d68828782821a07b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ee26605b6911d6e3", "level": "error", "message": {"text": "Dangling fetch: GET /test (apps/api/src/__tests__/rate-limit.test.ts:201)"}, "properties": {"repobilityId": "09ab26b851c9986d", "scanner": "scanner-primary", "fingerprint": "ee26605b6911d6e3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-13ef8d786c1a2618", "level": "error", "message": {"text": "Dangling fetch: POST /api/quick-polls (apps/api/src/__tests__/quick-polls.test.ts:71)"}, "properties": {"repobilityId": "2c0d3d941fbd9b22", "scanner": "scanner-primary", "fingerprint": "13ef8d786c1a2618", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0a235edb95693def", "level": "error", "message": {"text": "Dangling fetch: POST /api/quick-polls (apps/api/src/__tests__/quick-polls.test.ts:84)"}, "properties": {"repobilityId": "3194832291155956", "scanner": "scanner-primary", "fingerprint": "0a235edb95693def", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-80277e03b8ce1972", "level": "error", "message": {"text": "Dangling fetch: POST /api/quick-polls (apps/api/src/__tests__/quick-polls.test.ts:99)"}, "properties": {"repobilityId": "890be35609c3bc05", "scanner": "scanner-primary", "fingerprint": "80277e03b8ce1972", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e5b4dff6fc1979c2", "level": "error", "message": {"text": "Dangling fetch: GET /api/quick-polls (apps/api/src/__tests__/quick-polls.test.ts:127)"}, "properties": {"repobilityId": "8400cbacdce23e45", "scanner": "scanner-primary", "fingerprint": "e5b4dff6fc1979c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-27c8c03d7c76f307", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/quick-polls/poll-1 (apps/api/src/__tests__/quick-polls.test.ts:147)"}, "properties": {"repobilityId": "453e0f54dc0f7c16", "scanner": "scanner-primary", "fingerprint": "27c8c03d7c76f307", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7d143b058603ba9f", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/quick-polls/poll-1 (apps/api/src/__tests__/quick-polls.test.ts:159)"}, "properties": {"repobilityId": "3f6b5e6a933b9688", "scanner": "scanner-primary", "fingerprint": "7d143b058603ba9f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f71e43ae8acfb9e0", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/quick-polls/poll-1 (apps/api/src/__tests__/quick-polls.test.ts:178)"}, "properties": {"repobilityId": "e20bd2029411787f", "scanner": "scanner-primary", "fingerprint": "f71e43ae8acfb9e0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6b4ecaa7dfd12af3", "level": "error", "message": {"text": "Dangling fetch: GET /api/shared/quick-polls/abc123 (apps/api/src/__tests__/quick-polls.test.ts:211)"}, "properties": {"repobilityId": "3bf4cd1ef64293bd", "scanner": "scanner-primary", "fingerprint": "6b4ecaa7dfd12af3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-51234c39e3141692", "level": "error", "message": {"text": "Dangling fetch: GET /api/shared/quick-polls/expired (apps/api/src/__tests__/quick-polls.test.ts:228)"}, "properties": {"repobilityId": "2b82eebe8bf619cc", "scanner": "scanner-primary", "fingerprint": "51234c39e3141692", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b399b3b9c5bafdb9", "level": "error", "message": {"text": "Dangling fetch: GET /api/shared/quick-polls/nonexistent (apps/api/src/__tests__/quick-polls.test.ts:236)"}, "properties": {"repobilityId": "f333def49e9e3748", "scanner": "scanner-primary", "fingerprint": "b399b3b9c5bafdb9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a0c6a7311bd8caff", "level": "error", "message": {"text": "Dangling fetch: POST /api/shared/quick-polls/abc123/vote (apps/api/src/__tests__/quick-polls.test.ts:261)"}, "properties": {"repobilityId": "2e97d43ac1e11052", "scanner": "scanner-primary", "fingerprint": "a0c6a7311bd8caff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8ae3aac9d9e8f897", "level": "error", "message": {"text": "Dangling fetch: POST /api/shared/quick-polls/abc123/vote (apps/api/src/__tests__/quick-polls.test.ts:282)"}, "properties": {"repobilityId": "d69f1efb2225790d", "scanner": "scanner-primary", "fingerprint": "8ae3aac9d9e8f897", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b86ad5d2760ca3a4", "level": "error", "message": {"text": "Dangling fetch: POST /api/shared/quick-polls/abc123/vote (apps/api/src/__tests__/quick-polls.test.ts:303)"}, "properties": {"repobilityId": "80aa2048a5051767", "scanner": "scanner-primary", "fingerprint": "b86ad5d2760ca3a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f3e670a8fa9e3695", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-delete (apps/api/src/__tests__/bookmarks.test.ts:263)"}, "properties": {"repobilityId": "06195bfb88965835", "scanner": "scanner-primary", "fingerprint": "f3e670a8fa9e3695", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d6a6f3b68a799881", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-delete (apps/api/src/__tests__/bookmarks.test.ts:275)"}, "properties": {"repobilityId": "2d8326012d3cbb96", "scanner": "scanner-primary", "fingerprint": "d6a6f3b68a799881", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2667d8792b23351e", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-delete (apps/api/src/__tests__/bookmarks.test.ts:288)"}, "properties": {"repobilityId": "34982e3b55786260", "scanner": "scanner-primary", "fingerprint": "2667d8792b23351e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fc44d2931b1830e7", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-delete (apps/api/src/__tests__/bookmarks.test.ts:301)"}, "properties": {"repobilityId": "88ea4d19296aa916", "scanner": "scanner-primary", "fingerprint": "fc44d2931b1830e7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1ab4dbea89a56253", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-duplicate (apps/api/src/__tests__/bookmarks.test.ts:340)"}, "properties": {"repobilityId": "f3687489e00c5659", "scanner": "scanner-primary", "fingerprint": "1ab4dbea89a56253", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-15dbb0e1f5c7135c", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-duplicate (apps/api/src/__tests__/bookmarks.test.ts:361)"}, "properties": {"repobilityId": "d9688cdefb3b9d02", "scanner": "scanner-primary", "fingerprint": "15dbb0e1f5c7135c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f811d107c334fbf8", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-duplicate (apps/api/src/__tests__/bookmarks.test.ts:374)"}, "properties": {"repobilityId": "a95fd702ab2ddc87", "scanner": "scanner-primary", "fingerprint": "f811d107c334fbf8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-11d094b56b9df3ea", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/batch-duplicate (apps/api/src/__tests__/bookmarks.test.ts:387)"}, "properties": {"repobilityId": "c9b15cf7f7cdc33a", "scanner": "scanner-primary", "fingerprint": "11d094b56b9df3ea", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7f5e61b8924d2c20", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/from-schedules (apps/api/src/__tests__/bookmarks.test.ts:423)"}, "properties": {"repobilityId": "a7f71c88e173ca13", "scanner": "scanner-primary", "fingerprint": "7f5e61b8924d2c20", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-813d50008b9f3670", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/from-schedules (apps/api/src/__tests__/bookmarks.test.ts:436)"}, "properties": {"repobilityId": "dce2078b60b20237", "scanner": "scanner-primary", "fingerprint": "813d50008b9f3670", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7a4bdddf45590f1c", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/from-schedules (apps/api/src/__tests__/bookmarks.test.ts:449)"}, "properties": {"repobilityId": "b8685a4db4362b7a", "scanner": "scanner-primary", "fingerprint": "7a4bdddf45590f1c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-aedbbd0322f0e501", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/from-schedules (apps/api/src/__tests__/bookmarks.test.ts:462)"}, "properties": {"repobilityId": "ed85b8cfa62e55e9", "scanner": "scanner-primary", "fingerprint": "aedbbd0322f0e501", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d1d4ce49d336ac95", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/${listId}/bookmarks/from-schedules (apps/api/src/__tests__/bookmarks.test.ts:482)"}, "properties": {"repobilityId": "c49e4a60ec3500b2", "scanner": "scanner-primary", "fingerprint": "d1d4ce49d336ac95", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1257d99c25fbc4aa", "level": "error", "message": {"text": "Dangling fetch: GET /protected (apps/api/src/__tests__/middleware.test.ts:24)"}, "properties": {"repobilityId": "9994526220947f70", "scanner": "scanner-primary", "fingerprint": "1257d99c25fbc4aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6f7d8447d7364175", "level": "error", "message": {"text": "Dangling fetch: GET /protected (apps/api/src/__tests__/middleware.test.ts:36)"}, "properties": {"repobilityId": "940066a416f1c90c", "scanner": "scanner-primary", "fingerprint": "6f7d8447d7364175", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-78555abd66164718", "level": "error", "message": {"text": "Dangling fetch: GET /protected (apps/api/src/__tests__/middleware.test.ts:52)"}, "properties": {"repobilityId": "58a0da6bec3b41d3", "scanner": "scanner-primary", "fingerprint": "78555abd66164718", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c636e80468e98477", "level": "error", "message": {"text": "Dangling fetch: GET /protected (apps/api/src/__tests__/middleware.test.ts:72)"}, "properties": {"repobilityId": "48f90f119e94d2a9", "scanner": "scanner-primary", "fingerprint": "c636e80468e98477", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-aac655a60b612f8a", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/candidates/s1 (apps/api/src/__tests__/candidates.test.ts:330)"}, "properties": {"repobilityId": "9c89b1d9acfe5c8b", "scanner": "scanner-primary", "fingerprint": "aac655a60b612f8a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a4004534e84eaf57", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/candidates/s1 (apps/api/src/__tests__/candidates.test.ts:345)"}, "properties": {"repobilityId": "1ba1338ec378df13", "scanner": "scanner-primary", "fingerprint": "a4004534e84eaf57", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-778ca5e43d59859e", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/candidates/s1 (apps/api/src/__tests__/candidates.test.ts:366)"}, "properties": {"repobilityId": "cd2bf0071a4d6e06", "scanner": "scanner-primary", "fingerprint": "778ca5e43d59859e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2cdaf138ae57f768", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/candidates/s1 (apps/api/src/__tests__/candidates.test.ts:387)"}, "properties": {"repobilityId": "50a6b8c56f44c99a", "scanner": "scanner-primary", "fingerprint": "2cdaf138ae57f768", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1740be5573c226df", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/candidates/s1 (apps/api/src/__tests__/candidates.test.ts:400)"}, "properties": {"repobilityId": "c035cc9d4c1a7d76", "scanner": "scanner-primary", "fingerprint": "1740be5573c226df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6e9d36f771eb70a7", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/candidates/reorder (apps/api/src/__tests__/candidates.test.ts:423)"}, "properties": {"repobilityId": "82d7f2990ef7d765", "scanner": "scanner-primary", "fingerprint": "6e9d36f771eb70a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-39b9f58eddcdfeb9", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/candidates/reorder (apps/api/src/__tests__/candidates.test.ts:436)"}, "properties": {"repobilityId": "b783b55a0fe8979d", "scanner": "scanner-primary", "fingerprint": "39b9f58eddcdfeb9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8566d04e00ff9dd4", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-assign (apps/api/src/__tests__/candidates.test.ts:473)"}, "properties": {"repobilityId": "68b6df759db0a6d7", "scanner": "scanner-primary", "fingerprint": "8566d04e00ff9dd4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-22bd3223aa44380b", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-assign (apps/api/src/__tests__/candidates.test.ts:486)"}, "properties": {"repobilityId": "b0eeacabff5a5c90", "scanner": "scanner-primary", "fingerprint": "22bd3223aa44380b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-51e60f33502474d5", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-assign (apps/api/src/__tests__/candidates.test.ts:503)"}, "properties": {"repobilityId": "d48db8cba0aea004", "scanner": "scanner-primary", "fingerprint": "51e60f33502474d5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-64e2e8df23737027", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-assign (apps/api/src/__tests__/candidates.test.ts:517)"}, "properties": {"repobilityId": "a856b099d389239d", "scanner": "scanner-primary", "fingerprint": "64e2e8df23737027", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b93af6a7315b84bb", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-delete (apps/api/src/__tests__/candidates.test.ts:541)"}, "properties": {"repobilityId": "d39aaad883833b8b", "scanner": "scanner-primary", "fingerprint": "b93af6a7315b84bb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3fbd2c5489155690", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-delete (apps/api/src/__tests__/candidates.test.ts:554)"}, "properties": {"repobilityId": "6bfeeb0186b1b640", "scanner": "scanner-primary", "fingerprint": "3fbd2c5489155690", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-bf1025bb2e96921d", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-delete (apps/api/src/__tests__/candidates.test.ts:567)"}, "properties": {"repobilityId": "7426a35aa7fb5409", "scanner": "scanner-primary", "fingerprint": "bf1025bb2e96921d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a368922235bb65b7", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-duplicate (apps/api/src/__tests__/candidates.test.ts:635)"}, "properties": {"repobilityId": "5adae35f8eb73743", "scanner": "scanner-primary", "fingerprint": "a368922235bb65b7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1328eb2c96ca6364", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-duplicate (apps/api/src/__tests__/candidates.test.ts:648)"}, "properties": {"repobilityId": "8be678e4ba678e01", "scanner": "scanner-primary", "fingerprint": "1328eb2c96ca6364", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6b9605f0da3c8a8c", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-duplicate (apps/api/src/__tests__/candidates.test.ts:661)"}, "properties": {"repobilityId": "696e4638ad750468", "scanner": "scanner-primary", "fingerprint": "6b9605f0da3c8a8c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-72b4ad5f4ecfbfa4", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/batch-duplicate (apps/api/src/__tests__/candidates.test.ts:678)"}, "properties": {"repobilityId": "d5a4331a88b490da", "scanner": "scanner-primary", "fingerprint": "72b4ad5f4ecfbfa4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f3ba8c7c26cf777d", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/from-bookmarks (apps/api/src/__tests__/candidates.test.ts:733)"}, "properties": {"repobilityId": "1cab4538024fc719", "scanner": "scanner-primary", "fingerprint": "f3ba8c7c26cf777d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cd23382739702ed8", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/from-bookmarks (apps/api/src/__tests__/candidates.test.ts:746)"}, "properties": {"repobilityId": "2b2b2f82676df20b", "scanner": "scanner-primary", "fingerprint": "cd23382739702ed8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d9cfdc6dc243930a", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/from-bookmarks (apps/api/src/__tests__/candidates.test.ts:759)"}, "properties": {"repobilityId": "9c8e4811e352c45b", "scanner": "scanner-primary", "fingerprint": "d9cfdc6dc243930a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8bf484a6c9f8b6e2", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/from-bookmarks (apps/api/src/__tests__/candidates.test.ts:786)"}, "properties": {"repobilityId": "05db3967e3a00d67", "scanner": "scanner-primary", "fingerprint": "8bf484a6c9f8b6e2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-eed34cebe9895b9c", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/${scheduleId}/assign (apps/api/src/__tests__/candidates.test.ts:823)"}, "properties": {"repobilityId": "9cb3875709f403ee", "scanner": "scanner-primary", "fingerprint": "eed34cebe9895b9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fb1b2c199e6e37d4", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/s1/assign (apps/api/src/__tests__/candidates.test.ts:836)"}, "properties": {"repobilityId": "f6f358a4192bd3dc", "scanner": "scanner-primary", "fingerprint": "fb1b2c199e6e37d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4d14706759fed762", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/s1/assign (apps/api/src/__tests__/candidates.test.ts:849)"}, "properties": {"repobilityId": "d347c618d25270c3", "scanner": "scanner-primary", "fingerprint": "4d14706759fed762", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8ef0f45ec02f5ed8", "level": "error", "message": {"text": "Dangling fetch: POST /api/polls/poll-1/options (apps/api/src/__tests__/polls.test.ts:120)"}, "properties": {"repobilityId": "c69b101d28f3900e", "scanner": "scanner-primary", "fingerprint": "8ef0f45ec02f5ed8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d13ed7748820c0d2", "level": "error", "message": {"text": "Dangling fetch: POST /api/polls/poll-1/options (apps/api/src/__tests__/polls.test.ts:181)"}, "properties": {"repobilityId": "5b7597733453d52d", "scanner": "scanner-primary", "fingerprint": "d13ed7748820c0d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-23fc6dae5b2e8e2a", "level": "error", "message": {"text": "Dangling fetch: POST /api/polls/poll-1/participants (apps/api/src/__tests__/polls.test.ts:234)"}, "properties": {"repobilityId": "a5ab6995c699b8ed", "scanner": "scanner-primary", "fingerprint": "23fc6dae5b2e8e2a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d5068e288938650f", "level": "error", "message": {"text": "Dangling fetch: POST /api/polls/${pollId}/confirm (apps/api/src/__tests__/polls.test.ts:317)"}, "properties": {"repobilityId": "6e5b85a46c2a3002", "scanner": "scanner-primary", "fingerprint": "d5068e288938650f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-56b83bb467643f54", "level": "error", "message": {"text": "Dangling fetch: POST /api/polls/${pollId}/confirm (apps/api/src/__tests__/polls.test.ts:372)"}, "properties": {"repobilityId": "1b871b64e760b86b", "scanner": "scanner-primary", "fingerprint": "56b83bb467643f54", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ec8c97f3db8bd341", "level": "error", "message": {"text": "Dangling fetch: GET /api/_docs (apps/api/src/__tests__/docs.test.ts:87)"}, "properties": {"repobilityId": "1a5956944bfc449d", "scanner": "scanner-primary", "fingerprint": "ec8c97f3db8bd341", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-54173f7eff6fd8f4", "level": "error", "message": {"text": "Dangling fetch: GET /api/_docs (apps/api/src/__tests__/docs.test.ts:95)"}, "properties": {"repobilityId": "5b4e7b6073e4cf1e", "scanner": "scanner-primary", "fingerprint": "54173f7eff6fd8f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f407875e9e686ccb", "level": "error", "message": {"text": "Dangling fetch: GET /api/_docs (apps/api/src/__tests__/docs.test.ts:103)"}, "properties": {"repobilityId": "cdebacfe6b25078e", "scanner": "scanner-primary", "fingerprint": "f407875e9e686ccb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1c8a892519e25f34", "level": "error", "message": {"text": "Dangling fetch: GET /api/_docs (apps/api/src/__tests__/docs.test.ts:111)"}, "properties": {"repobilityId": "ea034143df40db14", "scanner": "scanner-primary", "fingerprint": "1c8a892519e25f34", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-406f64a5b62f9d5b", "level": "error", "message": {"text": "Dangling fetch: GET /api/_docs (apps/api/src/__tests__/docs.test.ts:119)"}, "properties": {"repobilityId": "d9b4fab496337b76", "scanner": "scanner-primary", "fingerprint": "406f64a5b62f9d5b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-27914ad7ec83182e", "level": "error", "message": {"text": "Dangling fetch: GET /api/_docs/openapi.json (apps/api/src/__tests__/docs.test.ts:137)"}, "properties": {"repobilityId": "5e7cee675c0474e6", "scanner": "scanner-primary", "fingerprint": "27914ad7ec83182e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d0f9817d9d9a99e4", "level": "error", "message": {"text": "Dangling fetch: GET /api/_docs/openapi.json (apps/api/src/__tests__/docs.test.ts:145)"}, "properties": {"repobilityId": "ba304b34f017035d", "scanner": "scanner-primary", "fingerprint": "d0f9817d9d9a99e4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c30a2c59ddf48327", "level": "error", "message": {"text": "Dangling fetch: GET /api/_docs/openapi.json (apps/api/src/__tests__/docs.test.ts:153)"}, "properties": {"repobilityId": "c93814ad14c45b13", "scanner": "scanner-primary", "fingerprint": "c30a2c59ddf48327", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9ab07f7f906d6baf", "level": "error", "message": {"text": "Dangling fetch: GET /api/_docs/openapi.json (apps/api/src/__tests__/docs.test.ts:161)"}, "properties": {"repobilityId": "7ddb072cef2d9c1f", "scanner": "scanner-primary", "fingerprint": "9ab07f7f906d6baf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8279b87b5f137cd7", "level": "error", "message": {"text": "Dangling fetch: GET /api/_docs/openapi.json (apps/api/src/__tests__/docs.test.ts:171)"}, "properties": {"repobilityId": "3c76e2653ecf5f60", "scanner": "scanner-primary", "fingerprint": "8279b87b5f137cd7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a87e17ee843c79ae", "level": "error", "message": {"text": "Dangling fetch: GET /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:595)"}, "properties": {"repobilityId": "cc0c0d782a247426", "scanner": "scanner-primary", "fingerprint": "a87e17ee843c79ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f27d7b00cdb23a14", "level": "error", "message": {"text": "Dangling fetch: GET /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:616)"}, "properties": {"repobilityId": "8e5f43f655036a96", "scanner": "scanner-primary", "fingerprint": "f27d7b00cdb23a14", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-201e9cfc75d8e970", "level": "error", "message": {"text": "Dangling fetch: GET /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:684)"}, "properties": {"repobilityId": "a7dea850f5ec3c4b", "scanner": "scanner-primary", "fingerprint": "201e9cfc75d8e970", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c7f9603a87aa2445", "level": "error", "message": {"text": "Dangling fetch: GET /api/trips/nonexistent (apps/api/src/__tests__/trips.test.ts:696)"}, "properties": {"repobilityId": "a0f5f73b238ef6bb", "scanner": "scanner-primary", "fingerprint": "c7f9603a87aa2445", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3c500f50909875d9", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:725)"}, "properties": {"repobilityId": "35a5910148917777", "scanner": "scanner-primary", "fingerprint": "3c500f50909875d9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-54a9c140374827be", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:740)"}, "properties": {"repobilityId": "3bff0f51d1bd2079", "scanner": "scanner-primary", "fingerprint": "54a9c140374827be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e39f0c5ac5cf62e8", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:764)"}, "properties": {"repobilityId": "60e5cb0c343503bc", "scanner": "scanner-primary", "fingerprint": "e39f0c5ac5cf62e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7b0e390d0dc885b3", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/nonexistent (apps/api/src/__tests__/trips.test.ts:786)"}, "properties": {"repobilityId": "388998b63e4158af", "scanner": "scanner-primary", "fingerprint": "7b0e390d0dc885b3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-835842686acfc7be", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:803)"}, "properties": {"repobilityId": "3e083efd6e8faaa1", "scanner": "scanner-primary", "fingerprint": "835842686acfc7be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8f295a9897a377d7", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:814)"}, "properties": {"repobilityId": "4683566ca2cdbf31", "scanner": "scanner-primary", "fingerprint": "8f295a9897a377d7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-560648895ec7b898", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:840)"}, "properties": {"repobilityId": "6e0557010e7e7531", "scanner": "scanner-primary", "fingerprint": "560648895ec7b898", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9e2e608954929362", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:853)"}, "properties": {"repobilityId": "705a7b00b85439bd", "scanner": "scanner-primary", "fingerprint": "9e2e608954929362", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fd6eff468bfbadd4", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:903)"}, "properties": {"repobilityId": "edc95adc3d5abad9", "scanner": "scanner-primary", "fingerprint": "fd6eff468bfbadd4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2ced0fcdd4065150", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:914)"}, "properties": {"repobilityId": "740ed09bbc5a483f", "scanner": "scanner-primary", "fingerprint": "2ced0fcdd4065150", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-500af50e1bd1d8ac", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:932)"}, "properties": {"repobilityId": "8a7830c5b7fc3095", "scanner": "scanner-primary", "fingerprint": "500af50e1bd1d8ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f33f7a589e114b20", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:985)"}, "properties": {"repobilityId": "823633e13913453f", "scanner": "scanner-primary", "fingerprint": "f33f7a589e114b20", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-78e6662e490ff7a8", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1036)"}, "properties": {"repobilityId": "5acb7d63ec7f5f65", "scanner": "scanner-primary", "fingerprint": "78e6662e490ff7a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e7c23f116b442272", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1054)"}, "properties": {"repobilityId": "40a619d59f32609c", "scanner": "scanner-primary", "fingerprint": "e7c23f116b442272", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3536e6b8601e8dbe", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1074)"}, "properties": {"repobilityId": "8230a3830365fd7e", "scanner": "scanner-primary", "fingerprint": "3536e6b8601e8dbe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4f45babe5b4e3a23", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1127)"}, "properties": {"repobilityId": "84b56eea00f6aafc", "scanner": "scanner-primary", "fingerprint": "4f45babe5b4e3a23", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4909f690e7e3f4ba", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/trip-1/duplicate (apps/api/src/__tests__/trips.test.ts:1146)"}, "properties": {"repobilityId": "b5799920adaeab29", "scanner": "scanner-primary", "fingerprint": "4909f690e7e3f4ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cf3162187bb33656", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/trip-1/duplicate (apps/api/src/__tests__/trips.test.ts:1233)"}, "properties": {"repobilityId": "e864dea11ae0d088", "scanner": "scanner-primary", "fingerprint": "cf3162187bb33656", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e7321eb289e99415", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1253)"}, "properties": {"repobilityId": "a0511b8c37b7039f", "scanner": "scanner-primary", "fingerprint": "e7321eb289e99415", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ea512cebf0933c01", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/nonexistent (apps/api/src/__tests__/trips.test.ts:1266)"}, "properties": {"repobilityId": "f1ee1468f40ab3f2", "scanner": "scanner-primary", "fingerprint": "ea512cebf0933c01", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b585c3801d2d30dc", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1281)"}, "properties": {"repobilityId": "94b58ea9a988a5fb", "scanner": "scanner-primary", "fingerprint": "b585c3801d2d30dc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-882be352a2e38585", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/trip-1 (apps/api/src/__tests__/trips.test.ts:1298)"}, "properties": {"repobilityId": "ec8d0c7e7285ec91", "scanner": "scanner-primary", "fingerprint": "882be352a2e38585", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-20a2ce4aae04186b", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1312)"}, "properties": {"repobilityId": "7dbdd5d4a5a9bdd0", "scanner": "scanner-primary", "fingerprint": "20a2ce4aae04186b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-44b9cd6431ab28c9", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1329)"}, "properties": {"repobilityId": "60d156d877f14fe4", "scanner": "scanner-primary", "fingerprint": "44b9cd6431ab28c9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e26089520c065346", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1348)"}, "properties": {"repobilityId": "3213a4d43961d6e2", "scanner": "scanner-primary", "fingerprint": "e26089520c065346", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-637ad87465aedc76", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1363)"}, "properties": {"repobilityId": "3563aa838e8e7e43", "scanner": "scanner-primary", "fingerprint": "637ad87465aedc76", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c5845d6e6ffd92cd", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1394)"}, "properties": {"repobilityId": "2c7403f4d8d884d9", "scanner": "scanner-primary", "fingerprint": "c5845d6e6ffd92cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-62a8760d9c6db4bc", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1429)"}, "properties": {"repobilityId": "9d950251859df9b2", "scanner": "scanner-primary", "fingerprint": "62a8760d9c6db4bc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7a23ca5c8cfb320c", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1451)"}, "properties": {"repobilityId": "941c668e1ac46658", "scanner": "scanner-primary", "fingerprint": "7a23ca5c8cfb320c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-dff676aba50dda17", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/trip-1/cover-image (apps/api/src/__tests__/trips.test.ts:1467)"}, "properties": {"repobilityId": "06410fad5c576a26", "scanner": "scanner-primary", "fingerprint": "dff676aba50dda17", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0a476b84f803b2ab", "level": "error", "message": {"text": "Dangling fetch: GET /trips/not-a-uuid (apps/api/src/__tests__/v1-routes.test.ts:350)"}, "properties": {"repobilityId": "ac3fb87053686fe2", "scanner": "scanner-primary", "fingerprint": "0a476b84f803b2ab", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1af4a2cfca11c8aa", "level": "error", "message": {"text": "Dangling fetch: GET /bookmark-lists/not-a-uuid/bookmarks (apps/api/src/__tests__/v1-routes.test.ts:723)"}, "properties": {"repobilityId": "a1eebe5d56bdfdd8", "scanner": "scanner-primary", "fingerprint": "1af4a2cfca11c8aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cd61a7ac3eb04ec4", "level": "error", "message": {"text": "Dangling fetch: GET /articles/not-a-uuid (apps/api/src/__tests__/v1-routes.test.ts:948)"}, "properties": {"repobilityId": "05ec254c30fec0d5", "scanner": "scanner-primary", "fingerprint": "cd61a7ac3eb04ec4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-359f9a0a85ab0ed8", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/trips (apps/api/src/__tests__/v1-mounting.test.ts:12)"}, "properties": {"repobilityId": "9ae015e18ce1200d", "scanner": "scanner-primary", "fingerprint": "359f9a0a85ab0ed8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-72b751a6e87778f6", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/trips (apps/api/src/__tests__/v1-mounting.test.ts:19)"}, "properties": {"repobilityId": "7bcb105a2f9eb3c3", "scanner": "scanner-primary", "fingerprint": "72b751a6e87778f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ec492059734676fe", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/does-not-exist (apps/api/src/__tests__/v1-mounting.test.ts:25)"}, "properties": {"repobilityId": "e9d803910018c5a9", "scanner": "scanner-primary", "fingerprint": "ec492059734676fe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-28d8e97407148f9c", "level": "error", "message": {"text": "Dangling fetch: GET /api/v1/does-not-exist (apps/api/src/__tests__/v1-mounting.test.ts:32)"}, "properties": {"repobilityId": "523e6a9b0c92b0d4", "scanner": "scanner-primary", "fingerprint": "28d8e97407148f9c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0aa92fd0a38951fb", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/sign-up/email (apps/api/src/__tests__/auth-signup-intercept.test.ts:39)"}, "properties": {"repobilityId": "e375ff952c635bf7", "scanner": "scanner-primary", "fingerprint": "0aa92fd0a38951fb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d260037a737eb0b2", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/sign-up/email (apps/api/src/__tests__/auth-signup-intercept.test.ts:48)"}, "properties": {"repobilityId": "5cfb5c1cf26e8c0e", "scanner": "scanner-primary", "fingerprint": "d260037a737eb0b2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ec22a373e457549c", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/sign-in/anonymous (apps/api/src/__tests__/auth-signup-intercept.test.ts:59)"}, "properties": {"repobilityId": "f948f1abf4013771", "scanner": "scanner-primary", "fingerprint": "ec22a373e457549c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-81f905a20464630e", "level": "error", "message": {"text": "Dangling fetch: POST /api/auth/sign-up/email (apps/api/src/__tests__/auth-signup-intercept.test.ts:69)"}, "properties": {"repobilityId": "ae57f2434e1092bd", "scanner": "scanner-primary", "fingerprint": "81f905a20464630e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-366d756272f7322e", "level": "error", "message": {"text": "Dangling fetch: POST /api/push-subscriptions (apps/api/src/__tests__/push-subscriptions.test.ts:63)"}, "properties": {"repobilityId": "98905f797116db12", "scanner": "scanner-primary", "fingerprint": "366d756272f7322e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9c28a6800f476c4e", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/push-subscriptions (apps/api/src/__tests__/push-subscriptions.test.ts:74)"}, "properties": {"repobilityId": "894cd5acfae9d712", "scanner": "scanner-primary", "fingerprint": "9c28a6800f476c4e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-53092b3872662b0c", "level": "error", "message": {"text": "Dangling fetch: GET /api/push-subscriptions/preferences?endpoint=${endpoint} (apps/api/src/__tests__/push-subscriptions.test.ts:92)"}, "properties": {"repobilityId": "931a0b704d06562b", "scanner": "scanner-primary", "fingerprint": "53092b3872662b0c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f89c921760424bd1", "level": "error", "message": {"text": "Dangling fetch: GET /api/push-subscriptions/preferences?endpoint=${endpoint} (apps/api/src/__tests__/push-subscriptions.test.ts:109)"}, "properties": {"repobilityId": "74afdd4d53218746", "scanner": "scanner-primary", "fingerprint": "f89c921760424bd1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ecf2e096dca6a389", "level": "error", "message": {"text": "Dangling fetch: GET /api/push-subscriptions/preferences (apps/api/src/__tests__/push-subscriptions.test.ts:116)"}, "properties": {"repobilityId": "4b4dcd6bbc060b0b", "scanner": "scanner-primary", "fingerprint": "ecf2e096dca6a389", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b179777d285bab45", "level": "error", "message": {"text": "Dangling fetch: PUT /api/push-subscriptions/preferences (apps/api/src/__tests__/push-subscriptions.test.ts:130)"}, "properties": {"repobilityId": "89d7aa98bb8e2394", "scanner": "scanner-primary", "fingerprint": "b179777d285bab45", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-43346a78e12d3f3b", "level": "error", "message": {"text": "Dangling fetch: PUT /api/push-subscriptions/preferences (apps/api/src/__tests__/push-subscriptions.test.ts:150)"}, "properties": {"repobilityId": "1d0aa56d19e6427b", "scanner": "scanner-primary", "fingerprint": "43346a78e12d3f3b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-216ae5aebb93662b", "level": "error", "message": {"text": "Dangling fetch: PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:66)"}, "properties": {"repobilityId": "94369d01b1c95410", "scanner": "scanner-primary", "fingerprint": "216ae5aebb93662b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7c7daa53ba72a6d6", "level": "error", "message": {"text": "Dangling fetch: PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:76)"}, "properties": {"repobilityId": "59ae2158c91368fb", "scanner": "scanner-primary", "fingerprint": "7c7daa53ba72a6d6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4257f64ec05c0861", "level": "error", "message": {"text": "Dangling fetch: PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:87)"}, "properties": {"repobilityId": "038bbc06cf6a1a77", "scanner": "scanner-primary", "fingerprint": "4257f64ec05c0861", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a55b0915b8affe3e", "level": "error", "message": {"text": "Dangling fetch: PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:114)"}, "properties": {"repobilityId": "335e143248ad98f8", "scanner": "scanner-primary", "fingerprint": "a55b0915b8affe3e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2251c906b132da8d", "level": "error", "message": {"text": "Dangling fetch: PUT /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:149)"}, "properties": {"repobilityId": "4b3db5ab09e999ff", "scanner": "scanner-primary", "fingerprint": "2251c906b132da8d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d4358d34d96dd65f", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:162)"}, "properties": {"repobilityId": "7157d760c952833b", "scanner": "scanner-primary", "fingerprint": "d4358d34d96dd65f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0aa67be162ac5622", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:171)"}, "properties": {"repobilityId": "14955dff8b05cb6f", "scanner": "scanner-primary", "fingerprint": "0aa67be162ac5622", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f83b6591f44e7c23", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/candidates/${scheduleId}/reaction (apps/api/src/__tests__/reactions.test.ts:193)"}, "properties": {"repobilityId": "28ed245d890dec25", "scanner": "scanner-primary", "fingerprint": "f83b6591f44e7c23", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5c8c779cb8ce1f4d", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:697)"}, "properties": {"repobilityId": "b0e6df8a1fc03cc6", "scanner": "scanner-primary", "fingerprint": "5c8c779cb8ce1f4d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-54db0fb5f49ed1ed", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:735)"}, "properties": {"repobilityId": "fb1e3668e171b9c4", "scanner": "scanner-primary", "fingerprint": "54db0fb5f49ed1ed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6a1c9e79d34e28b5", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:758)"}, "properties": {"repobilityId": "35f84d600404ab62", "scanner": "scanner-primary", "fingerprint": "6a1c9e79d34e28b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a7bb56fa023d0e1a", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:777)"}, "properties": {"repobilityId": "e77af1556662f810", "scanner": "scanner-primary", "fingerprint": "a7bb56fa023d0e1a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-aab0b6e87e61b7f5", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:811)"}, "properties": {"repobilityId": "0bf3d2746972b037", "scanner": "scanner-primary", "fingerprint": "aab0b6e87e61b7f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-45443e1c8e20c6da", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:838)"}, "properties": {"repobilityId": "215d8e3a6bd071d7", "scanner": "scanner-primary", "fingerprint": "45443e1c8e20c6da", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ba25618d5b26158b", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/non-existent (apps/api/src/__tests__/expenses.test.ts:850)"}, "properties": {"repobilityId": "01d6361a8a1c8bf3", "scanner": "scanner-primary", "fingerprint": "ba25618d5b26158b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6aecdb49bb716db0", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:901)"}, "properties": {"repobilityId": "c4bc55ede2bbc3af", "scanner": "scanner-primary", "fingerprint": "6aecdb49bb716db0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-04356cb79d5e36e9", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:939)"}, "properties": {"repobilityId": "5e9113981506c8c1", "scanner": "scanner-primary", "fingerprint": "04356cb79d5e36e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-19408f21a8f7f6d3", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:957)"}, "properties": {"repobilityId": "cf1e3f9f0da291f1", "scanner": "scanner-primary", "fingerprint": "19408f21a8f7f6d3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ec26f6b7b066c867", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:997)"}, "properties": {"repobilityId": "93e5aad323d44470", "scanner": "scanner-primary", "fingerprint": "ec26f6b7b066c867", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-81c74376a0f803d1", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:1027)"}, "properties": {"repobilityId": "c8e41dcd13d5ef7d", "scanner": "scanner-primary", "fingerprint": "81c74376a0f803d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-99bd350ff2143cda", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/expenses/exp-1 (apps/api/src/__tests__/expenses.test.ts:1057)"}, "properties": {"repobilityId": "b664ea4f9112ff57", "scanner": "scanner-primary", "fingerprint": "99bd350ff2143cda", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e06335dc221f85d2", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/expenses/non-existent (apps/api/src/__tests__/expenses.test.ts:1075)"}, "properties": {"repobilityId": "13e3ed5527c27d09", "scanner": "scanner-primary", "fingerprint": "e06335dc221f85d2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d43850d1acc3eb1b", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/expenses/batch-delete (apps/api/src/__tests__/expenses.test.ts:1090)"}, "properties": {"repobilityId": "0e470034b6287d9d", "scanner": "scanner-primary", "fingerprint": "d43850d1acc3eb1b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3db332a1084c6bb4", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/expenses/batch-delete (apps/api/src/__tests__/expenses.test.ts:1108)"}, "properties": {"repobilityId": "1be49d7c7e37f494", "scanner": "scanner-primary", "fingerprint": "3db332a1084c6bb4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d2f2f21bd8905ee2", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/expenses/batch-delete (apps/api/src/__tests__/expenses.test.ts:1120)"}, "properties": {"repobilityId": "f7e122939dd29358", "scanner": "scanner-primary", "fingerprint": "d2f2f21bd8905ee2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f9476bd315bafc27", "level": "error", "message": {"text": "Dangling fetch: GET /api/notifications (apps/api/src/__tests__/notifications-routes.test.ts:43)"}, "properties": {"repobilityId": "a1cc9eb865b8789a", "scanner": "scanner-primary", "fingerprint": "f9476bd315bafc27", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3d471edd276c2033", "level": "error", "message": {"text": "Dangling fetch: GET /api/notifications (apps/api/src/__tests__/notifications-routes.test.ts:49)"}, "properties": {"repobilityId": "9722540aa2c5a5f2", "scanner": "scanner-primary", "fingerprint": "3d471edd276c2033", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-65014ebed1c4f5fc", "level": "error", "message": {"text": "Dangling fetch: PUT /api/notifications/read-all (apps/api/src/__tests__/notifications-routes.test.ts:58)"}, "properties": {"repobilityId": "810a2e30533c08a9", "scanner": "scanner-primary", "fingerprint": "65014ebed1c4f5fc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6608500b60d58def", "level": "error", "message": {"text": "Dangling fetch: GET /api/test (apps/api/src/__tests__/request-logger.test.ts:24)"}, "properties": {"repobilityId": "b526d600598922bd", "scanner": "scanner-primary", "fingerprint": "6608500b60d58def", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0e7f744e8ecc68d1", "level": "error", "message": {"text": "Dangling fetch: GET /api/bad (apps/api/src/__tests__/request-logger.test.ts:42)"}, "properties": {"repobilityId": "937bdcf8012fe285", "scanner": "scanner-primary", "fingerprint": "0e7f744e8ecc68d1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d671aaccadcb6f36", "level": "error", "message": {"text": "Dangling fetch: GET /api/fail (apps/api/src/__tests__/request-logger.test.ts:54)"}, "properties": {"repobilityId": "5e3f9e283d58a781", "scanner": "scanner-primary", "fingerprint": "d671aaccadcb6f36", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f701117c2ed256e4", "level": "error", "message": {"text": "Dangling fetch: GET /api/check (apps/api/src/__tests__/request-logger.test.ts:82)"}, "properties": {"repobilityId": "ab73aaac9e1976fa", "scanner": "scanner-primary", "fingerprint": "f701117c2ed256e4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-afddd4fc2594b35f", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:76)"}, "properties": {"repobilityId": "386bf475c0ce7bdb", "scanner": "scanner-primary", "fingerprint": "afddd4fc2594b35f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-164b5db3e9875d84", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:96)"}, "properties": {"repobilityId": "c78883d313a80091", "scanner": "scanner-primary", "fingerprint": "164b5db3e9875d84", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4ef2b24e4352c24e", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:102)"}, "properties": {"repobilityId": "4d70ad7611ee8e98", "scanner": "scanner-primary", "fingerprint": "4ef2b24e4352c24e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-909e4a51237c357e", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:116)"}, "properties": {"repobilityId": "39780afac739d84f", "scanner": "scanner-primary", "fingerprint": "909e4a51237c357e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d7695b7320c060be", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:121)"}, "properties": {"repobilityId": "088ad09688be5ffc", "scanner": "scanner-primary", "fingerprint": "d7695b7320c060be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ad08c6f6c3bd5d4e", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:138)"}, "properties": {"repobilityId": "ee4bd0f6b17e715f", "scanner": "scanner-primary", "fingerprint": "ad08c6f6c3bd5d4e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-fbde989aa71cede3", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:148)"}, "properties": {"repobilityId": "f7a717c69c9a11e0", "scanner": "scanner-primary", "fingerprint": "fbde989aa71cede3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-da44e8888b7c2dfd", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:159)"}, "properties": {"repobilityId": "56a341bf024822b6", "scanner": "scanner-primary", "fingerprint": "da44e8888b7c2dfd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-16e89bb80d83c482", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:179)"}, "properties": {"repobilityId": "e3a989d404ab438f", "scanner": "scanner-primary", "fingerprint": "16e89bb80d83c482", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f0bf6be5b3b0d0a4", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id} (apps/api/src/__tests__/integration/schedules.integration.test.ts:189)"}, "properties": {"repobilityId": "c93b616195cf1f20", "scanner": "scanner-primary", "fingerprint": "f0bf6be5b3b0d0a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1e9fd802bbdc7dac", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:204)"}, "properties": {"repobilityId": "f02667b3cfddaebc", "scanner": "scanner-primary", "fingerprint": "1e9fd802bbdc7dac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6560002c020b7821", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id} (apps/api/src/__tests__/integration/schedules.integration.test.ts:214)"}, "properties": {"repobilityId": "415a6c4b98e4ec9a", "scanner": "scanner-primary", "fingerprint": "6560002c020b7821", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d2042bfcdef144b5", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:231)"}, "properties": {"repobilityId": "4ff651b47f73bd1a", "scanner": "scanner-primary", "fingerprint": "d2042bfcdef144b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-beaa52c4688efa72", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id} (apps/api/src/__tests__/integration/schedules.integration.test.ts:242)"}, "properties": {"repobilityId": "fd24b41b41468c23", "scanner": "scanner-primary", "fingerprint": "beaa52c4688efa72", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-eafa09aa212e9283", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id} (apps/api/src/__tests__/integration/schedules.integration.test.ts:256)"}, "properties": {"repobilityId": "0e89a73a3309282e", "scanner": "scanner-primary", "fingerprint": "eafa09aa212e9283", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3a40b215c0c086a4", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:271)"}, "properties": {"repobilityId": "31e23db4e0ba1fe1", "scanner": "scanner-primary", "fingerprint": "3a40b215c0c086a4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a6acf583965b6821", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${schedule.id} (apps/api/src/__tests__/integration/schedules.integration.test.ts:281)"}, "properties": {"repobilityId": "56d105ff7fee21f5", "scanner": "scanner-primary", "fingerprint": "a6acf583965b6821", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8d8ced0f7b8b5425", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:306)"}, "properties": {"repobilityId": "2191cf6cbb9d541b", "scanner": "scanner-primary", "fingerprint": "8d8ced0f7b8b5425", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-26edacd8003746e0", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:318)"}, "properties": {"repobilityId": "fc0b8cbc16e64b5b", "scanner": "scanner-primary", "fingerprint": "26edacd8003746e0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-edb859975fec7fd8", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:345)"}, "properties": {"repobilityId": "2bc73151fcd1face", "scanner": "scanner-primary", "fingerprint": "edb859975fec7fd8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0e3defe8c8e86add", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:622)"}, "properties": {"repobilityId": "277c69e14c4c659e", "scanner": "scanner-primary", "fingerprint": "0e3defe8c8e86add", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-dcb3ce6be7515890", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:655)"}, "properties": {"repobilityId": "eca0642a4f096c2f", "scanner": "scanner-primary", "fingerprint": "dcb3ce6be7515890", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4c1e5ded4efa4a52", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:677)"}, "properties": {"repobilityId": "66812dfd16b75bef", "scanner": "scanner-primary", "fingerprint": "4c1e5ded4efa4a52", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-47fc5e9cb64ce0ae", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:694)"}, "properties": {"repobilityId": "90f52e4213e5b908", "scanner": "scanner-primary", "fingerprint": "47fc5e9cb64ce0ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3a361880eeea8450", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:715)"}, "properties": {"repobilityId": "c00d209e31479f3b", "scanner": "scanner-primary", "fingerprint": "3a361880eeea8450", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a701c1cfc20faa0a", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:736)"}, "properties": {"repobilityId": "3a28d1836e601fd9", "scanner": "scanner-primary", "fingerprint": "a701c1cfc20faa0a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-35e346d1f32ec0d9", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${hotel.id} (apps/api/src/__tests__/integration/schedules.integration.test.ts:748)"}, "properties": {"repobilityId": "a79d0650a5f9f1d5", "scanner": "scanner-primary", "fingerprint": "35e346d1f32ec0d9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-3533e27a17d3f57e", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:770)"}, "properties": {"repobilityId": "168ada3660804775", "scanner": "scanner-primary", "fingerprint": "3533e27a17d3f57e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-23eae00021c9bcfb", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:796)"}, "properties": {"repobilityId": "b31fc8bb5ae8e9a9", "scanner": "scanner-primary", "fingerprint": "23eae00021c9bcfb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4482b7134bcdb988", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:808)"}, "properties": {"repobilityId": "83347574b6fb13b7", "scanner": "scanner-primary", "fingerprint": "4482b7134bcdb988", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0fcf6d134f05aec5", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:825)"}, "properties": {"repobilityId": "77866f8c7fb06200", "scanner": "scanner-primary", "fingerprint": "0fcf6d134f05aec5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-16a348d6aac4019b", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/schedules.integration.test.ts:847)"}, "properties": {"repobilityId": "8cc7576a1b8f8105", "scanner": "scanner-primary", "fingerprint": "16a348d6aac4019b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2e7bd260e4990f2f", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:873)"}, "properties": {"repobilityId": "3251bfb44caf58a8", "scanner": "scanner-primary", "fingerprint": "2e7bd260e4990f2f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-27773d701bd25afa", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/${hotel.id} (apps/api/src/__tests__/integration/schedules.integration.test.ts:888)"}, "properties": {"repobilityId": "9199e12995960f6f", "scanner": "scanner-primary", "fingerprint": "27773d701bd25afa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8b402db8926c1b16", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:910)"}, "properties": {"repobilityId": "1115e98401c5e478", "scanner": "scanner-primary", "fingerprint": "8b402db8926c1b16", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f1ea707c293b5bd2", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:922)"}, "properties": {"repobilityId": "1ca65d288a3f427d", "scanner": "scanner-primary", "fingerprint": "f1ea707c293b5bd2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-54c3a1acc7f2b3f4", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:947)"}, "properties": {"repobilityId": "78e6eb68e4bb2e50", "scanner": "scanner-primary", "fingerprint": "54c3a1acc7f2b3f4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-00f795da30f7aff9", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/schedules/${target.id}/unassign (apps/api/src/__tests__/integration/schedules.integration.test.ts:959)"}, "properties": {"repobilityId": "17250b2a8fc2bf14", "scanner": "scanner-primary", "fingerprint": "00f795da30f7aff9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-03f1adaa083295d0", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules/reorder (apps/api/src/__tests__/integration/schedules.integration.test.ts:978)"}, "properties": {"repobilityId": "95b6bf91868acf58", "scanner": "scanner-primary", "fingerprint": "03f1adaa083295d0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c5b8195d6faf250c", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/schedules/batch-unassign (apps/api/src/__tests__/integration/schedules.integration.test.ts:993)"}, "properties": {"repobilityId": "749060efb387dfd0", "scanner": "scanner-primary", "fingerprint": "c5b8195d6faf250c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cec09c81f0ec13a6", "level": "error", "message": {"text": "Dangling fetch: GET /api/polls (apps/api/src/__tests__/integration/polls.integration.test.ts:130)"}, "properties": {"repobilityId": "d63851642c58b423", "scanner": "scanner-primary", "fingerprint": "cec09c81f0ec13a6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-10d2ecd8b723aa15", "level": "error", "message": {"text": "Dangling fetch: GET /api/polls (apps/api/src/__tests__/integration/polls.integration.test.ts:153)"}, "properties": {"repobilityId": "fa85e53a163373ce", "scanner": "scanner-primary", "fingerprint": "10d2ecd8b723aa15", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-34790d1431c2ffa2", "level": "error", "message": {"text": "Dangling fetch: GET /api/polls/${pollId} (apps/api/src/__tests__/integration/polls.integration.test.ts:163)"}, "properties": {"repobilityId": "8f2bdc230c04efc8", "scanner": "scanner-primary", "fingerprint": "34790d1431c2ffa2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2d7a4e6ca34a68e6", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/polls/${pollId}/options/${middle.id} (apps/api/src/__tests__/integration/polls.integration.test.ts:183)"}, "properties": {"repobilityId": "fe5c9792e6b01b68", "scanner": "scanner-primary", "fingerprint": "2d7a4e6ca34a68e6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-84a3a1734410640a", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/polls/${pollId} (apps/api/src/__tests__/integration/polls.integration.test.ts:220)"}, "properties": {"repobilityId": "0eb08a19fa65a5b8", "scanner": "scanner-primary", "fingerprint": "84a3a1734410640a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-bfa0c51c2ac2d5b9", "level": "error", "message": {"text": "Dangling fetch: GET /api/polls/${pollId} (apps/api/src/__tests__/integration/polls.integration.test.ts:252)"}, "properties": {"repobilityId": "609ad9bec7de68af", "scanner": "scanner-primary", "fingerprint": "bfa0c51c2ac2d5b9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f08a231fc073020c", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/polls/${pollId}/options/${optionId} (apps/api/src/__tests__/integration/polls.integration.test.ts:275)"}, "properties": {"repobilityId": "f6bc27080fea9f52", "scanner": "scanner-primary", "fingerprint": "f08a231fc073020c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5099a6f35a1e4dd4", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/polls/${pollId}/participants/${participant.id} (apps/api/src/__tests__/integration/polls.integration.test.ts:323)"}, "properties": {"repobilityId": "06d42d1c77fef80d", "scanner": "scanner-primary", "fingerprint": "5099a6f35a1e4dd4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cc00356ca92b1d4d", "level": "error", "message": {"text": "Dangling fetch: GET /api/shared/polls/invalid-token (apps/api/src/__tests__/integration/polls.integration.test.ts:447)"}, "properties": {"repobilityId": "93173e3540de1350", "scanner": "scanner-primary", "fingerprint": "cc00356ca92b1d4d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-aea3914f4036a7b4", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/polls/${poll.id} (apps/api/src/__tests__/integration/polls.integration.test.ts:808)"}, "properties": {"repobilityId": "3e9a89563b962ef7", "scanner": "scanner-primary", "fingerprint": "aea3914f4036a7b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-035097fba3418806", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/polls/${poll.id} (apps/api/src/__tests__/integration/polls.integration.test.ts:839)"}, "properties": {"repobilityId": "00fb9a309f65256a", "scanner": "scanner-primary", "fingerprint": "035097fba3418806", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-9e8796398d580245", "level": "error", "message": {"text": "Dangling fetch: GET /api/trips/${tripId}/days/${dayId}/patterns (apps/api/src/__tests__/integration/patterns.integration.test.ts:82)"}, "properties": {"repobilityId": "3b21d83874acb49a", "scanner": "scanner-primary", "fingerprint": "9e8796398d580245", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-81004dd22ea76c34", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns (apps/api/src/__tests__/integration/patterns.integration.test.ts:91)"}, "properties": {"repobilityId": "ec26d896f0bc5bd6", "scanner": "scanner-primary", "fingerprint": "81004dd22ea76c34", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5ea30eb4e6b9a0ee", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns (apps/api/src/__tests__/integration/patterns.integration.test.ts:104)"}, "properties": {"repobilityId": "d3a33dfd7958944e", "scanner": "scanner-primary", "fingerprint": "5ea30eb4e6b9a0ee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-de026cf9b6729b79", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/days/${dayId}/patterns/${created.id} (apps/api/src/__tests__/integration/patterns.integration.test.ts:111)"}, "properties": {"repobilityId": "2a5eff1cf18a11dd", "scanner": "scanner-primary", "fingerprint": "de026cf9b6729b79", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-479c9eb03a667fa4", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns (apps/api/src/__tests__/integration/patterns.integration.test.ts:122)"}, "properties": {"repobilityId": "18493b5fbe1ed978", "scanner": "scanner-primary", "fingerprint": "479c9eb03a667fa4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a05a273f2118d002", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/days/${dayId}/patterns/${created.id} (apps/api/src/__tests__/integration/patterns.integration.test.ts:129)"}, "properties": {"repobilityId": "e417eb93ac74cb4a", "scanner": "scanner-primary", "fingerprint": "a05a273f2118d002", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d1d5b4984a338f08", "level": "error", "message": {"text": "Dangling fetch: GET /api/trips/${tripId}/days/${dayId}/patterns (apps/api/src/__tests__/integration/patterns.integration.test.ts:134)"}, "properties": {"repobilityId": "6c849de0d3a0fe07", "scanner": "scanner-primary", "fingerprint": "d1d5b4984a338f08", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-cb01a83d6df6b4f7", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/days/${dayId}/patterns/${defaultPatternId} (apps/api/src/__tests__/integration/patterns.integration.test.ts:140)"}, "properties": {"repobilityId": "1d47a38a43f53184", "scanner": "scanner-primary", "fingerprint": "cb01a83d6df6b4f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-deb4df254c7b3005", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${defaultPatternId}/schedules (apps/api/src/__tests__/integration/patterns.integration.test.ts:148)"}, "properties": {"repobilityId": "71d0d0326ca505dd", "scanner": "scanner-primary", "fingerprint": "deb4df254c7b3005", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-5cd7510897b53eb9", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${defaultPatternId}/duplicate (apps/api/src/__tests__/integration/patterns.integration.test.ts:154)"}, "properties": {"repobilityId": "71d09f2203878a00", "scanner": "scanner-primary", "fingerprint": "5cd7510897b53eb9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-30c25a2fa04c59f6", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns (apps/api/src/__tests__/integration/patterns.integration.test.ts:176)"}, "properties": {"repobilityId": "03cb0ad9b877258c", "scanner": "scanner-primary", "fingerprint": "30c25a2fa04c59f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1074a11e9870dafa", "level": "error", "message": {"text": "Dangling fetch: POST /api/bookmark-lists/${a.id}/duplicate (apps/api/src/__tests__/integration/bookmarks.integration.test.ts:135)"}, "properties": {"repobilityId": "6467e52b4fca065f", "scanner": "scanner-primary", "fingerprint": "1074a11e9870dafa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-641db2c49c77b870", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${trip.id}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/trips.integration.test.ts:153)"}, "properties": {"repobilityId": "38c84bdb5cf2ac58", "scanner": "scanner-primary", "fingerprint": "641db2c49c77b870", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-301b694121a48d77", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/candidates/reorder (apps/api/src/__tests__/integration/candidates.integration.test.ts:179)"}, "properties": {"repobilityId": "712e0569acef167e", "scanner": "scanner-primary", "fingerprint": "301b694121a48d77", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-8588010fdbc37769", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/candidates/${candidate.id}/assign (apps/api/src/__tests__/integration/candidates.integration.test.ts:200)"}, "properties": {"repobilityId": "c7e7162572b82eb7", "scanner": "scanner-primary", "fingerprint": "8588010fdbc37769", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-ec315721690382ed", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/candidates.integration.test.ts:217)"}, "properties": {"repobilityId": "08f61470392ca8d4", "scanner": "scanner-primary", "fingerprint": "ec315721690382ed", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-403e2c65e7ba0816", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/schedules/${schedule.id}/unassign (apps/api/src/__tests__/integration/candidates.integration.test.ts:229)"}, "properties": {"repobilityId": "6b758a4dc601c574", "scanner": "scanner-primary", "fingerprint": "403e2c65e7ba0816", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a888f349cf6bec24", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/candidates.integration.test.ts:297)"}, "properties": {"repobilityId": "c824ac0d95e7d743", "scanner": "scanner-primary", "fingerprint": "a888f349cf6bec24", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-100935ed2f04fc97", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/candidates.integration.test.ts:330)"}, "properties": {"repobilityId": "77135e79c5b2c3e2", "scanner": "scanner-primary", "fingerprint": "100935ed2f04fc97", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7ba4382b0eaef9a0", "level": "error", "message": {"text": "Dangling fetch: GET /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:67)"}, "properties": {"repobilityId": "adf3931dd3dcf7ee", "scanner": "scanner-primary", "fingerprint": "7ba4382b0eaef9a0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-bda44067a85ea279", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:78)"}, "properties": {"repobilityId": "45f737b9a55cf6e8", "scanner": "scanner-primary", "fingerprint": "bda44067a85ea279", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-34c955870d9ad4f7", "level": "error", "message": {"text": "Dangling fetch: GET /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:85)"}, "properties": {"repobilityId": "529e44c723ad11ba", "scanner": "scanner-primary", "fingerprint": "34c955870d9ad4f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c4a3de71f2b0d4c2", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:96)"}, "properties": {"repobilityId": "083fd7f2f00e9c40", "scanner": "scanner-primary", "fingerprint": "c4a3de71f2b0d4c2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b331fe0b718c0edd", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:102)"}, "properties": {"repobilityId": "ca3fdffcb37eebd9", "scanner": "scanner-primary", "fingerprint": "b331fe0b718c0edd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6f1246da2fcef509", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:113)"}, "properties": {"repobilityId": "8a10bdbb58d3f7b7", "scanner": "scanner-primary", "fingerprint": "6f1246da2fcef509", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e073202ebd567544", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/trips/${tripId}/members/${editor.id} (apps/api/src/__tests__/integration/members.integration.test.ts:119)"}, "properties": {"repobilityId": "61664128e88cd4c8", "scanner": "scanner-primary", "fingerprint": "e073202ebd567544", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-e5ae240b737d0730", "level": "error", "message": {"text": "Dangling fetch: GET /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:126)"}, "properties": {"repobilityId": "f0d5d8c56eba6199", "scanner": "scanner-primary", "fingerprint": "e5ae240b737d0730", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a4bb8b776a98d442", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:135)"}, "properties": {"repobilityId": "4aaa2a5e9023630e", "scanner": "scanner-primary", "fingerprint": "a4bb8b776a98d442", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-af00e0bc480761af", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/members/${editor.id} (apps/api/src/__tests__/integration/members.integration.test.ts:141)"}, "properties": {"repobilityId": "57fc388987f46f3b", "scanner": "scanner-primary", "fingerprint": "af00e0bc480761af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-46af8d94041e49d4", "level": "error", "message": {"text": "Dangling fetch: GET /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:146)"}, "properties": {"repobilityId": "0c8716d5d66095aa", "scanner": "scanner-primary", "fingerprint": "46af8d94041e49d4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-44a521269f0e1b4a", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/members/${owner.id} (apps/api/src/__tests__/integration/members.integration.test.ts:152)"}, "properties": {"repobilityId": "44e3560f259b39b0", "scanner": "scanner-primary", "fingerprint": "44a521269f0e1b4a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-331e69674173aab4", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:161)"}, "properties": {"repobilityId": "c10a41ffe34a37b2", "scanner": "scanner-primary", "fingerprint": "331e69674173aab4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b752f5e538b785d6", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:174)"}, "properties": {"repobilityId": "28032ec976878135", "scanner": "scanner-primary", "fingerprint": "b752f5e538b785d6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-686e0258eda74f7e", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/members (apps/api/src/__tests__/integration/members.integration.test.ts:185)"}, "properties": {"repobilityId": "e9c1a9ea48dd945e", "scanner": "scanner-primary", "fingerprint": "686e0258eda74f7e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-0a2fc0be40b8663c", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/days/${dayId}/patterns/${patternId}/schedules (apps/api/src/__tests__/integration/share.integration.test.ts:69)"}, "properties": {"repobilityId": "1425cb051e26fa92", "scanner": "scanner-primary", "fingerprint": "0a2fc0be40b8663c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-95036d1934e59872", "level": "error", "message": {"text": "Dangling fetch: GET /api/shared/nonexistent-token (apps/api/src/__tests__/integration/share.integration.test.ts:130)"}, "properties": {"repobilityId": "811b5bb7624d0145", "scanner": "scanner-primary", "fingerprint": "95036d1934e59872", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-36185594f5800d43", "level": "error", "message": {"text": "Dangling fetch: GET https://api.frankfurter.dev/v1/latest?from=${encodeURIComponent(from)}&to=${encodeURIComponent(to)} (apps/api/src/lib/exchange-rate.ts:14)"}, "properties": {"repobilityId": "88a73cd2c881e8dc", "scanner": "scanner-primary", "fingerprint": "36185594f5800d43", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b53f4c71ebbc8f5d", "level": "error", "message": {"text": "Dangling fetch: GET /x (apps/api/src/lib/external-api/audit-log.test.ts:19)"}, "properties": {"repobilityId": "f9fd730574ed3498", "scanner": "scanner-primary", "fingerprint": "b53f4c71ebbc8f5d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-82edb75051721d7f", "level": "error", "message": {"text": "Dangling fetch: GET /x (apps/api/src/lib/external-api/audit-log.test.ts:33)"}, "properties": {"repobilityId": "8eb3954b0890d322", "scanner": "scanner-primary", "fingerprint": "82edb75051721d7f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-bad454412975eca4", "level": "error", "message": {"text": "Dangling fetch: GET /x (apps/api/src/lib/external-api/audit-log.test.ts:53)"}, "properties": {"repobilityId": "4e8516ac38b966a6", "scanner": "scanner-primary", "fingerprint": "bad454412975eca4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c8aae5f329f38f66", "level": "error", "message": {"text": "Dangling fetch: POST https://routes.googleapis.com/directions/v2:computeRoutes (apps/api/src/routes/directions.ts:92)"}, "properties": {"repobilityId": "f16cd412a3145272", "scanner": "scanner-primary", "fingerprint": "c8aae5f329f38f66", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c90830e9b0c06e78", "level": "error", "message": {"text": "Dangling fetch: POST https://api.github.com/repos/${repo}/issues (apps/api/src/routes/feedback.ts:51)"}, "properties": {"repobilityId": "830ae31eb6ffa916", "scanner": "scanner-primary", "fingerprint": "c90830e9b0c06e78", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dbaa14432647d2de", "level": "error", "message": {"text": "Dangling fetch: PATCH https://api.vercel.com/v1/edge-config/${configId}/items (apps/api/src/routes/admin.ts:333)"}, "properties": {"repobilityId": "e4bc41e734c7e707", "scanner": "scanner-primary", "fingerprint": "dbaa14432647d2de", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e0934dd36c4b7ff", "level": "error", "message": {"text": "Dangling fetch: POST /api/trips/${tripId}/cover-image (apps/web/lib/hooks/use-cover-image-upload.ts:38)"}, "properties": {"repobilityId": "9e6c0498c97a0558", "scanner": "scanner-primary", "fingerprint": "2e0934dd36c4b7ff", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-306338348530dbd8", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/trips/${tripId}/cover-image (apps/web/lib/hooks/use-cover-image-upload.ts:64)"}, "properties": {"repobilityId": "cabaa645e4328ea5", "scanner": "scanner-primary", "fingerprint": "306338348530dbd8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7a009b1a56794f45", "level": "note", "message": {"text": "Unused endpoint: POST /"}, "properties": {"repobilityId": "69963ec8a311ef5b", "scanner": "scanner-primary", "fingerprint": "7a009b1a56794f45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ca5756175765b49d", "level": "note", "message": {"text": "Unused endpoint: GET /:id"}, "properties": {"repobilityId": "61ac0c7f80cbe9c7", "scanner": "scanner-primary", "fingerprint": "ca5756175765b49d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5fbc954f63526821", "level": "note", "message": {"text": "Unused endpoint: PATCH /:id"}, "properties": {"repobilityId": "8990144e714a5daa", "scanner": "scanner-primary", "fingerprint": "5fbc954f63526821", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7a61c112b611f4bb", "level": "note", "message": {"text": "Unused endpoint: DELETE /:id"}, "properties": {"repobilityId": "88b1af306d3288de", "scanner": "scanner-primary", "fingerprint": "7a61c112b611f4bb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-48a7839bfc82d2b3", "level": "note", "message": {"text": "Unused endpoint: GET /api/shared/quick-polls/:shareToken"}, "properties": {"repobilityId": "408fe36c01b44e1a", "scanner": "scanner-primary", "fingerprint": "48a7839bfc82d2b3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9fc415a2ce5f8d61", "level": "note", "message": {"text": "Unused endpoint: POST /api/shared/quick-polls/:shareToken/vote"}, "properties": {"repobilityId": "601f751eb4fcaac1", "scanner": "scanner-primary", "fingerprint": "9fc415a2ce5f8d61", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b162789903bb095a", "level": "note", "message": {"text": "Unused endpoint: DELETE /api/shared/quick-polls/:shareToken/vote"}, "properties": {"repobilityId": "fcbe48cd51de8147", "scanner": "scanner-primary", "fingerprint": "b162789903bb095a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e9371f01af18504c", "level": "note", "message": {"text": "Unused endpoint: USE /api/auth/sign-in/anonymous"}, "properties": {"repobilityId": "1da1783fe0ccfb3c", "scanner": "scanner-primary", "fingerprint": "e9371f01af18504c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-051a98dcfcafed15", "level": "note", "message": {"text": "Unused endpoint: USE /api/auth/sign-up/*"}, "properties": {"repobilityId": "fc3fe4c2ecb726d4", "scanner": "scanner-primary", "fingerprint": "051a98dcfcafed15", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1d080cd58ccbcb36", "level": "note", "message": {"text": "Unused endpoint: USE /api/auth/change-password"}, "properties": {"repobilityId": "d8363a38da96fdc9", "scanner": "scanner-primary", "fingerprint": "1d080cd58ccbcb36", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-503e5bab75b8662d", "level": "note", "message": {"text": "Unused endpoint: USE /api/auth/sign-in/*"}, "properties": {"repobilityId": "fca49844ba2a1a8a", "scanner": "scanner-primary", "fingerprint": "503e5bab75b8662d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-7d27a6f971a4463f", "level": "note", "message": {"text": "Unused endpoint: USE /api/auth/*"}, "properties": {"repobilityId": "ff624c5e4b861fac", "scanner": "scanner-primary", "fingerprint": "7d27a6f971a4463f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4170ca2e6bef3e9e", "level": "note", "message": {"text": "Unused endpoint: POST /api/auth/sign-up/*"}, "properties": {"repobilityId": "5d56039645d71821", "scanner": "scanner-primary", "fingerprint": "4170ca2e6bef3e9e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2bc61a2eb1cd4064", "level": "note", "message": {"text": "Unused endpoint: POST /:id/duplicate"}, "properties": {"repobilityId": "05cede8c234107cd", "scanner": "scanner-primary", "fingerprint": "2bc61a2eb1cd4064", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-17e7b55be061ba07", "level": "note", "message": {"text": "Unused endpoint: POST /:id/cover-image"}, "properties": {"repobilityId": "97ddaf535327a15d", "scanner": "scanner-primary", "fingerprint": "17e7b55be061ba07", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c5b220bb35291e9a", "level": "note", "message": {"text": "Unused endpoint: DELETE /:id/cover-image"}, "properties": {"repobilityId": "4cad6b9cd0e2f2c3", "scanner": "scanner-primary", "fingerprint": "c5b220bb35291e9a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-968d4311ce08cfe9", "level": "note", "message": {"text": "Unused endpoint: GET /openapi.json"}, "properties": {"repobilityId": "d184967e6b307dd3", "scanner": "scanner-primary", "fingerprint": "968d4311ce08cfe9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-518b51cf24b852c3", "level": "note", "message": {"text": "Unused endpoint: GET /:tripId/members"}, "properties": {"repobilityId": "6875c7337ee68568", "scanner": "scanner-primary", "fingerprint": "518b51cf24b852c3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e69594b080176710", "level": "note", "message": {"text": "Unused endpoint: POST /:tripId/members"}, "properties": {"repobilityId": "948283f3713065f8", "scanner": "scanner-primary", "fingerprint": "e69594b080176710", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0e0d2cc58f3ff3c6", "level": "note", "message": {"text": "Unused endpoint: PATCH /:tripId/members/:userId"}, "properties": {"repobilityId": "69ff7e5c96e0a5b2", "scanner": "scanner-primary", "fingerprint": "0e0d2cc58f3ff3c6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-42cd8dde33aa4e7a", "level": "note", "message": {"text": "Unused endpoint: DELETE /:tripId/members/:userId"}, "properties": {"repobilityId": "d4f7449a9d5fb92b", "scanner": "scanner-primary", "fingerprint": "42cd8dde33aa4e7a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c69d3da79044c7ea", "level": "note", "message": {"text": "Unused endpoint: GET /:tripId/activity-logs"}, "properties": {"repobilityId": "4bce51cd06dfd9d6", "scanner": "scanner-primary", "fingerprint": "c69d3da79044c7ea", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e2a4a0defd4898f4", "level": "note", "message": {"text": "Unused endpoint: PUT /:tripId/candidates/:scheduleId/reaction"}, "properties": {"repobilityId": "f90ff3be75d8d8f8", "scanner": "scanner-primary", "fingerprint": "e2a4a0defd4898f4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-ae9424bad4ef31c0", "level": "note", "message": {"text": "Unused endpoint: DELETE /:tripId/candidates/:scheduleId/reaction"}, "properties": {"repobilityId": "dec2fe309ab7f54e", "scanner": "scanner-primary", "fingerprint": "ae9424bad4ef31c0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-996f5515a35cfa45", "level": "note", "message": {"text": "Unused endpoint: PATCH /:tripId/days/:dayId"}, "properties": {"repobilityId": "5a28b65a1cddad1b", "scanner": "scanner-primary", "fingerprint": "996f5515a35cfa45", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0535da675f219221", "level": "note", "message": {"text": "Unused endpoint: PUT /read-all"}, "properties": {"repobilityId": "289e98da7f3062c6", "scanner": "scanner-primary", "fingerprint": "0535da675f219221", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-abc47697a68f0331", "level": "note", "message": {"text": "Unused endpoint: PUT /:id/read"}, "properties": {"repobilityId": "9aec903f5de8788f", "scanner": "scanner-primary", "fingerprint": "abc47697a68f0331", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8127360bd09cbdfa", "level": "note", "message": {"text": "Unused endpoint: PATCH /:groupId"}, "properties": {"repobilityId": "9b347f0ae6296ebd", "scanner": "scanner-primary", "fingerprint": "8127360bd09cbdfa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9db7d0ffea6b5791", "level": "note", "message": {"text": "Unused endpoint: DELETE /:groupId"}, "properties": {"repobilityId": "61028d9746290d57", "scanner": "scanner-primary", "fingerprint": "9db7d0ffea6b5791", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-fa09d657191279c0", "level": "note", "message": {"text": "Unused endpoint: GET /:groupId/members"}, "properties": {"repobilityId": "935c13a76065cb26", "scanner": "scanner-primary", "fingerprint": "fa09d657191279c0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2838bdd9fffe27a1", "level": "note", "message": {"text": "Unused endpoint: POST /:groupId/members"}, "properties": {"repobilityId": "09af5140128de5e4", "scanner": "scanner-primary", "fingerprint": "2838bdd9fffe27a1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4c23c7e41ff3a039", "level": "note", "message": {"text": "Unused endpoint: POST /:groupId/members/bulk"}, "properties": {"repobilityId": "9c38939dfad72c2c", "scanner": "scanner-primary", "fingerprint": "4c23c7e41ff3a039", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-84e3210641a3f764", "level": "note", "message": {"text": "Unused endpoint: DELETE /:groupId/members/:userId"}, "properties": {"repobilityId": "0e68a577d42a21a7", "scanner": "scanner-primary", "fingerprint": "84e3210641a3f764", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-847d8fa9572c79fc", "level": "note", "message": {"text": "Unused endpoint: GET /:userId/bookmark-lists"}, "properties": {"repobilityId": "9b817c9d0de84190", "scanner": "scanner-primary", "fingerprint": "847d8fa9572c79fc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d09a3b4ac8f98547", "level": "note", "message": {"text": "Unused endpoint: GET /:userId/articles"}, "properties": {"repobilityId": "1d5b1797e8584c5d", "scanner": "scanner-primary", "fingerprint": "d09a3b4ac8f98547", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-bc36d93efa5e17cb", "level": "note", "message": {"text": "Unused endpoint: GET /:userId/profile"}, "properties": {"repobilityId": "ade1c2ce02cb08e4", "scanner": "scanner-primary", "fingerprint": "bc36d93efa5e17cb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-eee087b16b27ef48", "level": "note", "message": {"text": "Unused endpoint: GET /:userId/bookmark-lists/:listId"}, "properties": {"repobilityId": "dee87c87ece64f43", "scanner": "scanner-primary", "fingerprint": "eee087b16b27ef48", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d73c7ea9ecdeb278", "level": "note", "message": {"text": "Unused endpoint: POST /:tripId/settlement-payments"}, "properties": {"repobilityId": "df1a57ce6d8cc5cf", "scanner": "scanner-primary", "fingerprint": "d73c7ea9ecdeb278", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d32bed69c2d27377", "level": "note", "message": {"text": "Unused endpoint: DELETE /:tripId/settlement-payments/:id"}, "properties": {"repobilityId": "9642aba6e149b8a3", "scanner": "scanner-primary", "fingerprint": "d32bed69c2d27377", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8d0ea9095a923813", "level": "note", "message": {"text": "Unused endpoint: GET /:userId/unsettled-summary"}, "properties": {"repobilityId": "aad56367436aeb00", "scanner": "scanner-primary", "fingerprint": "8d0ea9095a923813", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0aa63dbd57fdf464", "level": "note", "message": {"text": "Unused endpoint: GET /:tripId/candidates"}, "properties": {"repobilityId": "0ed11d60f47862f3", "scanner": "scanner-primary", "fingerprint": "0aa63dbd57fdf464", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b7d15c6511e01679", "level": "note", "message": {"text": "Unused endpoint: POST /:tripId/candidates"}, "properties": {"repobilityId": "de39f6fb8b593626", "scanner": "scanner-primary", "fingerprint": "b7d15c6511e01679", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-e732344ee9099616", "level": "note", "message": {"text": "Unused endpoint: POST /:tripId/candidates/batch-assign"}, "properties": {"repobilityId": "ffec303083082c8e", "scanner": "scanner-primary", "fingerprint": "e732344ee9099616", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9d60e11408e22243", "level": "note", "message": {"text": "Unused endpoint: POST /:tripId/candidates/batch-delete"}, "properties": {"repobilityId": "5de7b572a77033d4", "scanner": "scanner-primary", "fingerprint": "9d60e11408e22243", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4a3165c6e268570b", "level": "note", "message": {"text": "Unused endpoint: POST /:tripId/candidates/batch-duplicate"}, "properties": {"repobilityId": "20eef2537a3358a8", "scanner": "scanner-primary", "fingerprint": "4a3165c6e268570b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8118cc0a9ccdf795", "level": "note", "message": {"text": "Unused endpoint: POST /:tripId/candidates/from-bookmarks"}, "properties": {"repobilityId": "6d4b05e2651fbe67", "scanner": "scanner-primary", "fingerprint": "8118cc0a9ccdf795", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-53e632b16f56091b", "level": "note", "message": {"text": "Unused endpoint: PATCH /:tripId/candidates/reorder"}, "properties": {"repobilityId": "b39dd06f514d3222", "scanner": "scanner-primary", "fingerprint": "53e632b16f56091b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-8652f8acb558a4d0", "level": "note", "message": {"text": "Unused endpoint: PATCH /:tripId/candidates/:scheduleId"}, "properties": {"repobilityId": "967eee166aefd4b2", "scanner": "scanner-primary", "fingerprint": "8652f8acb558a4d0", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-037ff5e37f70ee1b", "level": "note", "message": {"text": "Unused endpoint: DELETE /:tripId/candidates/:scheduleId"}, "properties": {"repobilityId": "1dd8e488c5b80fe9", "scanner": "scanner-primary", "fingerprint": "037ff5e37f70ee1b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-48dfc4258c5e57f9", "level": "note", "message": {"text": "Unused endpoint: POST /:tripId/candidates/:scheduleId/assign"}, "properties": {"repobilityId": "29b3cd773a949c3f", "scanner": "scanner-primary", "fingerprint": "48dfc4258c5e57f9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}