{"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-2d82cf86d46c4d95", "name": "Possibly dead Python function: is_image_file", "shortDescription": {"text": "Possibly dead Python function: is_image_file"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-956cd053716d958d", "name": "Possibly dead Python function: is_container_file", "shortDescription": {"text": "Possibly dead Python function: is_container_file"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1341177fc3403f13", "name": "Possibly dead Python function: resize_photo", "shortDescription": {"text": "Possibly dead Python function: resize_photo"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-27525f2e232e65f2", "name": "Possibly dead Python function: bulk_log_claim_events", "shortDescription": {"text": "Possibly dead Python function: bulk_log_claim_events"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-68f7ccc0098bdeca", "name": "Possibly dead Python function: parse_residential", "shortDescription": {"text": "Possibly dead Python function: parse_residential"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7099b5539b025cf9", "name": "Possibly dead Python function: parse_commercial", "shortDescription": {"text": "Possibly dead Python function: parse_commercial"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-295d4d7770ae2034", "name": "Possibly dead Python function: model_for", "shortDescription": {"text": "Possibly dead Python function: model_for"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-47e5c8ed8883b202", "name": "Possibly dead Python function: decorator", "shortDescription": {"text": "Possibly dead Python function: decorator"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-323e812680de574e", "name": "Possibly dead Python function: detect_price_deviations", "shortDescription": {"text": "Possibly dead Python function: detect_price_deviations"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bb2346d82d57c8a1", "name": "Possibly dead Python function: lookup_by_code", "shortDescription": {"text": "Possibly dead Python function: lookup_by_code"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4510c0a716f47bff", "name": "Possibly dead Python function: match_by_code", "shortDescription": {"text": "Possibly dead Python function: match_by_code"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-57c300892214e5ff", "name": "Possibly dead Python function: match_carrier_to_usarm", "shortDescription": {"text": "Possibly dead Python function: match_carrier_to_usarm"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c0db824eef8f78c7", "name": "Possibly dead Python function: find_missing_items", "shortDescription": {"text": "Possibly dead Python function: find_missing_items"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-42cde1be10185ff0", "name": "Possibly dead Python function: ws5_owner_label", "shortDescription": {"text": "Possibly dead Python function: ws5_owner_label"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1ecbedc60ee21966", "name": "Possibly dead Python function: trim_conversation", "shortDescription": {"text": "Possibly dead Python function: trim_conversation"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-85216f802c2f1a4c", "name": "Possibly dead Python function: extract_measurements", "shortDescription": {"text": "Possibly dead Python function: extract_measurements"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a538e32b9bf4b5c8", "name": "Possibly dead Python function: extract_roof_facets", "shortDescription": {"text": "Possibly dead Python function: extract_roof_facets"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cd419ba73ec4f2a2", "name": "Possibly dead Python function: analyze_photos", "shortDescription": {"text": "Possibly dead Python function: analyze_photos"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0c3ed93caa6df354", "name": "Possibly dead Python function: analyze_photo_integrity", "shortDescription": {"text": "Possibly dead Python function: analyze_photo_integrity"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1a2021c62bb1efad", "name": "Possibly dead Python function: extract_scope_chain", "shortDescription": {"text": "Possibly dead Python function: extract_scope_chain"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-41ab5791d6e61134", "name": "Possibly dead Python function: extract_weather_data", "shortDescription": {"text": "Possibly dead Python function: extract_weather_data"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e69b780863e18131", "name": "Possibly dead Python function: sort_key", "shortDescription": {"text": "Possibly dead Python function: sort_key"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-da7d9ffce3b5d1dc", "name": "Possibly dead Python function: load_reference_file", "shortDescription": {"text": "Possibly dead Python function: load_reference_file"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4dbc1ce82e0afe03", "name": "Possibly dead Python function: build_supplement_invoice", "shortDescription": {"text": "Possibly dead Python function: build_supplement_invoice"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a9930598c446ec5d", "name": "Possibly dead Python function: audit_and_remediate", "shortDescription": {"text": "Possibly dead Python function: audit_and_remediate"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b322c0a55981018", "name": "Possibly dead Python function: format_audit_for_email", "shortDescription": {"text": "Possibly dead Python function: format_audit_for_email"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-68a72c5f9dcadc0f", "name": "Possibly dead Python function: format_date_human", "shortDescription": {"text": "Possibly dead Python function: format_date_human"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6b303d108da5cce5", "name": "Stray `console.log` in TS/JS \u2014 scripts/seed-usarm-aob.ts:39", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-usarm-aob.ts:39"}, "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-ea6be2f892a791cc", "name": "Stray `console.log` in TS/JS \u2014 cloudflare/email-worker/src/index.ts:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/email-worker/src/index.ts:53"}, "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-c7525b9c6019a3f3", "name": "Stray `console.log` in TS/JS \u2014 cloudflare/claims-intake-worker/src/index.ts:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/claims-intake-worker/src/index.ts:27"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8ab69b8d07e4df04", "name": "Stray `console.log` in TS/JS \u2014 supabase/functions/email-ingest/index.ts:103", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/email-ingest/index.ts:103"}, "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-7cd2c71f0f0145a8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/claim-lifecycle-bar.tsx:195", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/claim-lifecycle-bar.tsx:195"}, "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-b41b596ef8f088c4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/onboarding-chat.tsx:332", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/onboarding-chat.tsx:332"}, "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-f368abc8a7c27ea7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/invoice-builder.tsx:420", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/invoice-builder.tsx:420"}, "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-d678f5d49a8b67be", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/rep-action-center.tsx:242", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rep-action-center.tsx:242"}, "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-5e9c4b11146ff848", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/job-pnl-card.tsx:206", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/job-pnl-card.tsx:206"}, "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-e2ebce5eaaea7fd7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/production-trades-card.tsx:118", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/production-trades-card.tsx:118"}, "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-a76f524d4b35b212", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/homeowner-engagement-card.tsx:310", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/homeowner-engagement-card.tsx:310"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-46fa2acb7b9685d8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/unlinked-installs-list.tsx:193", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/unlinked-installs-list.tsx:193"}, "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-ce42e2214302a0f2", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/markdown-content.tsx:8", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/markdown-content.tsx:8"}, "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-270125e0d2183e26", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/whats-next-hero.tsx:160", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/whats-next-hero.tsx:160"}, "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-25cb6de49eb57843", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin-brain-chat.tsx:623", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin-brain-chat.tsx:623"}, "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-1697b6bac254c644", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/agentic-drop-zone.tsx:335", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/agentic-drop-zone.tsx:335"}, "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-0079eafd83b01a23", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin-right-rail.tsx:214", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin-right-rail.tsx:214"}, "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-43a9f82b231b4e7e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/close-out-list.tsx:226", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/close-out-list.tsx:226"}, "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-880b60eb0effc719", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/workorder-card.tsx:179", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/workorder-card.tsx:179"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-99502a6a4b0b0bfe", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/install-supplement-builder.tsx:728", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/install-supplement-builder.tsx:728"}, "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-6f720fc27a6be4df", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/production-calendar.tsx:295", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/production-calendar.tsx:295"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-156c8c3a52666eed", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/contact-registry-card.tsx:182", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/contact-registry-card.tsx:182"}, "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-34dce73ada2e396c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/claim-row-action.tsx:103", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/claim-row-action.tsx:103"}, "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-da84dae7e9d3131f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule-claim-modal.tsx:382", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule-claim-modal.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-89b8016389a81f44", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/communication-log.tsx:117", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/communication-log.tsx:117"}, "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-ec27322ef46e6d24", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/communication-log.tsx:141", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/communication-log.tsx:141"}, "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-dc31b2f25be4e548", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/claim-picker.tsx:65", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/claim-picker.tsx:65"}, "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-b7ddde23bc04228e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/file-upload-zone.tsx:169", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/file-upload-zone.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-68d8b3fdb6ed2489", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin-referral-loop-panel.tsx:209", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin-referral-loop-panel.tsx:209"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7771135f00d44f04", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/claim-brain-chat.tsx:369", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/claim-brain-chat.tsx:369"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dfd6d526b86f9560", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/claim-brain-chat.tsx:920", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/claim-brain-chat.tsx:920"}, "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-fe65485adedb2ce1", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/uploaded-documents.tsx:219", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/uploaded-documents.tsx:219"}, "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-fc6b355cf4a8bb4a", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/json-ld.tsx:9", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/json-ld.tsx:9"}, "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-86a70a72f2bb1e13", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/scope-comparison.tsx:211", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/scope-comparison.tsx:211"}, "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-40e33537522e9a71", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/roof-photo-map.tsx:503", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/roof-photo-map.tsx:503"}, "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-d4065b3dcd257e59", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/claim-detail/communications-center.tsx:299", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/claim-detail/communications-center.tsx:299"}, "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-d3f58f280ca26cc2", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/claim-detail/communications-center.tsx:532", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/claim-detail/communications-center.tsx:532"}, "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-dc13abb6d71653be", "name": "`truncate` class without `title=` for hover reveal \u2014 src/components/claim-detail/v2/highlights-panel.tsx:65", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/claim-detail/v2/highlights-panel.tsx:65"}, "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-b22d1d8ca79a22b3", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/team/accept/route.ts:124", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/team/accept/route.ts:124"}, "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-ed214433a01295a2", "name": "TODO/FIXME marker in shipping code \u2014 src/app/api/scope-comparison/route.ts:91", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/scope-comparison/route.ts:91"}, "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-7519fa249e71cebe", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/upgrade-emails/route.ts:377", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/upgrade-emails/route.ts:377"}, "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-51797bf5fd3bc18b", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/reactivation-emails/route.ts:162", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/reactivation-emails/route.ts:162"}, "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-107650ec0fcfee18", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/reconcile-overage/route.ts:185", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/reconcile-overage/route.ts:185"}, "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-9789af7b0779a021", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/reconcile-period/route.ts:169", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/reconcile-period/route.ts:169"}, "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-604f5bc6cb53e1d9", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/notify-repair-complete/route.ts:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/notify-repair-complete/route.ts:36"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d83ebaea1af00e0", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/notify-complete/route.ts:205", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/notify-complete/route.ts:205"}, "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-96f8337e2e2a6eee", "name": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/stripe/route.ts:182", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/stripe/route.ts:182"}, "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-fe72fa9213aed222", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/dashboard-content.tsx:611", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/dashboard-content.tsx:611"}, "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-e7328f2cc3de32e4", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/repair-tab-content.tsx:96", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/repair-tab-content.tsx:96"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eb89d75ccab2e226", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/photo-review/photo-review-content.tsx:477", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/photo-review/photo-review-content.tsx:477"}, "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-e16ecbd9e99bc671", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/analytics/analytics-content.tsx:412", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/analytics/analytics-content.tsx:412"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e2323b87d94834ca", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/commissions/commissions-content.tsx:244", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/commissions/commissions-content.tsx:244"}, "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-8dbbb408d3ace6eb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/repairs/repairs-dashboard.tsx:261", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/repairs/repairs-dashboard.tsx:261"}, "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-a12163412005b148", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/correspondence/page.tsx:236", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/correspondence/page.tsx:236"}, "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-7dc74aea56fa729c", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/admin-sidebar.tsx:178", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/admin-sidebar.tsx:178"}, "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-e8c202c1e931c731", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/settings/page.tsx:1158", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/settings/page.tsx:1158"}, "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-a340f4d8530e35b7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/carriers/page.tsx:260", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/carriers/page.tsx:260"}, "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-bf6b8440e0a9cebb", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/commissions/page.tsx:281", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/commissions/page.tsx:281"}, "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-4d3a5f02e913fedd", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/expenses/page.tsx:737", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/expenses/page.tsx:737"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a17475d174a1666f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/revenue/page.tsx:398", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/revenue/page.tsx:398"}, "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-a5658c561cd1ab5d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/company-docs/company-docs-client.tsx:338", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/company-docs/company-docs-client.tsx:338"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0299a4d062043998", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/repair-review/repair-review-content.tsx:153", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/repair-review/repair-review-content.tsx:153"}, "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-82482600d86a2f86", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/email-templates/page.tsx:290", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/email-templates/page.tsx:290"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-544ce01495451779", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/retail-estimates/retail-estimates-list.tsx:336", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/retail-estimates/retail-estimates-list.tsx:336"}, "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-d5e50f63ea7a4a2f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/retail/page.tsx:578", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/retail/page.tsx:578"}, "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-04983ec869d760f3", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/admin-dashboard.tsx:497", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/admin-dashboard.tsx:497"}, "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-4648cf993c4ab01e", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/analytics/analytics-content.tsx:256", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/analytics/analytics-content.tsx:256"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a30219ac1b84dc8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/leads/leads-client.tsx:152", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/leads/leads-client.tsx:152"}, "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-7aebee1aacf65873", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/activation/activation-content.tsx:237", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/activation/activation-content.tsx:237"}, "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-f2c8aa0eafb7e67d", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/paths/paths-monitor.tsx:150", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/paths/paths-monitor.tsx:150"}, "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-fec4dc090691cee7", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/claim/[id]/admin-claim-detail.tsx:723", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/claim/[id]/admin-claim-detail.tsx:723"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-61884648e17029ca", "name": "\"active\" state uses light bg in a dark theme \u2014 src/app/admin/qa-learning/qa-learning-queue.tsx:355", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/app/admin/qa-learning/qa-learning-queue.tsx:355"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f8b2f7f79c192165", "name": "\"active\" state uses light bg in a dark theme \u2014 src/app/admin/agent-recommendations/recommendations-queue.tsx:235", "shortDescription": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/app/admin/agent-recommendations/recommendations-queue.tsx:235"}, "fullDescription": {"text": "A ternary like `active ? 'bg-white' : '...'` (or bg-gray-100/200) on a dark theme produces jarring white pills. Use a dark-emphasized active state instead \u2014 border + ring or slightly brighter dark bg. Example: `active ? 'bg-gray-800 border-gray-500 ring-1 ring-blue-500/30' : '\u2026'`.\n\nWhy: P-E in CHECKLIST.md \u2014 light bg in a dark theme is a class of regression.\nRule id: fq.active-light-bg"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-993c36155d4ca642", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/portal/[token]/portal-client.tsx:467", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/portal/[token]/portal-client.tsx:467"}, "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-db50ddb2eeb886e8", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/u/[token]/upload-client.tsx:174", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/u/[token]/upload-client.tsx:174"}, "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-dd5575eafc00af8f", "name": "`truncate` class without `title=` for hover reveal \u2014 src/app/sample/dashboard/page.tsx:425", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/sample/dashboard/page.tsx:425"}, "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-1f66ad88286ca30a", "name": "Dockerfile runs as root: backend/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: backend/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8cd20d539467d2c5", "name": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-aa5acaa49eb8315b", "name": "Containers defined but no K8s/orchestration manifest found", "shortDescription": {"text": "Containers defined but no K8s/orchestration manifest found"}, "fullDescription": {"text": "Repo has Dockerfiles/compose but no Kubernetes/Nomad manifests. If the target deployment is K8s, the manifests may live in a separate ops repo."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-07f1e067dbf0ac8f", "name": "Insecure pattern 'cors_wildcard' in supabase/functions/email-ingest/index.ts:82", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/email-ingest/index.ts:82"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-711ce51aec81b474", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/communication-log.tsx:141", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/communication-log.tsx:141"}, "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-e7bd30cb2ff1fcb0", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/claim-brain-chat.tsx:920", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/claim-brain-chat.tsx:920"}, "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-9f04b0d772c7c5d7", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/json-ld.tsx:9", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/json-ld.tsx:9"}, "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-a74ea101d1055e34", "name": "Insecure pattern 'dangerous_innerhtml' in src/components/claim-detail/communications-center.tsx:532", "shortDescription": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/claim-detail/communications-center.tsx:532"}, "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-b699504408c250bd", "name": "Very large file: backend/repair_generator.py (1667 lines)", "shortDescription": {"text": "Very large file: backend/repair_generator.py (1667 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-0c7cb6deab0394da", "name": "Very large file: backend/compliance_report.py (2448 lines)", "shortDescription": {"text": "Very large file: backend/compliance_report.py (2448 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-59e37ba12ae28835", "name": "Very large file: backend/qa_pdf_checks.py (1207 lines)", "shortDescription": {"text": "Very large file: backend/qa_pdf_checks.py (1207 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-04f1cc2ea550ff50", "name": "Very large file: backend/claim_brain_pdfs.py (1115 lines)", "shortDescription": {"text": "Very large file: backend/claim_brain_pdfs.py (1115 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-4b6aba46eadf2fb5", "name": "Very large file: backend/pdf_templates.py (1719 lines)", "shortDescription": {"text": "Very large file: backend/pdf_templates.py (1719 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-958cb040b91cbb79", "name": "Very large file: backend/xactimate_lookup.py (2234 lines)", "shortDescription": {"text": "Very large file: backend/xactimate_lookup.py (2234 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-b8286b9effa6fb23", "name": "Very large file: backend/claim_brain_tools.py (7046 lines)", "shortDescription": {"text": "Very large file: backend/claim_brain_tools.py (7046 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-582bb91fca40cc6e", "name": "Very large file: backend/remote_richard.py (2709 lines)", "shortDescription": {"text": "Very large file: backend/remote_richard.py (2709 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-1774781f17c4cc56", "name": "Very large file: backend/repair_processor.py (1359 lines)", "shortDescription": {"text": "Very large file: backend/repair_processor.py (1359 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-6a576260ae106d87", "name": "Very large file: backend/usarm_pdf_generator.py (5955 lines)", "shortDescription": {"text": "Very large file: backend/usarm_pdf_generator.py (5955 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-116edcfda759a7c7", "name": "Very large file: backend/gmail_poller.py (2149 lines)", "shortDescription": {"text": "Very large file: backend/gmail_poller.py (2149 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-6cf217db41d5ec32", "name": "Very large file: backend/processor.py (11723 lines)", "shortDescription": {"text": "Very large file: backend/processor.py (11723 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-d8e724f25bac1ef5", "name": "Very large file: backend/qa_auditor.py (2528 lines)", "shortDescription": {"text": "Very large file: backend/qa_auditor.py (2528 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-49b7f2d6b388a692", "name": "Very large file: backend/main.py (8603 lines)", "shortDescription": {"text": "Very large file: backend/main.py (8603 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-d86a16b7deffaad6", "name": "Very large file: backend/tests/test_doc06_siding.py (1189 lines)", "shortDescription": {"text": "Very large file: backend/tests/test_doc06_siding.py (1189 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-32b1b80f5f1f4c70", "name": "Very large file: src/components/install-supplement-builder.tsx (982 lines)", "shortDescription": {"text": "Very large file: src/components/install-supplement-builder.tsx (982 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-82368d856e3fd7b4", "name": "Very large file: src/components/claim-brain-chat.tsx (2223 lines)", "shortDescription": {"text": "Very large file: src/components/claim-brain-chat.tsx (2223 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-63d5b49265d82abe", "name": "Very large file: src/app/page.tsx (1573 lines)", "shortDescription": {"text": "Very large file: src/app/page.tsx (1573 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-07df40aeba8de912", "name": "Very large file: src/app/dashboard/dashboard-content.tsx (1643 lines)", "shortDescription": {"text": "Very large file: src/app/dashboard/dashboard-content.tsx (1643 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-e3848cdc1a488804", "name": "Very large file: src/app/dashboard/new-claim/page.tsx (1637 lines)", "shortDescription": {"text": "Very large file: src/app/dashboard/new-claim/page.tsx (1637 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-8a0f51985dd53800", "name": "Very large file: src/app/dashboard/settings/page.tsx (1745 lines)", "shortDescription": {"text": "Very large file: src/app/dashboard/settings/page.tsx (1745 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-a927b77ca2dc8a9f", "name": "Very large file: src/app/dashboard/storm-leads/storm-leads-client.tsx (1383 lines)", "shortDescription": {"text": "Very large file: src/app/dashboard/storm-leads/storm-leads-client.tsx (1383 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-337e60b86676a143", "name": "Very large file: src/app/dashboard/admin/settings/page.tsx (1245 lines)", "shortDescription": {"text": "Very large file: src/app/dashboard/admin/settings/page.tsx (1245 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-7f793cff4d411ef5", "name": "Very large file: src/app/dashboard/claim/[id]/page.tsx (2515 lines)", "shortDescription": {"text": "Very large file: src/app/dashboard/claim/[id]/page.tsx (2515 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-52cfdfaaeb08253c", "name": "Very large file: src/app/admin/admin-dashboard.tsx (1331 lines)", "shortDescription": {"text": "Very large file: src/app/admin/admin-dashboard.tsx (1331 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-69aa7b79be166311", "name": "Very large file: src/lib/seo/locations.ts (1142 lines)", "shortDescription": {"text": "Very large file: src/lib/seo/locations.ts (1142 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "55 test file(s) for 771 source file(s) (ratio 0.07). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-796689a5f1663f86", "name": "Node manifest has dependencies but no lockfile: cloudflare/claims-intake-worker/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: cloudflare/claims-intake-worker/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 1260 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 415 placeholder/mock markers across 87 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-7ac41429a9c8ddd8", "name": "Commented-code block (7 lines) in scripts/parity_harness_ship3.py:179", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/parity_harness_ship3.py:179"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f45cd3b15a618c17", "name": "Legacy-named symbol `missing_in_old` in scripts/parity_harness.py:42", "shortDescription": {"text": "Legacy-named symbol `missing_in_old` in scripts/parity_harness.py:42"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8db45b3529cdfa67", "name": "Commented-code block (7 lines) in scripts/import_national_prices.py:38", "shortDescription": {"text": "Commented-code block (7 lines) in scripts/import_national_prices.py:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ed8744c2638e4d35", "name": "Commented-code block (6 lines) in scripts/import_pricing_to_tables.py:66", "shortDescription": {"text": "Commented-code block (6 lines) in scripts/import_pricing_to_tables.py: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-116ab2f4c3a47f85", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/email-worker/src/index.ts:113", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/email-worker/src/index.ts:113"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0ef8f5cace26fdbb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/claims-intake-worker/src/index.ts:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/claims-intake-worker/src/index.ts:58"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a10d41467d14353b", "name": "Commented-code block (5 lines) in backend/code_compliance.py:16", "shortDescription": {"text": "Commented-code block (5 lines) in backend/code_compliance.py: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-2da02001c44b459d", "name": "Commented-code block (6 lines) in backend/test_noaa_source_priority.py:73", "shortDescription": {"text": "Commented-code block (6 lines) in backend/test_noaa_source_priority.py:73"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a1e2d7f010f0fa64", "name": "Commented-code block (10 lines) in backend/compliance_report.py:72", "shortDescription": {"text": "Commented-code block (10 lines) in backend/compliance_report.py:72"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6dbeb224e4fb2b4e", "name": "Commented-code block (6 lines) in backend/qa_pdf_checks.py:295", "shortDescription": {"text": "Commented-code block (6 lines) in backend/qa_pdf_checks.py:295"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0d7cbc827f8f350f", "name": "Legacy-named symbol `usarm_storm_v1` in backend/leadgen_ingest.py:160", "shortDescription": {"text": "Legacy-named symbol `usarm_storm_v1` in backend/leadgen_ingest.py:160"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9bfba01c89e2c2fb", "name": "Commented-code block (7 lines) in backend/carrier_analyst.py:79", "shortDescription": {"text": "Commented-code block (7 lines) in backend/carrier_analyst.py:79"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ae14ed6cd6b70c8c", "name": "Commented-code block (5 lines) in backend/email_voice.py:110", "shortDescription": {"text": "Commented-code block (5 lines) in backend/email_voice.py:110"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eb35245e9b200dbe", "name": "Commented-code block (8 lines) in backend/model_config.py:170", "shortDescription": {"text": "Commented-code block (8 lines) in backend/model_config.py:170"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9eb502d26b173ec2", "name": "Commented-code block (5 lines) in backend/pdf_templates.py:1609", "shortDescription": {"text": "Commented-code block (5 lines) in backend/pdf_templates.py:1609"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c193d39e086f2d4f", "name": "Commented-code block (5 lines) in backend/xactimate_lookup.py:87", "shortDescription": {"text": "Commented-code block (5 lines) in backend/xactimate_lookup.py:87"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-92ccb7786cc208dd", "name": "Commented-code block (5 lines) in backend/crm_api.py:651", "shortDescription": {"text": "Commented-code block (5 lines) in backend/crm_api.py:651"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-534dd5af562f16b4", "name": "Commented-code block (5 lines) in backend/correspondence_analyzer.py:81", "shortDescription": {"text": "Commented-code block (5 lines) in backend/correspondence_analyzer.py:81"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8929c21f9b130923", "name": "Commented-code block (7 lines) in backend/carrier_normalizer.py:48", "shortDescription": {"text": "Commented-code block (7 lines) in backend/carrier_normalizer.py:48"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0c8c908bb521e8fb", "name": "Commented-code block (5 lines) in backend/slope_mapping.py:334", "shortDescription": {"text": "Commented-code block (5 lines) in backend/slope_mapping.py:334"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f897cedfa8a4553c", "name": "Commented-code block (7 lines) in backend/telemetry.py:51", "shortDescription": {"text": "Commented-code block (7 lines) in backend/telemetry.py:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d21487a5cb8b7225", "name": "Commented-code block (6 lines) in backend/claim_brain_tools.py:1691", "shortDescription": {"text": "Commented-code block (6 lines) in backend/claim_brain_tools.py:1691"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-35993947a1f56a1b", "name": "Commented-code block (8 lines) in backend/bulk_campaigns.py:57", "shortDescription": {"text": "Commented-code block (8 lines) in backend/bulk_campaigns.py:57"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3dcebb61774c9896", "name": "Commented-code block (5 lines) in backend/remote_richard.py:90", "shortDescription": {"text": "Commented-code block (5 lines) in backend/remote_richard.py:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9d5075c4a16bff12", "name": "Commented-code block (5 lines) in backend/repair_processor.py:1295", "shortDescription": {"text": "Commented-code block (5 lines) in backend/repair_processor.py:1295"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a6c8a71f7ccfc36d", "name": "Commented-code block (6 lines) in backend/usarm_pdf_generator.py:220", "shortDescription": {"text": "Commented-code block (6 lines) in backend/usarm_pdf_generator.py:220"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ef71dd23ebcf2e6a", "name": "Commented-code block (11 lines) in backend/validate_market_prices.py:117", "shortDescription": {"text": "Commented-code block (11 lines) in backend/validate_market_prices.py:117"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-fb0e6ee437ba1678", "name": "Commented-code block (5 lines) in backend/gmail_poller.py:418", "shortDescription": {"text": "Commented-code block (5 lines) in backend/gmail_poller.py:418"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ae1ab197fcb1bc7c", "name": "Commented-code block (5 lines) in backend/remote_richard_agent.py:607", "shortDescription": {"text": "Commented-code block (5 lines) in backend/remote_richard_agent.py:607"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f357e37288dd0fc8", "name": "Commented-code block (5 lines) in backend/processor.py:97", "shortDescription": {"text": "Commented-code block (5 lines) in backend/processor.py:97"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1bbc5bc5221b719c", "name": "Blocking `urllib.request.urlopen(...)` inside `async def process_claim` \u2014 backend/processor.py:7837", "shortDescription": {"text": "Blocking `urllib.request.urlopen(...)` inside `async def process_claim` \u2014 backend/processor.py:7837"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `urllib.request.urlopen(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-71bb66d21dbefa3b", "name": "Commented-code block (5 lines) in backend/upload_link.py:62", "shortDescription": {"text": "Commented-code block (5 lines) in backend/upload_link.py:62"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-be7599f7df28afcb", "name": "Commented-code block (8 lines) in backend/qa_auditor.py:67", "shortDescription": {"text": "Commented-code block (8 lines) in backend/qa_auditor.py:67"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6a966e5bb308efa7", "name": "Commented-code block (6 lines) in backend/backfill_carrier_brand.py:123", "shortDescription": {"text": "Commented-code block (6 lines) in backend/backfill_carrier_brand.py:123"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-944c3a3665164e1c", "name": "Commented-code block (6 lines) in backend/backfill_canonical_carriers.py:100", "shortDescription": {"text": "Commented-code block (6 lines) in backend/backfill_canonical_carriers.py:100"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b09e315752258a25", "name": "Commented-code block (6 lines) in backend/main.py:546", "shortDescription": {"text": "Commented-code block (6 lines) in backend/main.py:546"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0eab04c70e25c0c9", "name": "Blocking `urllib.request.urlopen(...)` inside `async def debug_profile` \u2014 backend/main.py:505", "shortDescription": {"text": "Blocking `urllib.request.urlopen(...)` inside `async def debug_profile` \u2014 backend/main.py:505"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `urllib.request.urlopen(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f3974e478aee7081", "name": "Blocking `time.sleep(...)` inside `async def noaa_scan` \u2014 backend/main.py:1485", "shortDescription": {"text": "Blocking `time.sleep(...)` inside `async def noaa_scan` \u2014 backend/main.py:1485"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `time.sleep(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-faa702c974bfff97", "name": "Blocking `urllib.request.urlopen(...)` inside `async def gmail_auth_callback` \u2014 backend/main.py:7125", "shortDescription": {"text": "Blocking `urllib.request.urlopen(...)` inside `async def gmail_auth_callback` \u2014 backend/main.py:7125"}, "fullDescription": {"text": "Sync I/O inside an async function blocks the event loop. While `urllib.request.urlopen(...)` is running, *all* other coroutines on this loop are paused \u2014 silent throughput collapse under concurrency. Use the async equivalent (`httpx.AsyncClient`, `asyncio.sleep`, `aiofiles`) or wrap with `await asyncio.to_thread(...)`."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "high", "confidence": 1.0}}, {"id": "scanner-22cb5f2cd515192d", "name": "Commented-code block (5 lines) in backend/claim_brain_email.py:54", "shortDescription": {"text": "Commented-code block (5 lines) in backend/claim_brain_email.py: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-4c9962cb933b933a", "name": "Network/subprocess call without timeout or try/except \u2014 backend/claim_brain_email.py:183", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/claim_brain_email.py:183"}, "fullDescription": {"text": "`urllib.request.urlopen(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-dc348bdadd5fc268", "name": "Legacy-named symbol `claim_config_backup` in backend/reprocess_13_chrisfield.py:222", "shortDescription": {"text": "Legacy-named symbol `claim_config_backup` in backend/reprocess_13_chrisfield.py:222"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1416ded7586705a0", "name": "Commented-code block (7 lines) in backend/richard_middleware.py:51", "shortDescription": {"text": "Commented-code block (7 lines) in backend/richard_middleware.py:51"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cd6072dfdf6105d4", "name": "Commented-code block (6 lines) in backend/carrier_reply_money_loop.py:74", "shortDescription": {"text": "Commented-code block (6 lines) in backend/carrier_reply_money_loop.py: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-1b3e99b0236e8ece", "name": "Commented-code block (6 lines) in backend/remote_email_poller.py:235", "shortDescription": {"text": "Commented-code block (6 lines) in backend/remote_email_poller.py:235"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-66e8f34807a7d2ea", "name": "Commented-code block (8 lines) in backend/integrations/companycam.py:28", "shortDescription": {"text": "Commented-code block (8 lines) in backend/integrations/companycam.py:28"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7adb0080d448e05a", "name": "Commented-code block (5 lines) in backend/tests/test_roof_geometry_svg.py:45", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/test_roof_geometry_svg.py:45"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0a3f77a110cbdcd1", "name": "Legacy-named symbol `cfg_legacy` in backend/tests/test_material_enum.py:281", "shortDescription": {"text": "Legacy-named symbol `cfg_legacy` in backend/tests/test_material_enum.py:281"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-df626c0c03d02264", "name": "Commented-code block (5 lines) in backend/tests/test_doc06_siding.py:572", "shortDescription": {"text": "Commented-code block (5 lines) in backend/tests/test_doc06_siding.py:572"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6fa60c3fee70a4b4", "name": "Commented-code block (6 lines) in backend/tests/claim_invariants.py:93", "shortDescription": {"text": "Commented-code block (6 lines) in backend/tests/claim_invariants.py:93"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-542bb297251153eb", "name": "Commented-code block (7 lines) in backend/tests/test_doc06_priced_supplement.py:116", "shortDescription": {"text": "Commented-code block (7 lines) in backend/tests/test_doc06_priced_supplement.py:116"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5904c01e12a0625e", "name": "Commented-code block (10 lines) in backend/tests/test_claim_invariants.py:208", "shortDescription": {"text": "Commented-code block (10 lines) in backend/tests/test_claim_invariants.py:208"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f37040f61027b9d0", "name": "Commented-code block (8 lines) in backend/scope_comparison/rules.py:396", "shortDescription": {"text": "Commented-code block (8 lines) in backend/scope_comparison/rules.py:396"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-63c837a3674d912d", "name": "Commented-code block (5 lines) in backend/building_codes/lookup.py:77", "shortDescription": {"text": "Commented-code block (5 lines) in backend/building_codes/lookup.py:77"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-558a0b5dab97ef3c", "name": "Commented-code block (5 lines) in backend/richard_evals/track1_unit.py:34", "shortDescription": {"text": "Commented-code block (5 lines) in backend/richard_evals/track1_unit.py: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-9cb9586d8affe461", "name": "Commented-code block (5 lines) in backend/damage_scoring/code_triggers.py:13", "shortDescription": {"text": "Commented-code block (5 lines) in backend/damage_scoring/code_triggers.py:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e056ef86ccad6866", "name": "Commented-code block (9 lines) in backend/noaa_weather/api.py:200", "shortDescription": {"text": "Commented-code block (9 lines) in backend/noaa_weather/api.py:200"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3e5a748f723764df", "name": "Legacy-named symbol `save_copy` in backend/noaa_weather/report.py:90", "shortDescription": {"text": "Legacy-named symbol `save_copy` in backend/noaa_weather/report.py:90"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5dfa77e87b23d4d7", "name": "Commented-code block (7 lines) in backend/noaa_weather/report.py:123", "shortDescription": {"text": "Commented-code block (7 lines) in backend/noaa_weather/report.py:123"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-42a9e1c4e7cc5c50", "name": "Commented-code block (5 lines) in src/components/money-strip.tsx:60", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/money-strip.tsx:60"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-10957f24f8d9fc1e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/money-strip.tsx:70", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/money-strip.tsx:70"}, "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-7e993a9b01810013", "name": "Commented-code block (8 lines) in src/components/photo-markup-modal.tsx:137", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/photo-markup-modal.tsx:137"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-082cabd21305e67c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/photo-markup-modal.tsx:171", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/photo-markup-modal.tsx:171"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8772b4e9ffb78855", "name": "Commented-code block (5 lines) in src/components/onboarding-chat.tsx:11", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/onboarding-chat.tsx: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-3f7cb32578ce5c43", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/onboarding-chat.tsx:234", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/onboarding-chat.tsx:234"}, "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-174556e0bf38f71c", "name": "Commented-code block (5 lines) in src/components/invoice-builder.tsx:31", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/invoice-builder.tsx:31"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5fa4f47ed502c5d6", "name": "Commented-code block (8 lines) in src/components/rep-action-center.tsx:57", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/rep-action-center.tsx:57"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ca92c79d610a5dde", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/estimate-view.tsx:72", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/estimate-view.tsx:72"}, "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-e9d51cfb60dc6566", "name": "Commented-code block (5 lines) in src/components/hero-signup-form.tsx:95", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/hero-signup-form.tsx: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-113309799a6297d1", "name": "Commented-code block (5 lines) in src/components/send-documents-block.tsx:67", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/send-documents-block.tsx:67"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-53807b73979e0d2a", "name": "Commented-code block (6 lines) in src/components/onboarding-checklist.tsx:94", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/onboarding-checklist.tsx:94"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cabea1472ae0e052", "name": "Commented-code block (5 lines) in src/components/admin-brain-chat.tsx:35", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/admin-brain-chat.tsx:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4b7ce2102c23170b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin-brain-chat.tsx:451", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin-brain-chat.tsx:451"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eaaa71fcefb61d8e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/edit-report-fields-card.tsx:72", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/edit-report-fields-card.tsx:72"}, "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-de5fc992c1c185f8", "name": "Commented-code block (6 lines) in src/components/claim-money-actions.tsx:46", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/claim-money-actions.tsx:46"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc6f558cfc6bed04", "name": "Commented-code block (5 lines) in src/components/signature-manager.tsx:122", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/signature-manager.tsx:122"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a5fe320f14a359f7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/signature-manager.tsx:147", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/signature-manager.tsx:147"}, "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-2d550f915e098614", "name": "Commented-code block (8 lines) in src/components/agentic-drop-zone.tsx:9", "shortDescription": {"text": "Commented-code block (8 lines) in src/components/agentic-drop-zone.tsx: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-e33aba68f24d686a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/agentic-drop-zone.tsx:112", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/agentic-drop-zone.tsx:112"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9251ea91e988a986", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/richard-suggestion-banner.tsx:86", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/richard-suggestion-banner.tsx:86"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-436b6d8a373a3276", "name": "Commented-code block (6 lines) in src/components/page-view-tracker.tsx:12", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/page-view-tracker.tsx:12"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d94584cf3c35c017", "name": "Commented-code block (5 lines) in src/components/share-win-button.tsx:54", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/share-win-button.tsx: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-2181c226a4ca264a", "name": "Commented-code block (5 lines) in src/components/install-supplement-builder.tsx:836", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/install-supplement-builder.tsx:836"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-80b6687bb1f0e62a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/install-supplement-builder.tsx:55", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/install-supplement-builder.tsx:55"}, "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-bf1c669304587724", "name": "Commented-code block (5 lines) in src/components/comm-badges.tsx:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/comm-badges.tsx: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-09a1cf158063416b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/coc-builder.tsx:58", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/coc-builder.tsx:58"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-96cd7595486c088e", "name": "Commented-code block (5 lines) in src/components/check-upload-modal.tsx:105", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/check-upload-modal.tsx:105"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a74b73193459e687", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/check-upload-modal.tsx:137", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/check-upload-modal.tsx:137"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-54994ba0a9d08e09", "name": "Commented-code block (5 lines) in src/components/instant-funnel.tsx:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/instant-funnel.tsx:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-a1d640b423fe3c9b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin-referral-loop-panel.tsx:94", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin-referral-loop-panel.tsx:94"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-233fa1adf68e424b", "name": "Commented-code block (5 lines) in src/components/claim-brain-chat.tsx:34", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/claim-brain-chat.tsx:34"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-59dd8e7bed6ddfae", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/claim-brain-chat.tsx:1348", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/claim-brain-chat.tsx:1348"}, "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-a15866240814eb94", "name": "Commented-code block (5 lines) in src/components/crm-import-modal.tsx:90", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/crm-import-modal.tsx:90"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dd8d305ca150867d", "name": "Commented-code block (11 lines) in src/components/start-chat.tsx:14", "shortDescription": {"text": "Commented-code block (11 lines) in src/components/start-chat.tsx: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-0a677a83ce27720a", "name": "Commented-code block (6 lines) in src/components/supplement-composer.tsx:228", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/supplement-composer.tsx:228"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-97e617edc4fbcbd1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/supplement-composer.tsx:451", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/supplement-composer.tsx:451"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1eaaa0dce8074f40", "name": "Commented-code block (6 lines) in src/components/claim-action-bar.tsx:50", "shortDescription": {"text": "Commented-code block (6 lines) in src/components/claim-action-bar.tsx:50"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9297f4db58ed7467", "name": "Commented-code block (5 lines) in src/components/scope-comparison.tsx:58", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/scope-comparison.tsx:58"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9550afc5c600a384", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/expense-upload-modal.tsx:130", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/expense-upload-modal.tsx:130"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-597c55993ce475bb", "name": "Commented-code block (5 lines) in src/components/claim-detail/communications-center.tsx:42", "shortDescription": {"text": "Commented-code block (5 lines) in src/components/claim-detail/communications-center.tsx:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-66ed526f972e2faf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/claim-detail/communications-center.tsx:104", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/claim-detail/communications-center.tsx:104"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e7f3b4351916d7d8", "name": "Commented-code block (5 lines) in src/app/page.tsx:11", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/page.tsx: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-05c31f576761cf26", "name": "Commented-code block (5 lines) in src/app/instant-supplement/page.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/instant-supplement/page.tsx: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-569bb2f28c78a899", "name": "Commented-code block (7 lines) in src/app/auth/callback/route.ts:205", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/auth/callback/route.ts:205"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0fe79e8caf448ff4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/auth/callback/route.ts:18", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/auth/callback/route.ts:18"}, "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-4bda1561a5d8fc0a", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/auth/confirm/route.ts:16", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/auth/confirm/route.ts:16"}, "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-1114b4305d9309cd", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/welcome-email/route.ts:79", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/welcome-email/route.ts:79"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ad760d7571ef38ea", "name": "Commented-code block (6 lines) in src/app/api/coc/route.ts:63", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/coc/route.ts:63"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d4b5bbedc9e095ef", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/coc/route.ts:256", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/coc/route.ts:256"}, "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-809296723905e7e5", "name": "Commented-code block (7 lines) in src/app/api/install-supplements/route.ts:133", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/install-supplements/route.ts:133"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-20c6635acc44db3f", "name": "Commented-code block (6 lines) in src/app/api/claims/update/route.ts:14", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/claims/update/route.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-28b0fef0b293184d", "name": "Legacy-named symbol `storm_v1` in src/app/api/leadgen/campaigns/route.ts:9", "shortDescription": {"text": "Legacy-named symbol `storm_v1` in src/app/api/leadgen/campaigns/route.ts:9"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-47a54d0108e3aa04", "name": "Commented-code block (6 lines) in src/app/api/leadgen/campaigns/route.ts:124", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/leadgen/campaigns/route.ts:124"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7a6961a13f82e356", "name": "Commented-code block (6 lines) in src/app/api/instant-intake/claim/route.ts:9", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/instant-intake/claim/route.ts:9"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-16492382bda2c4b9", "name": "Commented-code block (5 lines) in src/app/api/team/accept/route.ts:116", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/team/accept/route.ts:116"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-739ed6aedc5b53ba", "name": "Commented-code block (6 lines) in src/app/api/sales-manager/rep-actions/route.ts:139", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/sales-manager/rep-actions/route.ts:139"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-29193aa20110cf08", "name": "Commented-code block (6 lines) in src/app/api/send-email/route.ts:32", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/send-email/route.ts:32"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c5f31d00b51434a4", "name": "Commented-code block (7 lines) in src/app/api/production/send/[claim_id]/route.ts:92", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/production/send/[claim_id]/route.ts:92"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cb4ee24d71be8b36", "name": "Commented-code block (5 lines) in src/app/api/billing/create-checkout/route.ts:73", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/billing/create-checkout/route.ts:73"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c318990862c82973", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/billing/create-checkout/route.ts:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/billing/create-checkout/route.ts:13"}, "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-b6b985284697ac3b", "name": "Commented-code block (5 lines) in src/app/api/billing/meter-overage/route.ts:123", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/billing/meter-overage/route.ts:123"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3fe1fc81f46eab27", "name": "Commented-code block (6 lines) in src/app/api/admin/queue-counts/route.ts:21", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/admin/queue-counts/route.ts:21"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7b0fdfe787cd6dcf", "name": "Commented-code block (5 lines) in src/app/api/admin/leads/route.ts:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/admin/leads/route.ts:5"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1c0c01afab3c8854", "name": "Commented-code block (6 lines) in src/app/api/admin/reps/[id]/claims/route.ts:67", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/admin/reps/[id]/claims/route.ts:67"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c2ce828b283a8e04", "name": "Commented-code block (7 lines) in src/app/api/admin/import/commit/route.ts:104", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/admin/import/commit/route.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-e29351e9033fd288", "name": "Commented-code block (5 lines) in src/app/api/admin/import/unmatched/[id]/convert/route.ts:100", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/admin/import/unmatched/[id]/convert/route.ts:100"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1ed9435fe0535d06", "name": "Commented-code block (5 lines) in src/app/api/admin/activation/route.ts:7", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/admin/activation/route.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-edc641e1a6b3f8bb", "name": "Commented-code block (5 lines) in src/app/api/admin/production/needs-install/route.ts:38", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/admin/production/needs-install/route.ts:38"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-699411f5c7e2758a", "name": "Commented-code block (6 lines) in src/app/api/admin/qa-review/[id]/deep-qa/route.ts:14", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/admin/qa-review/[id]/deep-qa/route.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-c53d0060786caf59", "name": "Commented-code block (5 lines) in src/app/api/admin/qa-review/[id]/release/route.ts:36", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/admin/qa-review/[id]/release/route.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-e6f865686e60d9d7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/agent-recommendations/[id]/approve/route.ts:100", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/agent-recommendations/[id]/approve/route.ts:100"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f96ee03acf8b6d7b", "name": "Commented-code block (5 lines) in src/app/api/admin/whats-next/route.ts:108", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/admin/whats-next/route.ts:108"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8fdc5baca06ac4cc", "name": "Commented-code block (5 lines) in src/app/api/admin/claims-grid/route.ts:135", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/admin/claims-grid/route.ts:135"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-72f8008af706e31f", "name": "Commented-code block (7 lines) in src/app/api/admin/retail/settings/route.ts:97", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/admin/retail/settings/route.ts:97"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c12549d2edd0a5d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/claim/upload-estimate/route.ts:151", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/claim/upload-estimate/route.ts:151"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e98416272a9235d4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/claim/set-trades/route.ts:113", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/claim/set-trades/route.ts:113"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1ef65db0a6b10138", "name": "Commented-code block (5 lines) in src/app/api/claim/[id]/upload-check/route.ts:57", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/claim/[id]/upload-check/route.ts:57"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-7fcb3d38328e8254", "name": "Commented-code block (5 lines) in src/app/api/claim/[id]/commission-request/route.ts:72", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/claim/[id]/commission-request/route.ts:72"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9e43354b8888276d", "name": "Commented-code block (5 lines) in src/app/api/claim/[id]/assign-rep/route.ts:121", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/claim/[id]/assign-rep/route.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-a26636a3f366b6eb", "name": "Commented-code block (6 lines) in src/app/api/claim-photos/route.ts:42", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/claim-photos/route.ts:42"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0e82a8ca2ba89332", "name": "Commented-code block (6 lines) in src/app/api/onboarding/upload/route.ts:8", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/onboarding/upload/route.ts:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-01d38e19eaecf903", "name": "Commented-code block (5 lines) in src/app/api/cron/upgrade-emails/route.ts:269", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/cron/upgrade-emails/route.ts:269"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc755cd6ff19c216", "name": "Commented-code block (5 lines) in src/app/api/cron/nurture-sequence/route.ts:196", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/cron/nurture-sequence/route.ts:196"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0ae77d3611091be5", "name": "Commented-code block (6 lines) in src/app/api/cron/funnel-monitor/route.ts:94", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/cron/funnel-monitor/route.ts:94"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e27cf66c842a1032", "name": "Commented-code block (10 lines) in src/app/api/cron/cron-health-canary/route.ts:150", "shortDescription": {"text": "Commented-code block (10 lines) in src/app/api/cron/cron-health-canary/route.ts:150"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-97ed7f7c10809976", "name": "Legacy-named symbol `abandoned_too_old` in src/app/api/cron/reconcile-overage/route.ts:51", "shortDescription": {"text": "Legacy-named symbol `abandoned_too_old` in src/app/api/cron/reconcile-overage/route.ts:51"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ecb4fb45ff2045cf", "name": "Legacy-named symbol `storm_v1` in src/app/api/cron/leadgen-email-batch/route.ts:59", "shortDescription": {"text": "Legacy-named symbol `storm_v1` in src/app/api/cron/leadgen-email-batch/route.ts:59"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-832f93e4e6f48cdb", "name": "Commented-code block (5 lines) in src/app/api/cron/leadgen-email-batch/route.ts:280", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/cron/leadgen-email-batch/route.ts:280"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e466d20e16d18627", "name": "Commented-code block (6 lines) in src/app/api/cron/homeowner-sequences/route.ts:78", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/api/cron/homeowner-sequences/route.ts:78"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-837069f0a25b5f69", "name": "Commented-code block (5 lines) in src/app/api/cron/ready-to-build-reminders/route.ts:22", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/cron/ready-to-build-reminders/route.ts:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-60db658b034645d9", "name": "Commented-code block (8 lines) in src/app/api/cron/claim-brain-cadences/route.ts:22", "shortDescription": {"text": "Commented-code block (8 lines) in src/app/api/cron/claim-brain-cadences/route.ts:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-72c8f177cb3ed4ec", "name": "Commented-code block (5 lines) in src/app/api/cron/abandoner-recovery/route.ts:316", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/cron/abandoner-recovery/route.ts:316"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d8773710447de4a4", "name": "Commented-code block (7 lines) in src/app/api/cron/gutter-supplements/route.ts:11", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/cron/gutter-supplements/route.ts:11"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-52b94b8a982c6107", "name": "Commented-code block (5 lines) in src/app/api/retail-estimates/[id]/invoice/route.ts:94", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/retail-estimates/[id]/invoice/route.ts:94"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e2e16ac02a3fdd7a", "name": "Commented-code block (7 lines) in src/app/api/signatures/notify-carrier/route.ts:99", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/api/signatures/notify-carrier/route.ts:99"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-778355bba8c6d2c9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/signatures/notify-carrier/route.ts:106", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/signatures/notify-carrier/route.ts:106"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-851feaf2b35f3cb4", "name": "Commented-code block (5 lines) in src/app/api/track/route.ts:6", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/track/route.ts:6"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-75a612dda2e98a9d", "name": "Commented-code block (9 lines) in src/app/api/webhooks/stripe/route.ts:131", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/api/webhooks/stripe/route.ts:131"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cc605cf1c913651e", "name": "Commented-code block (5 lines) in src/app/api/team-claims/claim/route.ts:25", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/team-claims/claim/route.ts:25"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-b13fa075698b5d08", "name": "Commented-code block (5 lines) in src/app/api/invoices/route.ts:234", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/api/invoices/route.ts:234"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ba21490a6b40b596", "name": "Commented-code block (5 lines) in src/app/dashboard/dashboard-content.tsx:81", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/dashboard/dashboard-content.tsx:81"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0be812e1e5683a21", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/photo-review/photo-review-content.tsx:126", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/photo-review/photo-review-content.tsx:126"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9597dcbce913fdae", "name": "Commented-code block (5 lines) in src/app/dashboard/new-claim/page.tsx:47", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/dashboard/new-claim/page.tsx:47"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6412b5a09b14a9e5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/new-claim/page.tsx:292", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/new-claim/page.tsx:292"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4290bb6d4ef922cf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/settings/page.tsx:1639", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/settings/page.tsx:1639"}, "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-50c4d42410f0fe65", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/scope-review/scope-review-content.tsx:62", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/scope-review/scope-review-content.tsx:62"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-edcba43c4e21204e", "name": "Commented-code block (5 lines) in src/app/dashboard/storm-leads/storm-leads-client.tsx:229", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/dashboard/storm-leads/storm-leads-client.tsx:229"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8d3ef7c7b34f12b6", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/storm-leads/storm-leads-client.tsx:801", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/storm-leads/storm-leads-client.tsx:801"}, "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-67e437d197a3b9b1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/admin/imports/unmatched/page.tsx:73", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/admin/imports/unmatched/page.tsx:73"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6850fe828e646099", "name": "Commented-code block (5 lines) in src/app/dashboard/claim/[id]/page.tsx:292", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/dashboard/claim/[id]/page.tsx:292"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9cc9a372dc1a6aba", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/claim/[id]/page.tsx:583", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/claim/[id]/page.tsx:583"}, "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-8cb9880339d13602", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/company-docs/company-docs-client.tsx:104", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/company-docs/company-docs-client.tsx:104"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c8c2d488462cfaf7", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/repair-review/repair-review-content.tsx:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/repair-review/repair-review-content.tsx:41"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-657c20bbdc2f04e4", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/email-templates/page.tsx:41", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/email-templates/page.tsx:41"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ee17264593edbbe2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/repair/[id]/page.tsx:151", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/repair/[id]/page.tsx:151"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9524258599370dd2", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/marketing-assets/page.tsx:44", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/marketing-assets/page.tsx:44"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-cdbf3c0a5cb5d423", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/retail-estimates/retail-estimates-list.tsx:152", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/retail-estimates/retail-estimates-list.tsx:152"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8e6c04631dce4619", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/send-document/page.tsx:78", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/send-document/page.tsx:78"}, "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-3171134125582471", "name": "Commented-code block (5 lines) in src/app/signup/page.tsx:108", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/signup/page.tsx:108"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c3a67fff88611a66", "name": "Commented-code block (5 lines) in src/app/signup/signup-client.tsx:81", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/signup/signup-client.tsx:81"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-805899dc2ae16ba3", "name": "Legacy-named symbol `canSubmitLegacy` in src/app/sign/[id]/sign-form.tsx:291", "shortDescription": {"text": "Legacy-named symbol `canSubmitLegacy` in src/app/sign/[id]/sign-form.tsx:291"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3283bde4ca8a77fe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/sign/[id]/sign-form.tsx:229", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/sign/[id]/sign-form.tsx:229"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-181aa760956c8433", "name": "Commented-code block (7 lines) in src/app/admin/admin-dashboard.tsx:604", "shortDescription": {"text": "Commented-code block (7 lines) in src/app/admin/admin-dashboard.tsx:604"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-40c7f1866a51f1c9", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/claim/[id]/admin-claim-detail.tsx:149", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/claim/[id]/admin-claim-detail.tsx:149"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0437460608047ca2", "name": "Commented-code block (15 lines) in src/app/admin/qa-review/page.tsx:22", "shortDescription": {"text": "Commented-code block (15 lines) in src/app/admin/qa-review/page.tsx:22"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bde8fe4744a932ec", "name": "Commented-code block (5 lines) in src/app/admin/qa-review/qa-review-queue.tsx:147", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/admin/qa-review/qa-review-queue.tsx:147"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8ad2fc439bcd82bb", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/api-keys/api-keys-client.tsx:53", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/api-keys/api-keys-client.tsx:53"}, "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-6cb42ca33fb559ea", "name": "Commented-code block (5 lines) in src/app/instant-forensic/page.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/instant-forensic/page.tsx: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-53d11d5154503ef0", "name": "Commented-code block (6 lines) in src/app/onboarding/profile/page.tsx:13", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/onboarding/profile/page.tsx:13"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-09b6fd0184fac8f7", "name": "Commented-code block (5 lines) in src/app/onboarding/profile/onboarding-client.tsx:16", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/onboarding/profile/onboarding-client.tsx: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-92d9922a8e828cfc", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/onboarding/profile/onboarding-client.tsx:97", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/onboarding/profile/onboarding-client.tsx:97"}, "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-f33851c6e24d88c9", "name": "Commented-code block (5 lines) in src/app/start/page.tsx:5", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/start/page.tsx: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-8ddc995f8eafee28", "name": "Commented-code block (5 lines) in src/app/win/[token]/opengraph-image.tsx:4", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/win/[token]/opengraph-image.tsx: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-f5b4153769218c82", "name": "Commented-code block (5 lines) in src/app/pricing/page.tsx:15", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/pricing/page.tsx:15"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-eb889f8c28aa3336", "name": "Commented-code block (9 lines) in src/app/instant/continue/instant-recover-client.tsx:8", "shortDescription": {"text": "Commented-code block (9 lines) in src/app/instant/continue/instant-recover-client.tsx:8"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-01da07a168da3989", "name": "Commented-code block (6 lines) in src/app/instant/continue/page.tsx:11", "shortDescription": {"text": "Commented-code block (6 lines) in src/app/instant/continue/page.tsx: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-16ed1e8b86260a86", "name": "Commented-code block (5 lines) in src/app/welcome/page.tsx:10", "shortDescription": {"text": "Commented-code block (5 lines) in src/app/welcome/page.tsx: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-08add460dad29218", "name": "Commented-code block (5 lines) in src/lib/track.ts:198", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/track.ts:198"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-20e5db6dc3e6700c", "name": "Commented-code block (6 lines) in src/lib/claim-reveal.ts:58", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/claim-reveal.ts:58"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2cf7ade4a8af2f7a", "name": "Commented-code block (6 lines) in src/lib/stripe-config.test.ts:69", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/stripe-config.test.ts:69"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4eaba6ea318490c2", "name": "Commented-code block (11 lines) in src/lib/report-mode.ts:3", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/report-mode.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-726b29250a1dc16f", "name": "Legacy-named symbol `deep_copy` in src/lib/meta-ads.ts:258", "shortDescription": {"text": "Legacy-named symbol `deep_copy` in src/lib/meta-ads.ts:258"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c1681358a0ed22b2", "name": "Commented-code block (5 lines) in src/lib/meta-ads.ts:655", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/meta-ads.ts:655"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-3aaadd91a49e9b9b", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/meta-ads.ts:171", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/meta-ads.ts:171"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-395af471a3381d49", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/upload-utils.ts:76", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/upload-utils.ts:76"}, "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-865588567a89386e", "name": "Commented-code block (6 lines) in src/lib/meta-capi.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/meta-capi.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-ec7ffa0a2b9a2cc8", "name": "Commented-code block (6 lines) in src/lib/claim-constants.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/claim-constants.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-d99133c9f9022c06", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/agent-common.ts:42", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/agent-common.ts:42"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a2b9fe06d2115c9b", "name": "Commented-code block (5 lines) in src/lib/team-bcc.ts:35", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/team-bcc.ts:35"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-16493fcb53a744d3", "name": "Commented-code block (5 lines) in src/lib/document-quality/qa-checks.ts:194", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/document-quality/qa-checks.ts:194"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c42409c089392206", "name": "Commented-code block (6 lines) in src/lib/analytics/ga4-paths.ts:3", "shortDescription": {"text": "Commented-code block (6 lines) in src/lib/analytics/ga4-paths.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-f0150e7c9e6017e1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/analytics/ga4-paths.ts:29", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/analytics/ga4-paths.ts:29"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5afba4edea142a72", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/funnel-monitor/ai-insight.ts:7", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/funnel-monitor/ai-insight.ts:7"}, "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-eb9004d2e4c2207f", "name": "Commented-code block (5 lines) in src/lib/funnel-monitor/sources/meta-ads.ts:128", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/funnel-monitor/sources/meta-ads.ts:128"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e2ba79926f10338f", "name": "Commented-code block (5 lines) in src/lib/funnel-monitor/sources/supabase.ts:123", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/funnel-monitor/sources/supabase.ts:123"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-0773b21b334e82ed", "name": "Legacy-named symbol `usarm_storm_v1` in src/lib/leadgen/templates.ts:22", "shortDescription": {"text": "Legacy-named symbol `usarm_storm_v1` in src/lib/leadgen/templates.ts:22"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1c81ef77b0f38fc6", "name": "Commented-code block (7 lines) in src/lib/leadgen/templates.ts:120", "shortDescription": {"text": "Commented-code block (7 lines) in src/lib/leadgen/templates.ts:120"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-dc5ee2482dc3fa7d", "name": "Commented-code block (5 lines) in src/lib/supabase/middleware.ts:49", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/supabase/middleware.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-d03f2d330cf015f9", "name": "Commented-code block (5 lines) in src/lib/supabase/admin.ts:3", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/supabase/admin.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-c73901108a8d8b1f", "name": "Commented-code block (11 lines) in src/lib/storm/storm-ads.ts:58", "shortDescription": {"text": "Commented-code block (11 lines) in src/lib/storm/storm-ads.ts:58"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f8c1ecdf453d38e1", "name": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/storm/noaa-spc.ts:111", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/storm/noaa-spc.ts:111"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-66c4bd842a49fcd1", "name": "Commented-code block (9 lines) in src/lib/acculynx/inbound-sync.ts:289", "shortDescription": {"text": "Commented-code block (9 lines) in src/lib/acculynx/inbound-sync.ts:289"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-c974ddd7425c9089", "name": "Commented-code block (5 lines) in src/lib/importers/address-matcher.ts:158", "shortDescription": {"text": "Commented-code block (5 lines) in src/lib/importers/address-matcher.ts:158"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-55e923da39d3b6c1", "name": "Commented-code block (10 lines) in src/lib/seo/locations.ts:7", "shortDescription": {"text": "Commented-code block (10 lines) in src/lib/seo/locations.ts:7"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-cec97a47d770a265", "name": "101 env vars used in code but missing from .env.example", "shortDescription": {"text": "101 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `ABANDONER_RECOVERY_ENABLED`, `ACCULYNX_INBOUND_SYNC_CAP`, `ACCULYNX_INBOUND_SYNC_ENABLED`, `APP_BASE_URL`, `APP_ENV`, `AZURE_CLIENT_ID`, `AZURE_CLIENT_SECRET`, `AZURE_REDIRECT_URI` + 93 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-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/backfill_pending_correspondence.py:main, backend/backfill_front_of_house_cardinal.py:main\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/richard_tool_preconditions.py:require_company_profile_complete, backend/richard_tool_preconditions.py:require_admin_or_owner, backend/richard_tool_preconditions.py:require_email_in_input, backend/richard_tool_preconditions.py:require_claim_ready_for_closeout\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/scope_comparison/parsers.py:parse, backend/scope_comparison/parsers.py:parse, backend/scope_comparison/parsers.py:parse\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f341860ab6a90be6", "name": "Near-duplicate function bodies in 17 places", "shortDescription": {"text": "Near-duplicate function bodies in 17 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/repair_ai/models.py:to_dict, backend/repair_ai/models.py:to_dict, backend/repair_ai/models.py:to_dict, backend/repair_ai/models.py:to_dict\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-02525d39071dd2c7", "name": "Near-duplicate function bodies in 5 places", "shortDescription": {"text": "Near-duplicate function bodies in 5 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/hail_detection/models.py:to_dict, backend/hail_detection/models.py:to_dict, backend/hail_detection/models.py:to_dict, backend/hail_detection/models.py:to_dict\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-46969939caf8120b", "name": "Near-duplicate function bodies in 9 places", "shortDescription": {"text": "Near-duplicate function bodies in 9 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nbackend/damage_scoring/models.py:total, backend/damage_scoring/models.py:total, backend/damage_scoring/models.py:total, backend/damage_scoring/models.py:total\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9a4107ab03f4685d", "name": "FastAPI POST `clone_to_pricelist` without auth dependency \u2014 services/xactimate-worker/main.py:185", "shortDescription": {"text": "FastAPI POST `clone_to_pricelist` without auth dependency \u2014 services/xactimate-worker/main.py:185"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b3348f87b912df6", "name": "FastAPI POST `agent_process_claim` without auth dependency \u2014 backend/public_richard.py:136", "shortDescription": {"text": "FastAPI POST `agent_process_claim` without auth dependency \u2014 backend/public_richard.py:136"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5f7abf23844c3d68", "name": "FastAPI POST `agent_draft_supplement` without auth dependency \u2014 backend/public_richard.py:177", "shortDescription": {"text": "FastAPI POST `agent_draft_supplement` without auth dependency \u2014 backend/public_richard.py:177"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-024f64b8f2d5e17e", "name": "FastAPI POST `agent_annotate_photo` without auth dependency \u2014 backend/public_richard.py:205", "shortDescription": {"text": "FastAPI POST `agent_annotate_photo` without auth dependency \u2014 backend/public_richard.py:205"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a554ea42d0f9c572", "name": "FastAPI POST `create_claim` without auth dependency \u2014 backend/crm_api.py:563", "shortDescription": {"text": "FastAPI POST `create_claim` without auth dependency \u2014 backend/crm_api.py:563"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-203923272ab6c5e6", "name": "FastAPI POST `remote_sms` without auth dependency \u2014 backend/remote_richard.py:1806", "shortDescription": {"text": "FastAPI POST `remote_sms` without auth dependency \u2014 backend/remote_richard.py:1806"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c5b244948914ab09", "name": "FastAPI POST `remote_whatsapp` without auth dependency \u2014 backend/remote_richard.py:2267", "shortDescription": {"text": "FastAPI POST `remote_whatsapp` without auth dependency \u2014 backend/remote_richard.py:2267"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-acd69107e7872b37", "name": "FastAPI POST `remote_email` without auth dependency \u2014 backend/remote_richard.py:2333", "shortDescription": {"text": "FastAPI POST `remote_email` without auth dependency \u2014 backend/remote_richard.py:2333"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-817c915c7741c804", "name": "FastAPI POST `upload_link_files` without auth dependency \u2014 backend/upload_link.py:220", "shortDescription": {"text": "FastAPI POST `upload_link_files` without auth dependency \u2014 backend/upload_link.py:220"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-675b66b7f28e9ad1", "name": "Dangling fetch: GET /api/admin/money-strip (src/components/money-strip.tsx:44)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/money-strip (src/components/money-strip.tsx:44)"}, "fullDescription": {"text": "`src/components/money-strip.tsx:44` calls `GET /api/admin/money-strip` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/money-strip`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-766b8d168a62ac02", "name": "Dangling fetch: GET /api/admin/money-strip-meta (src/components/money-strip.tsx:70)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/money-strip-meta (src/components/money-strip.tsx:70)"}, "fullDescription": {"text": "`src/components/money-strip.tsx:70` calls `GET /api/admin/money-strip-meta` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/money-strip-meta`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c299b4b709365336", "name": "Dangling fetch: GET /api/admin/money-strip (src/components/money-strip.tsx:92)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/money-strip (src/components/money-strip.tsx:92)"}, "fullDescription": {"text": "`src/components/money-strip.tsx:92` calls `GET /api/admin/money-strip` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/money-strip`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aee68a53f7d6a547", "name": "Dangling fetch: GET /api/admin/crews (src/components/claim-production-actions.tsx:81)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/crews (src/components/claim-production-actions.tsx:81)"}, "fullDescription": {"text": "`src/components/claim-production-actions.tsx:81` calls `GET /api/admin/crews` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/crews`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-010df3df770482fc", "name": "Dangling fetch: POST /api/photos/annotate (src/components/photo-markup-modal.tsx:171)", "shortDescription": {"text": "Dangling fetch: POST /api/photos/annotate (src/components/photo-markup-modal.tsx:171)"}, "fullDescription": {"text": "`src/components/photo-markup-modal.tsx:171` calls `POST /api/photos/annotate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/photos/annotate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-54173d8ef22f4e2d", "name": "Dangling fetch: POST /api/photos/annotate (src/components/photo-markup-modal.tsx:210)", "shortDescription": {"text": "Dangling fetch: POST /api/photos/annotate (src/components/photo-markup-modal.tsx:210)"}, "fullDescription": {"text": "`src/components/photo-markup-modal.tsx:210` calls `POST /api/photos/annotate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/photos/annotate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bd0913a6a376b4ec", "name": "Dangling fetch: POST /api/onboarding/upload (src/components/onboarding-chat.tsx:131)", "shortDescription": {"text": "Dangling fetch: POST /api/onboarding/upload (src/components/onboarding-chat.tsx:131)"}, "fullDescription": {"text": "`src/components/onboarding-chat.tsx:131` calls `POST /api/onboarding/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/onboarding/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f1ea3b3ec39f45f5", "name": "Dangling fetch: POST /api/onboarding/upload (src/components/onboarding-chat.tsx:153)", "shortDescription": {"text": "Dangling fetch: POST /api/onboarding/upload (src/components/onboarding-chat.tsx:153)"}, "fullDescription": {"text": "`src/components/onboarding-chat.tsx:153` calls `POST /api/onboarding/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/onboarding/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-289a6584f4da1717", "name": "Dangling fetch: POST /api/capi-event (src/components/onboarding-chat.tsx:234)", "shortDescription": {"text": "Dangling fetch: POST /api/capi-event (src/components/onboarding-chat.tsx:234)"}, "fullDescription": {"text": "`src/components/onboarding-chat.tsx:234` calls `POST /api/capi-event` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/capi-event`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-63b66268bf0852bf", "name": "Dangling fetch: GET /api/invoices?claim_id=${claimId} (src/components/invoice-builder.tsx:46)", "shortDescription": {"text": "Dangling fetch: GET /api/invoices?claim_id=${claimId} (src/components/invoice-builder.tsx:46)"}, "fullDescription": {"text": "`src/components/invoice-builder.tsx:46` calls `GET /api/invoices?claim_id=${claimId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/invoices`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-463522c1552e80da", "name": "Dangling fetch: POST /api/invoices (src/components/invoice-builder.tsx:72)", "shortDescription": {"text": "Dangling fetch: POST /api/invoices (src/components/invoice-builder.tsx:72)"}, "fullDescription": {"text": "`src/components/invoice-builder.tsx:72` calls `POST /api/invoices` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/invoices`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-194811d5230a7aa3", "name": "Dangling fetch: GET /api/invoices/${invoiceId}/pdf (src/components/invoice-builder.tsx:107)", "shortDescription": {"text": "Dangling fetch: GET /api/invoices/${invoiceId}/pdf (src/components/invoice-builder.tsx:107)"}, "fullDescription": {"text": "`src/components/invoice-builder.tsx:107` calls `GET /api/invoices/${invoiceId}/pdf` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/invoices/<p>/pdf`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-97c9793ca002944d", "name": "Dangling fetch: PUT /api/invoices (src/components/invoice-builder.tsx:137)", "shortDescription": {"text": "Dangling fetch: PUT /api/invoices (src/components/invoice-builder.tsx:137)"}, "fullDescription": {"text": "`src/components/invoice-builder.tsx:137` calls `PUT /api/invoices` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/invoices`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b4790a39717f73b", "name": "Dangling fetch: POST /api/invoices/payment-link (src/components/invoice-builder.tsx:169)", "shortDescription": {"text": "Dangling fetch: POST /api/invoices/payment-link (src/components/invoice-builder.tsx:169)"}, "fullDescription": {"text": "`src/components/invoice-builder.tsx:169` calls `POST /api/invoices/payment-link` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/invoices/payment-link`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c9921a1a319e5d36", "name": "Dangling fetch: GET /api/sales-manager/rep-actions (src/components/rep-action-center.tsx:163)", "shortDescription": {"text": "Dangling fetch: GET /api/sales-manager/rep-actions (src/components/rep-action-center.tsx:163)"}, "fullDescription": {"text": "`src/components/rep-action-center.tsx:163` calls `GET /api/sales-manager/rep-actions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sales-manager/rep-actions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3846cd27f7c80e7e", "name": "Dangling fetch: GET /api/claim/${claimId}/expense (src/components/job-pnl-card.tsx:71)", "shortDescription": {"text": "Dangling fetch: GET /api/claim/${claimId}/expense (src/components/job-pnl-card.tsx:71)"}, "fullDescription": {"text": "`src/components/job-pnl-card.tsx:71` calls `GET /api/claim/${claimId}/expense` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claim/<p>/expense`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-03af7417e7c347aa", "name": "Dangling fetch: GET /api/scope-review?claim_id=${claimId} (src/components/estimate-view.tsx:63)", "shortDescription": {"text": "Dangling fetch: GET /api/scope-review?claim_id=${claimId} (src/components/estimate-view.tsx:63)"}, "fullDescription": {"text": "`src/components/estimate-view.tsx:63` calls `GET /api/scope-review?claim_id=${claimId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scope-review`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e50da3909e3e2e36", "name": "Dangling fetch: GET /api/claim-photos?claim_id=${claimId} (src/components/estimate-view.tsx:72)", "shortDescription": {"text": "Dangling fetch: GET /api/claim-photos?claim_id=${claimId} (src/components/estimate-view.tsx:72)"}, "fullDescription": {"text": "`src/components/estimate-view.tsx:72` calls `GET /api/claim-photos?claim_id=${claimId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claim-photos`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-02fc5c2c854d5bcf", "name": "Dangling fetch: GET /api/scope-comparison?claim_id=${claimId} (src/components/estimate-view.tsx:79)", "shortDescription": {"text": "Dangling fetch: GET /api/scope-comparison?claim_id=${claimId} (src/components/estimate-view.tsx:79)"}, "fullDescription": {"text": "`src/components/estimate-view.tsx:79` calls `GET /api/scope-comparison?claim_id=${claimId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scope-comparison`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bf8e7ab927629c1e", "name": "Dangling fetch: GET /api/admin/production/claim-trades?claim_id=${claimId} (src/components/production-trades-card.tsx:42", "shortDescription": {"text": "Dangling fetch: GET /api/admin/production/claim-trades?claim_id=${claimId} (src/components/production-trades-card.tsx:42)"}, "fullDescription": {"text": "`src/components/production-trades-card.tsx:42` calls `GET /api/admin/production/claim-trades?claim_id=${claimId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/production/claim-trades`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8c176f4d0029b858", "name": "Dangling fetch: POST /api/admin/production/claim-trades (src/components/production-trades-card.tsx:60)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/production/claim-trades (src/components/production-trades-card.tsx:60)"}, "fullDescription": {"text": "`src/components/production-trades-card.tsx:60` calls `POST /api/admin/production/claim-trades` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/production/claim-trades`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3da120da0ed6322f", "name": "Dangling fetch: GET /api/admin/retail/settings (src/components/retail-settings-modal.tsx:46)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/retail/settings (src/components/retail-settings-modal.tsx:46)"}, "fullDescription": {"text": "`src/components/retail-settings-modal.tsx:46` calls `GET /api/admin/retail/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/retail/settings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa1952033f18c1cc", "name": "Dangling fetch: PUT /api/admin/retail/settings (src/components/retail-settings-modal.tsx:94)", "shortDescription": {"text": "Dangling fetch: PUT /api/admin/retail/settings (src/components/retail-settings-modal.tsx:94)"}, "fullDescription": {"text": "`src/components/retail-settings-modal.tsx:94` calls `PUT /api/admin/retail/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/retail/settings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-13fb55114f648e9b", "name": "Dangling fetch: POST /api/admin/retail/settings (src/components/retail-settings-modal.tsx:124)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/retail/settings (src/components/retail-settings-modal.tsx:124)"}, "fullDescription": {"text": "`src/components/retail-settings-modal.tsx:124` calls `POST /api/admin/retail/settings` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/retail/settings`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-07688de25027ea8b", "name": "Dangling fetch: POST /api/homeowner/send-now (src/components/homeowner-engagement-card.tsx:100)", "shortDescription": {"text": "Dangling fetch: POST /api/homeowner/send-now (src/components/homeowner-engagement-card.tsx:100)"}, "fullDescription": {"text": "`src/components/homeowner-engagement-card.tsx:100` calls `POST /api/homeowner/send-now` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/homeowner/send-now`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9249ee3667f7e815", "name": "Dangling fetch: POST /api/homeowner/sequence (src/components/homeowner-engagement-card.tsx:122)", "shortDescription": {"text": "Dangling fetch: POST /api/homeowner/sequence (src/components/homeowner-engagement-card.tsx:122)"}, "fullDescription": {"text": "`src/components/homeowner-engagement-card.tsx:122` calls `POST /api/homeowner/sequence` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/homeowner/sequence`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6863153150aad8be", "name": "Dangling fetch: GET /api/admin/production/unlinked-installs (src/components/unlinked-installs-list.tsx:49)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/production/unlinked-installs (src/components/unlinked-installs-list.tsx:49)"}, "fullDescription": {"text": "`src/components/unlinked-installs-list.tsx:49` calls `GET /api/admin/production/unlinked-installs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/production/unlinked-installs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-828de2fd6ba6b627", "name": "Dangling fetch: POST /api/integrations/acculynx/sync-calendar (src/components/unlinked-installs-list.tsx:71)", "shortDescription": {"text": "Dangling fetch: POST /api/integrations/acculynx/sync-calendar (src/components/unlinked-installs-list.tsx:71)"}, "fullDescription": {"text": "`src/components/unlinked-installs-list.tsx:71` calls `POST /api/integrations/acculynx/sync-calendar` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/integrations/acculynx/sync-calendar`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6b2dafef7d429052", "name": "Dangling fetch: POST /api/admin/production/unlinked-installs/${ev.id}/link (src/components/unlinked-installs-list.tsx:17", "shortDescription": {"text": "Dangling fetch: POST /api/admin/production/unlinked-installs/${ev.id}/link (src/components/unlinked-installs-list.tsx:173)"}, "fullDescription": {"text": "`src/components/unlinked-installs-list.tsx:173` calls `POST /api/admin/production/unlinked-installs/${ev.id}/link` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/production/unlinked-installs/<p>/link`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-41d3bde77047efa1", "name": "Dangling fetch: POST /api/sample/brain/chat (src/components/sample-claim-brain-chat.tsx:66)", "shortDescription": {"text": "Dangling fetch: POST /api/sample/brain/chat (src/components/sample-claim-brain-chat.tsx:66)"}, "fullDescription": {"text": "`src/components/sample-claim-brain-chat.tsx:66` calls `POST /api/sample/brain/chat` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sample/brain/chat`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-46eb1e36ff83986d", "name": "Dangling fetch: GET /api/claim/${props.claimId}/checkpoints (src/components/claim-checkpoints.tsx:71)", "shortDescription": {"text": "Dangling fetch: GET /api/claim/${props.claimId}/checkpoints (src/components/claim-checkpoints.tsx:71)"}, "fullDescription": {"text": "`src/components/claim-checkpoints.tsx:71` calls `GET /api/claim/${props.claimId}/checkpoints` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claim/<p>/checkpoints`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fc23a780087b4969", "name": "Dangling fetch: GET /api/admin/production/claim-trades?claim_id=${claimId} (src/components/trade-coverage-strip.tsx:25)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/production/claim-trades?claim_id=${claimId} (src/components/trade-coverage-strip.tsx:25)"}, "fullDescription": {"text": "`src/components/trade-coverage-strip.tsx:25` calls `GET /api/admin/production/claim-trades?claim_id=${claimId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/production/claim-trades`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e872f3d5bb4d22f2", "name": "Dangling fetch: POST /api/notify-signup (src/components/hero-signup-form.tsx:86)", "shortDescription": {"text": "Dangling fetch: POST /api/notify-signup (src/components/hero-signup-form.tsx:86)"}, "fullDescription": {"text": "`src/components/hero-signup-form.tsx:86` calls `POST /api/notify-signup` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notify-signup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c722aefc1a82ec4c", "name": "Dangling fetch: POST /api/claim/${claimId}/commission-request (src/components/commission-request-modal.tsx:105)", "shortDescription": {"text": "Dangling fetch: POST /api/claim/${claimId}/commission-request (src/components/commission-request-modal.tsx:105)"}, "fullDescription": {"text": "`src/components/commission-request-modal.tsx:105` calls `POST /api/claim/${claimId}/commission-request` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claim/<p>/commission-request`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e4a9878aa812e185", "name": "Dangling fetch: GET /api/admin/queue-counts (src/components/admin-nav.tsx:23)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/queue-counts (src/components/admin-nav.tsx:23)"}, "fullDescription": {"text": "`src/components/admin-nav.tsx:23` calls `GET /api/admin/queue-counts` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/queue-counts`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ec6bc01b074ed5fa", "name": "Dangling fetch: GET /api/roof-sections?claim_id=${claimId} (src/components/roof-sections-editor.tsx:24)", "shortDescription": {"text": "Dangling fetch: GET /api/roof-sections?claim_id=${claimId} (src/components/roof-sections-editor.tsx:24)"}, "fullDescription": {"text": "`src/components/roof-sections-editor.tsx:24` calls `GET /api/roof-sections?claim_id=${claimId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/roof-sections`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-38760d48fcf25198", "name": "Dangling fetch: PUT /api/roof-sections (src/components/roof-sections-editor.tsx:54)", "shortDescription": {"text": "Dangling fetch: PUT /api/roof-sections (src/components/roof-sections-editor.tsx:54)"}, "fullDescription": {"text": "`src/components/roof-sections-editor.tsx:54` calls `PUT /api/roof-sections` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/roof-sections`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e9a87d9826a7ad02", "name": "Dangling fetch: POST /api/onboarding/dismiss (src/components/onboarding-checklist.tsx:177)", "shortDescription": {"text": "Dangling fetch: POST /api/onboarding/dismiss (src/components/onboarding-checklist.tsx:177)"}, "fullDescription": {"text": "`src/components/onboarding-checklist.tsx:177` calls `POST /api/onboarding/dismiss` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/onboarding/dismiss`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a9c8f84f201c1676", "name": "Dangling fetch: GET /api/admin/whats-next (src/components/whats-next-hero.tsx:63)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/whats-next (src/components/whats-next-hero.tsx:63)"}, "fullDescription": {"text": "`src/components/whats-next-hero.tsx:63` calls `GET /api/admin/whats-next` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/whats-next`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cf93e16b3735ee18", "name": "Dangling fetch: POST /api/onboarding/upload (src/components/admin-brain-chat.tsx:356)", "shortDescription": {"text": "Dangling fetch: POST /api/onboarding/upload (src/components/admin-brain-chat.tsx:356)"}, "fullDescription": {"text": "`src/components/admin-brain-chat.tsx:356` calls `POST /api/onboarding/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/onboarding/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3da39d6ab2d1db7d", "name": "Dangling fetch: POST /api/capi-event (src/components/admin-brain-chat.tsx:451)", "shortDescription": {"text": "Dangling fetch: POST /api/capi-event (src/components/admin-brain-chat.tsx:451)"}, "fullDescription": {"text": "`src/components/admin-brain-chat.tsx:451` calls `POST /api/capi-event` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/capi-event`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-df88e287aec7e811", "name": "Dangling fetch: POST /api/claim/regen (src/components/edit-report-fields-card.tsx:72)", "shortDescription": {"text": "Dangling fetch: POST /api/claim/regen (src/components/edit-report-fields-card.tsx:72)"}, "fullDescription": {"text": "`src/components/edit-report-fields-card.tsx:72` calls `POST /api/claim/regen` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claim/regen`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c66d3a41b998346f", "name": "Dangling fetch: POST /api/inspector-apply (src/components/inspector-application-form.tsx:31)", "shortDescription": {"text": "Dangling fetch: POST /api/inspector-apply (src/components/inspector-application-form.tsx:31)"}, "fullDescription": {"text": "`src/components/inspector-application-form.tsx:31` calls `POST /api/inspector-apply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/inspector-apply`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c5a1ab34c13443fc", "name": "Dangling fetch: GET /api/admin/production/needs-install (src/components/needs-install-list.tsx:83)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/production/needs-install (src/components/needs-install-list.tsx:83)"}, "fullDescription": {"text": "`src/components/needs-install-list.tsx:83` calls `GET /api/admin/production/needs-install` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/production/needs-install`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3953a7d0c131119a", "name": "Dangling fetch: GET /api/admin/crews (src/components/needs-install-list.tsx:115)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/crews (src/components/needs-install-list.tsx:115)"}, "fullDescription": {"text": "`src/components/needs-install-list.tsx:115` calls `GET /api/admin/crews` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/crews`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-89b113435cd436fd", "name": "Dangling fetch: POST /api/admin/production/schedules/bulk (src/components/needs-install-list.tsx:217)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/production/schedules/bulk (src/components/needs-install-list.tsx:217)"}, "fullDescription": {"text": "`src/components/needs-install-list.tsx:217` calls `POST /api/admin/production/schedules/bulk` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/production/schedules/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-53cafc2dfd98b019", "name": "Dangling fetch: GET /api/signatures?claim_id=${claimId} (src/components/signature-manager.tsx:84)", "shortDescription": {"text": "Dangling fetch: GET /api/signatures?claim_id=${claimId} (src/components/signature-manager.tsx:84)"}, "fullDescription": {"text": "`src/components/signature-manager.tsx:84` calls `GET /api/signatures?claim_id=${claimId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/signatures`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e90721bafda39381", "name": "Dangling fetch: GET /api/templates (src/components/signature-manager.tsx:95)", "shortDescription": {"text": "Dangling fetch: GET /api/templates (src/components/signature-manager.tsx:95)"}, "fullDescription": {"text": "`src/components/signature-manager.tsx:95` calls `GET /api/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-41b20628cecdd921", "name": "Dangling fetch: POST /api/signatures (src/components/signature-manager.tsx:147)", "shortDescription": {"text": "Dangling fetch: POST /api/signatures (src/components/signature-manager.tsx:147)"}, "fullDescription": {"text": "`src/components/signature-manager.tsx:147` calls `POST /api/signatures` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/signatures`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cd7bfcd528b3a118", "name": "Dangling fetch: POST /api/signatures/notify-carrier (src/components/signature-manager.tsx:173)", "shortDescription": {"text": "Dangling fetch: POST /api/signatures/notify-carrier (src/components/signature-manager.tsx:173)"}, "fullDescription": {"text": "`src/components/signature-manager.tsx:173` calls `POST /api/signatures/notify-carrier` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/signatures/notify-carrier`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5315964926faf0ce", "name": "Dangling fetch: POST /api/storage/sign-upload (src/components/signature-manager.tsx:543)", "shortDescription": {"text": "Dangling fetch: POST /api/storage/sign-upload (src/components/signature-manager.tsx:543)"}, "fullDescription": {"text": "`src/components/signature-manager.tsx:543` calls `POST /api/storage/sign-upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/storage/sign-upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-39a8616a68503d78", "name": "Dangling fetch: POST /api/signatures (src/components/signature-manager.tsx:578)", "shortDescription": {"text": "Dangling fetch: POST /api/signatures (src/components/signature-manager.tsx:578)"}, "fullDescription": {"text": "`src/components/signature-manager.tsx:578` calls `POST /api/signatures` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/signatures`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c4805ce1b6c3f618", "name": "Dangling fetch: POST /api/team-claims/update-files (src/components/signature-manager.tsx:594)", "shortDescription": {"text": "Dangling fetch: POST /api/team-claims/update-files (src/components/signature-manager.tsx:594)"}, "fullDescription": {"text": "`src/components/signature-manager.tsx:594` calls `POST /api/team-claims/update-files` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/team-claims/update-files`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-221bef24de464563", "name": "Dangling fetch: GET /api/public-photos?${params} (src/components/learn-photo-gallery.tsx:33)", "shortDescription": {"text": "Dangling fetch: GET /api/public-photos?${params} (src/components/learn-photo-gallery.tsx:33)"}, "fullDescription": {"text": "`src/components/learn-photo-gallery.tsx:33` calls `GET /api/public-photos?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/public-photos`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-783194567288d381", "name": "Dangling fetch: GET /api/admin/team (src/components/claim-assignment-dropdown.tsx:105)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/team (src/components/claim-assignment-dropdown.tsx:105)"}, "fullDescription": {"text": "`src/components/claim-assignment-dropdown.tsx:105` calls `GET /api/admin/team` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/team`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-facb9f1aef15b79b", "name": "Dangling fetch: POST /api/claim/${claimId}/assign-rep (src/components/claim-assignment-dropdown.tsx:148)", "shortDescription": {"text": "Dangling fetch: POST /api/claim/${claimId}/assign-rep (src/components/claim-assignment-dropdown.tsx:148)"}, "fullDescription": {"text": "`src/components/claim-assignment-dropdown.tsx:148` calls `POST /api/claim/${claimId}/assign-rep` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claim/<p>/assign-rep`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b44c15193323230f", "name": "Dangling fetch: GET /api/admin/richard-suggestion?${qs.toString()} (src/components/richard-suggestion-banner.tsx:86)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/richard-suggestion?${qs.toString()} (src/components/richard-suggestion-banner.tsx:86)"}, "fullDescription": {"text": "`src/components/richard-suggestion-banner.tsx:86` calls `GET /api/admin/richard-suggestion?${qs.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/richard-suggestion`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a2da1a5134b7f461", "name": "Dangling fetch: GET /api/admin/right-rail (src/components/admin-right-rail.tsx:79)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/right-rail (src/components/admin-right-rail.tsx:79)"}, "fullDescription": {"text": "`src/components/admin-right-rail.tsx:79` calls `GET /api/admin/right-rail` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/right-rail`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-71c5f98936f9310e", "name": "Dangling fetch: POST /api/share/win (src/components/share-win-button.tsx:37)", "shortDescription": {"text": "Dangling fetch: POST /api/share/win (src/components/share-win-button.tsx:37)"}, "fullDescription": {"text": "`src/components/share-win-button.tsx:37` calls `POST /api/share/win` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/share/win`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ffb579642fe7d3a9", "name": "Dangling fetch: GET /api/admin/production/close-out (src/components/close-out-list.tsx:55)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/production/close-out (src/components/close-out-list.tsx:55)"}, "fullDescription": {"text": "`src/components/close-out-list.tsx:55` calls `GET /api/admin/production/close-out` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/production/close-out`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-593ec46e63a9aa95", "name": "Dangling fetch: POST /api/team/invite (src/components/invite-teammate-modal.tsx:40)", "shortDescription": {"text": "Dangling fetch: POST /api/team/invite (src/components/invite-teammate-modal.tsx:40)"}, "fullDescription": {"text": "`src/components/invite-teammate-modal.tsx:40` calls `POST /api/team/invite` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/team/invite`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-65dd0630cd07b35f", "name": "Dangling fetch: POST /api/storage/sign-upload (src/components/install-supplement-builder.tsx:55)", "shortDescription": {"text": "Dangling fetch: POST /api/storage/sign-upload (src/components/install-supplement-builder.tsx:55)"}, "fullDescription": {"text": "`src/components/install-supplement-builder.tsx:55` calls `POST /api/storage/sign-upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/storage/sign-upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-860b3ece6a4dad65", "name": "Dangling fetch: PUT /api/install-supplements (src/components/install-supplement-builder.tsx:79)", "shortDescription": {"text": "Dangling fetch: PUT /api/install-supplements (src/components/install-supplement-builder.tsx:79)"}, "fullDescription": {"text": "`src/components/install-supplement-builder.tsx:79` calls `PUT /api/install-supplements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/install-supplements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-31d9e31c76b4c4ef", "name": "Dangling fetch: GET /api/install-supplements?claim_id=${claimId} (src/components/install-supplement-builder.tsx:98)", "shortDescription": {"text": "Dangling fetch: GET /api/install-supplements?claim_id=${claimId} (src/components/install-supplement-builder.tsx:98)"}, "fullDescription": {"text": "`src/components/install-supplement-builder.tsx:98` calls `GET /api/install-supplements?claim_id=${claimId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/install-supplements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-aaf30c3585d1d9eb", "name": "Dangling fetch: POST /api/install-supplements (src/components/install-supplement-builder.tsx:124)", "shortDescription": {"text": "Dangling fetch: POST /api/install-supplements (src/components/install-supplement-builder.tsx:124)"}, "fullDescription": {"text": "`src/components/install-supplement-builder.tsx:124` calls `POST /api/install-supplements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/install-supplements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-517c49af28122b9d", "name": "Dangling fetch: POST /api/install-supplements (src/components/install-supplement-builder.tsx:196)", "shortDescription": {"text": "Dangling fetch: POST /api/install-supplements (src/components/install-supplement-builder.tsx:196)"}, "fullDescription": {"text": "`src/components/install-supplement-builder.tsx:196` calls `POST /api/install-supplements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/install-supplements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e57aed20390f1689", "name": "Dangling fetch: POST /api/install-supplements (src/components/install-supplement-builder.tsx:222)", "shortDescription": {"text": "Dangling fetch: POST /api/install-supplements (src/components/install-supplement-builder.tsx:222)"}, "fullDescription": {"text": "`src/components/install-supplement-builder.tsx:222` calls `POST /api/install-supplements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/install-supplements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7ed23541fdf3a379", "name": "Dangling fetch: PUT /api/install-supplements (src/components/install-supplement-builder.tsx:249)", "shortDescription": {"text": "Dangling fetch: PUT /api/install-supplements (src/components/install-supplement-builder.tsx:249)"}, "fullDescription": {"text": "`src/components/install-supplement-builder.tsx:249` calls `PUT /api/install-supplements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/install-supplements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-026f063b761aec89", "name": "Dangling fetch: DELETE /api/install-supplements?id=${id} (src/components/install-supplement-builder.tsx:262)", "shortDescription": {"text": "Dangling fetch: DELETE /api/install-supplements?id=${id} (src/components/install-supplement-builder.tsx:262)"}, "fullDescription": {"text": "`src/components/install-supplement-builder.tsx:262` calls `DELETE /api/install-supplements?id=${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/install-supplements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0df99b7814fa2cca", "name": "Dangling fetch: PUT /api/install-supplements (src/components/install-supplement-builder.tsx:267)", "shortDescription": {"text": "Dangling fetch: PUT /api/install-supplements (src/components/install-supplement-builder.tsx:267)"}, "fullDescription": {"text": "`src/components/install-supplement-builder.tsx:267` calls `PUT /api/install-supplements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/install-supplements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1cb104fa8c8a4fa2", "name": "Dangling fetch: PUT /api/install-supplements (src/components/install-supplement-builder.tsx:864)", "shortDescription": {"text": "Dangling fetch: PUT /api/install-supplements (src/components/install-supplement-builder.tsx:864)"}, "fullDescription": {"text": "`src/components/install-supplement-builder.tsx:864` calls `PUT /api/install-supplements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/install-supplements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a33b5f6b9bfb3d57", "name": "Dangling fetch: PUT /api/install-supplements (src/components/install-supplement-builder.tsx:882)", "shortDescription": {"text": "Dangling fetch: PUT /api/install-supplements (src/components/install-supplement-builder.tsx:882)"}, "fullDescription": {"text": "`src/components/install-supplement-builder.tsx:882` calls `PUT /api/install-supplements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/install-supplements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e333101894908fb7", "name": "Dangling fetch: PUT /api/install-supplements (src/components/install-supplement-builder.tsx:892)", "shortDescription": {"text": "Dangling fetch: PUT /api/install-supplements (src/components/install-supplement-builder.tsx:892)"}, "fullDescription": {"text": "`src/components/install-supplement-builder.tsx:892` calls `PUT /api/install-supplements` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/install-supplements`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e6764c92f9cafa23", "name": "Dangling fetch: POST /api/notify-signup (src/components/mobile-magic-hero.tsx:144)", "shortDescription": {"text": "Dangling fetch: POST /api/notify-signup (src/components/mobile-magic-hero.tsx:144)"}, "fullDescription": {"text": "`src/components/mobile-magic-hero.tsx:144` calls `POST /api/notify-signup` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notify-signup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c56b7783b0554af", "name": "Dangling fetch: POST /api/admin/import/preview (src/components/import-modal.tsx:101)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/import/preview (src/components/import-modal.tsx:101)"}, "fullDescription": {"text": "`src/components/import-modal.tsx:101` calls `POST /api/admin/import/preview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/import/preview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3f1e6a012e4a9775", "name": "Dangling fetch: POST /api/admin/import/commit (src/components/import-modal.tsx:123)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/import/commit (src/components/import-modal.tsx:123)"}, "fullDescription": {"text": "`src/components/import-modal.tsx:123` calls `POST /api/admin/import/commit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/import/commit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-392e2e94da0d00a9", "name": "Dangling fetch: POST /api/claims/update (src/components/contact-registry-card.tsx:84)", "shortDescription": {"text": "Dangling fetch: POST /api/claims/update (src/components/contact-registry-card.tsx:84)"}, "fullDescription": {"text": "`src/components/contact-registry-card.tsx:84` calls `POST /api/claims/update` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claims/update`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6e5a41adc3100df4", "name": "Dangling fetch: POST /api/storage/sign-upload (src/components/coc-builder.tsx:58)", "shortDescription": {"text": "Dangling fetch: POST /api/storage/sign-upload (src/components/coc-builder.tsx:58)"}, "fullDescription": {"text": "`src/components/coc-builder.tsx:58` calls `POST /api/storage/sign-upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/storage/sign-upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-28b949f8792fddcb", "name": "Dangling fetch: POST /api/team-claims/update-files (src/components/coc-builder.tsx:88)", "shortDescription": {"text": "Dangling fetch: POST /api/team-claims/update-files (src/components/coc-builder.tsx:88)"}, "fullDescription": {"text": "`src/components/coc-builder.tsx:88` calls `POST /api/team-claims/update-files` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/team-claims/update-files`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a5e522eb42659905", "name": "Dangling fetch: GET /api/coc?claim_id=${claimId} (src/components/coc-builder.tsx:113)", "shortDescription": {"text": "Dangling fetch: GET /api/coc?claim_id=${claimId} (src/components/coc-builder.tsx:113)"}, "fullDescription": {"text": "`src/components/coc-builder.tsx:113` calls `GET /api/coc?claim_id=${claimId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/coc`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e924a8499b21ab1d", "name": "Dangling fetch: POST /api/coc (src/components/coc-builder.tsx:147)", "shortDescription": {"text": "Dangling fetch: POST /api/coc (src/components/coc-builder.tsx:147)"}, "fullDescription": {"text": "`src/components/coc-builder.tsx:147` calls `POST /api/coc` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/coc`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-efd1038db1c61b49", "name": "Dangling fetch: PUT /api/coc (src/components/coc-builder.tsx:203)", "shortDescription": {"text": "Dangling fetch: PUT /api/coc (src/components/coc-builder.tsx:203)"}, "fullDescription": {"text": "`src/components/coc-builder.tsx:203` calls `PUT /api/coc` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/coc`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-53dd57ab823bf178", "name": "Dangling fetch: GET /api/admin/production/claim-trades?claim_id=${selectedClaimId} (src/components/schedule-claim-modal.", "shortDescription": {"text": "Dangling fetch: GET /api/admin/production/claim-trades?claim_id=${selectedClaimId} (src/components/schedule-claim-modal.tsx:160)"}, "fullDescription": {"text": "`src/components/schedule-claim-modal.tsx:160` calls `GET /api/admin/production/claim-trades?claim_id=${selectedClaimId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/production/claim-trades`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-501a788cac491b16", "name": "Dangling fetch: PATCH /api/admin/production/schedules/${existing.id} (src/components/schedule-claim-modal.tsx:229)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/production/schedules/${existing.id} (src/components/schedule-claim-modal.tsx:229)"}, "fullDescription": {"text": "`src/components/schedule-claim-modal.tsx:229` calls `PATCH /api/admin/production/schedules/${existing.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/production/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-e2b2c8685c9ff326", "name": "Dangling fetch: POST /api/admin/production/schedules (src/components/schedule-claim-modal.tsx:249)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/production/schedules (src/components/schedule-claim-modal.tsx:249)"}, "fullDescription": {"text": "`src/components/schedule-claim-modal.tsx:249` calls `POST /api/admin/production/schedules` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/production/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-4101d8a26c3777f2", "name": "Dangling fetch: POST /api/admin/production/schedules/${scheduleId}/notify (src/components/schedule-claim-modal.tsx:271)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/production/schedules/${scheduleId}/notify (src/components/schedule-claim-modal.tsx:271)"}, "fullDescription": {"text": "`src/components/schedule-claim-modal.tsx:271` calls `POST /api/admin/production/schedules/${scheduleId}/notify` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/production/schedules/<p>/notify`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d16d50bd95d9041f", "name": "Dangling fetch: DELETE /api/admin/production/schedules/${existing.id} (src/components/schedule-claim-modal.tsx:318)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/production/schedules/${existing.id} (src/components/schedule-claim-modal.tsx:318)"}, "fullDescription": {"text": "`src/components/schedule-claim-modal.tsx:318` calls `DELETE /api/admin/production/schedules/${existing.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/production/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-2dec43f2822eb79e", "name": "Dangling fetch: GET /api/claim-emails?claim_id=${claimId} (src/components/communication-log.tsx:51)", "shortDescription": {"text": "Dangling fetch: GET /api/claim-emails?claim_id=${claimId} (src/components/communication-log.tsx:51)"}, "fullDescription": {"text": "`src/components/communication-log.tsx:51` calls `GET /api/claim-emails?claim_id=${claimId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claim-emails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1cea1484485217df", "name": "Dangling fetch: POST /api/claim/${effectiveClaimId}/upload-check (src/components/check-upload-modal.tsx:137)", "shortDescription": {"text": "Dangling fetch: POST /api/claim/${effectiveClaimId}/upload-check (src/components/check-upload-modal.tsx:137)"}, "fullDescription": {"text": "`src/components/check-upload-modal.tsx:137` calls `POST /api/claim/${effectiveClaimId}/upload-check` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claim/<p>/upload-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-d01563f7c53de9bd", "name": "Dangling fetch: GET /api/team-claims (src/components/claim-picker.tsx:30)", "shortDescription": {"text": "Dangling fetch: GET /api/team-claims (src/components/claim-picker.tsx:30)"}, "fullDescription": {"text": "`src/components/claim-picker.tsx:30` calls `GET /api/team-claims` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/team-claims`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-27c75863d80cadb6", "name": "Dangling fetch: POST /api/instant-intake/upload (src/components/instant-funnel.tsx:222)", "shortDescription": {"text": "Dangling fetch: POST /api/instant-intake/upload (src/components/instant-funnel.tsx:222)"}, "fullDescription": {"text": "`src/components/instant-funnel.tsx:222` calls `POST /api/instant-intake/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instant-intake/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7ebf47d21f60d756", "name": "Dangling fetch: GET /api/claims/${claimId}/events?limit=200 (src/components/claim-timeline-rail.tsx:52)", "shortDescription": {"text": "Dangling fetch: GET /api/claims/${claimId}/events?limit=200 (src/components/claim-timeline-rail.tsx:52)"}, "fullDescription": {"text": "`src/components/claim-timeline-rail.tsx:52` calls `GET /api/claims/${claimId}/events?limit=200` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claims/<p>/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ed512c367964c1ee", "name": "Dangling fetch: GET /api/admin/referral-analytics (src/components/admin-referral-loop-panel.tsx:94)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/referral-analytics (src/components/admin-referral-loop-panel.tsx:94)"}, "fullDescription": {"text": "`src/components/admin-referral-loop-panel.tsx:94` calls `GET /api/admin/referral-analytics` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/referral-analytics`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-12ddfbd1c486ed2b", "name": "Dangling fetch: POST /api/storage/sign-upload (src/components/aob-commission-modal.tsx:71)", "shortDescription": {"text": "Dangling fetch: POST /api/storage/sign-upload (src/components/aob-commission-modal.tsx:71)"}, "fullDescription": {"text": "`src/components/aob-commission-modal.tsx:71` calls `POST /api/storage/sign-upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/storage/sign-upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a4858ee5d98b1e06", "name": "Dangling fetch: POST /api/team-claims/update-files (src/components/aob-commission-modal.tsx:85)", "shortDescription": {"text": "Dangling fetch: POST /api/team-claims/update-files (src/components/aob-commission-modal.tsx:85)"}, "fullDescription": {"text": "`src/components/aob-commission-modal.tsx:85` calls `POST /api/team-claims/update-files` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/team-claims/update-files`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1de02eb29e942329", "name": "Dangling fetch: POST /api/claim/${claim.id}/commission-request (src/components/aob-commission-modal.tsx:122)", "shortDescription": {"text": "Dangling fetch: POST /api/claim/${claim.id}/commission-request (src/components/aob-commission-modal.tsx:122)"}, "fullDescription": {"text": "`src/components/aob-commission-modal.tsx:122` calls `POST /api/claim/${claim.id}/commission-request` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claim/<p>/commission-request`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-55cf7d6dd9a705ac", "name": "Dangling fetch: POST /api/storage/sign-upload (src/components/claim-brain-chat.tsx:1348)", "shortDescription": {"text": "Dangling fetch: POST /api/storage/sign-upload (src/components/claim-brain-chat.tsx:1348)"}, "fullDescription": {"text": "`src/components/claim-brain-chat.tsx:1348` calls `POST /api/storage/sign-upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/storage/sign-upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0637f82897f858fa", "name": "Dangling fetch: GET /api/pending-changes?claim_id=${claimId} (src/components/pending-changes-banner.tsx:25)", "shortDescription": {"text": "Dangling fetch: GET /api/pending-changes?claim_id=${claimId} (src/components/pending-changes-banner.tsx:25)"}, "fullDescription": {"text": "`src/components/pending-changes-banner.tsx:25` calls `GET /api/pending-changes?claim_id=${claimId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pending-changes`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c40ca93e86166b36", "name": "Dangling fetch: POST /api/claim/reprocess (src/components/pending-changes-banner.tsx:43)", "shortDescription": {"text": "Dangling fetch: POST /api/claim/reprocess (src/components/pending-changes-banner.tsx:43)"}, "fullDescription": {"text": "`src/components/pending-changes-banner.tsx:43` calls `POST /api/claim/reprocess` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claim/reprocess`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f644779cda494e01", "name": "Dangling fetch: POST /api/instant-intake/upload (src/components/start-chat.tsx:247)", "shortDescription": {"text": "Dangling fetch: POST /api/instant-intake/upload (src/components/start-chat.tsx:247)"}, "fullDescription": {"text": "`src/components/start-chat.tsx:247` calls `POST /api/instant-intake/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instant-intake/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5614016781c68a10", "name": "Dangling fetch: GET /api/scope-comparison?claim_id=${claimId} (src/components/scope-comparison.tsx:37)", "shortDescription": {"text": "Dangling fetch: GET /api/scope-comparison?claim_id=${claimId} (src/components/scope-comparison.tsx:37)"}, "fullDescription": {"text": "`src/components/scope-comparison.tsx:37` calls `GET /api/scope-comparison?claim_id=${claimId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scope-comparison`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0dc1f097897f6b37", "name": "Dangling fetch: POST /api/claim/${claimId}/expense (src/components/expense-upload-modal.tsx:130)", "shortDescription": {"text": "Dangling fetch: POST /api/claim/${claimId}/expense (src/components/expense-upload-modal.tsx:130)"}, "fullDescription": {"text": "`src/components/expense-upload-modal.tsx:130` calls `POST /api/claim/${claimId}/expense` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claim/<p>/expense`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9395f2777f7ddddd", "name": "Dangling fetch: POST /api/production/validate/${claimId} (src/components/ready-to-build-card.tsx:152)", "shortDescription": {"text": "Dangling fetch: POST /api/production/validate/${claimId} (src/components/ready-to-build-card.tsx:152)"}, "fullDescription": {"text": "`src/components/ready-to-build-card.tsx:152` calls `POST /api/production/validate/${claimId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/production/validate/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2f409ec9a2cd7fba", "name": "Dangling fetch: POST /api/production/send/${claimId} (src/components/ready-to-build-card.tsx:177)", "shortDescription": {"text": "Dangling fetch: POST /api/production/send/${claimId} (src/components/ready-to-build-card.tsx:177)"}, "fullDescription": {"text": "`src/components/ready-to-build-card.tsx:177` calls `POST /api/production/send/${claimId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/production/send/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-141e12a22799018a", "name": "Dangling fetch: GET /api/referrals/stats (src/components/refer-company-modal.tsx:36)", "shortDescription": {"text": "Dangling fetch: GET /api/referrals/stats (src/components/refer-company-modal.tsx:36)"}, "fullDescription": {"text": "`src/components/refer-company-modal.tsx:36` calls `GET /api/referrals/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/referrals/stats`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-73c2ad8525d69427", "name": "Dangling fetch: POST /api/referrals/send (src/components/refer-company-modal.tsx:82)", "shortDescription": {"text": "Dangling fetch: POST /api/referrals/send (src/components/refer-company-modal.tsx:82)"}, "fullDescription": {"text": "`src/components/refer-company-modal.tsx:82` calls `POST /api/referrals/send` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/referrals/send`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7d996d0f739db0ef", "name": "Dangling fetch: POST /api/correspondence/attachments (src/components/claim-detail/communications-center.tsx:104)", "shortDescription": {"text": "Dangling fetch: POST /api/correspondence/attachments (src/components/claim-detail/communications-center.tsx:104)"}, "fullDescription": {"text": "`src/components/claim-detail/communications-center.tsx:104` calls `POST /api/correspondence/attachments` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/correspondence/attachments`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4a77aed8fe2c79fa", "name": "Dangling fetch: POST /api/claim/upload-estimate (src/components/claim-detail/v2/tabs/scope-tab.tsx:204)", "shortDescription": {"text": "Dangling fetch: POST /api/claim/upload-estimate (src/components/claim-detail/v2/tabs/scope-tab.tsx:204)"}, "fullDescription": {"text": "`src/components/claim-detail/v2/tabs/scope-tab.tsx:204` calls `POST /api/claim/upload-estimate` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claim/upload-estimate`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-44b0be11661c2290", "name": "Dangling fetch: POST /api/claim/set-trades (src/components/claim-detail/v2/tabs/scope-tab.tsx:341)", "shortDescription": {"text": "Dangling fetch: POST /api/claim/set-trades (src/components/claim-detail/v2/tabs/scope-tab.tsx:341)"}, "fullDescription": {"text": "`src/components/claim-detail/v2/tabs/scope-tab.tsx:341` calls `POST /api/claim/set-trades` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claim/set-trades`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-26e3015ef1446e86", "name": "Dangling fetch: POST /api/pa-apply (src/app/pa-club/pa-club-content.tsx:46)", "shortDescription": {"text": "Dangling fetch: POST /api/pa-apply (src/app/pa-club/pa-club-content.tsx:46)"}, "fullDescription": {"text": "`src/app/pa-club/pa-club-content.tsx:46` calls `POST /api/pa-apply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/pa-apply`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c89f0eccd887c832", "name": "Dangling fetch: POST /api/team/accept (src/app/invite/[token]/accept-client.tsx:27)", "shortDescription": {"text": "Dangling fetch: POST /api/team/accept (src/app/invite/[token]/accept-client.tsx:27)"}, "fullDescription": {"text": "`src/app/invite/[token]/accept-client.tsx:27` calls `POST /api/team/accept` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/team/accept`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d1670472e8c2d970", "name": "Dangling fetch: POST /api/notify-signup (src/app/login/page.tsx:103)", "shortDescription": {"text": "Dangling fetch: POST /api/notify-signup (src/app/login/page.tsx:103)"}, "fullDescription": {"text": "`src/app/login/page.tsx:103` calls `POST /api/notify-signup` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notify-signup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9cf4ea25d47c7cc9", "name": "Dangling fetch: POST /api/notify-signup (src/app/login/page.tsx:118)", "shortDescription": {"text": "Dangling fetch: POST /api/notify-signup (src/app/login/page.tsx:118)"}, "fullDescription": {"text": "`src/app/login/page.tsx:118` calls `POST /api/notify-signup` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notify-signup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-536db9c61e128fbe", "name": "Dangling fetch: POST https://api.resend.com/emails (src/app/api/welcome-email/route.ts:79)", "shortDescription": {"text": "Dangling fetch: POST https://api.resend.com/emails (src/app/api/welcome-email/route.ts:79)"}, "fullDescription": {"text": "`src/app/api/welcome-email/route.ts:79` calls `POST https://api.resend.com/emails` 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.resend.com/emails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f8fbe74dc211adc4", "name": "Dangling fetch: POST https://www.dumbroof.ai/api/notify-complete (src/app/api/admin/qa-review/[id]/release/route.ts:76)", "shortDescription": {"text": "Dangling fetch: POST https://www.dumbroof.ai/api/notify-complete (src/app/api/admin/qa-review/[id]/release/route.ts:76)"}, "fullDescription": {"text": "`src/app/api/admin/qa-review/[id]/release/route.ts:76` calls `POST https://www.dumbroof.ai/api/notify-complete` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/www.dumbroof.ai/api/notify-complete`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-232989b6591584c0", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/cron/enrich-incomplete-profiles/route.ts:202)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/cron/enrich-incomplete-profiles/route.ts:202)"}, "fullDescription": {"text": "`src/app/api/cron/enrich-incomplete-profiles/route.ts:202` calls `POST https://api.anthropic.com/v1/messages` 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.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8b5ed2a7eb7ce5c6", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/cron/aeo-monitor/route.ts:170)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/cron/aeo-monitor/route.ts:170)"}, "fullDescription": {"text": "`src/app/api/cron/aeo-monitor/route.ts:170` calls `POST https://api.anthropic.com/v1/messages` 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.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c009f5c1ff77a2f8", "name": "Dangling fetch: GET /api/referrals/stats (src/app/dashboard/dashboard-content.tsx:115)", "shortDescription": {"text": "Dangling fetch: GET /api/referrals/stats (src/app/dashboard/dashboard-content.tsx:115)"}, "fullDescription": {"text": "`src/app/dashboard/dashboard-content.tsx:115` calls `GET /api/referrals/stats` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/referrals/stats`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9c8cb5220dd199cd", "name": "Dangling fetch: GET /api/team-claims (src/app/dashboard/dashboard-content.tsx:177)", "shortDescription": {"text": "Dangling fetch: GET /api/team-claims (src/app/dashboard/dashboard-content.tsx:177)"}, "fullDescription": {"text": "`src/app/dashboard/dashboard-content.tsx:177` calls `GET /api/team-claims` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/team-claims`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-11c40cf3e880c9e8", "name": "Dangling fetch: GET /api/admin/whats-next (src/app/dashboard/dashboard-content.tsx:1583)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/whats-next (src/app/dashboard/dashboard-content.tsx:1583)"}, "fullDescription": {"text": "`src/app/dashboard/dashboard-content.tsx:1583` calls `GET /api/admin/whats-next` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/whats-next`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9212938f0da9add9", "name": "Dangling fetch: GET /api/photo-review?${params} (src/app/dashboard/photo-review/photo-review-content.tsx:126)", "shortDescription": {"text": "Dangling fetch: GET /api/photo-review?${params} (src/app/dashboard/photo-review/photo-review-content.tsx:126)"}, "fullDescription": {"text": "`src/app/dashboard/photo-review/photo-review-content.tsx:126` calls `GET /api/photo-review?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/photo-review`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a5c534fb90f06b9d", "name": "Dangling fetch: POST /api/photo-review (src/app/dashboard/photo-review/photo-review-content.tsx:228)", "shortDescription": {"text": "Dangling fetch: POST /api/photo-review (src/app/dashboard/photo-review/photo-review-content.tsx:228)"}, "fullDescription": {"text": "`src/app/dashboard/photo-review/photo-review-content.tsx:228` calls `POST /api/photo-review` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/photo-review`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0d0347b085d1a30c", "name": "Dangling fetch: POST /api/claims/preflight (src/app/dashboard/new-claim/page.tsx:292)", "shortDescription": {"text": "Dangling fetch: POST /api/claims/preflight (src/app/dashboard/new-claim/page.tsx:292)"}, "fullDescription": {"text": "`src/app/dashboard/new-claim/page.tsx:292` calls `POST /api/claims/preflight` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claims/preflight`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2c2410d9884c06f7", "name": "Dangling fetch: POST /api/capi-event (src/app/dashboard/new-claim/page.tsx:463)", "shortDescription": {"text": "Dangling fetch: POST /api/capi-event (src/app/dashboard/new-claim/page.tsx:463)"}, "fullDescription": {"text": "`src/app/dashboard/new-claim/page.tsx:463` calls `POST /api/capi-event` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/capi-event`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e31a051ef194165e", "name": "Dangling fetch: POST /api/billing/acknowledge-overage (src/app/dashboard/new-claim/page.tsx:711)", "shortDescription": {"text": "Dangling fetch: POST /api/billing/acknowledge-overage (src/app/dashboard/new-claim/page.tsx:711)"}, "fullDescription": {"text": "`src/app/dashboard/new-claim/page.tsx:711` calls `POST /api/billing/acknowledge-overage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/billing/acknowledge-overage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9197662243507177", "name": "Dangling fetch: POST /api/billing/create-portal (src/app/dashboard/settings/page.tsx:647)", "shortDescription": {"text": "Dangling fetch: POST /api/billing/create-portal (src/app/dashboard/settings/page.tsx:647)"}, "fullDescription": {"text": "`src/app/dashboard/settings/page.tsx:647` calls `POST /api/billing/create-portal` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/billing/create-portal`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-85b47368a431687d", "name": "Dangling fetch: POST /api/stripe-connect (src/app/dashboard/settings/page.tsx:1598)", "shortDescription": {"text": "Dangling fetch: POST /api/stripe-connect (src/app/dashboard/settings/page.tsx:1598)"}, "fullDescription": {"text": "`src/app/dashboard/settings/page.tsx:1598` calls `POST /api/stripe-connect` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stripe-connect`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b9d903875b21933d", "name": "Dangling fetch: GET /api/stripe-connect (src/app/dashboard/settings/page.tsx:1614)", "shortDescription": {"text": "Dangling fetch: GET /api/stripe-connect (src/app/dashboard/settings/page.tsx:1614)"}, "fullDescription": {"text": "`src/app/dashboard/settings/page.tsx:1614` calls `GET /api/stripe-connect` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stripe-connect`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7f8c811d1d9d2c60", "name": "Dangling fetch: POST /api/stripe-connect (src/app/dashboard/settings/page.tsx:1639)", "shortDescription": {"text": "Dangling fetch: POST /api/stripe-connect (src/app/dashboard/settings/page.tsx:1639)"}, "fullDescription": {"text": "`src/app/dashboard/settings/page.tsx:1639` calls `POST /api/stripe-connect` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/stripe-connect`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-15ecb28c861e3c48", "name": "Dangling fetch: GET /api/scope-review?claim_id=${claimId} (src/app/dashboard/scope-review/scope-review-content.tsx:62)", "shortDescription": {"text": "Dangling fetch: GET /api/scope-review?claim_id=${claimId} (src/app/dashboard/scope-review/scope-review-content.tsx:62)"}, "fullDescription": {"text": "`src/app/dashboard/scope-review/scope-review-content.tsx:62` calls `GET /api/scope-review?claim_id=${claimId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scope-review`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dfd9f16740d321ce", "name": "Dangling fetch: POST /api/scope-review (src/app/dashboard/scope-review/scope-review-content.tsx:91)", "shortDescription": {"text": "Dangling fetch: POST /api/scope-review (src/app/dashboard/scope-review/scope-review-content.tsx:91)"}, "fullDescription": {"text": "`src/app/dashboard/scope-review/scope-review-content.tsx:91` calls `POST /api/scope-review` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scope-review`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f6faff64ac530d3d", "name": "Dangling fetch: PUT /api/scope-review (src/app/dashboard/scope-review/scope-review-content.tsx:140)", "shortDescription": {"text": "Dangling fetch: PUT /api/scope-review (src/app/dashboard/scope-review/scope-review-content.tsx:140)"}, "fullDescription": {"text": "`src/app/dashboard/scope-review/scope-review-content.tsx:140` calls `PUT /api/scope-review` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/scope-review`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1e9977708592087e", "name": "Dangling fetch: POST /api/claim/reprocess (src/app/dashboard/scope-review/scope-review-content.tsx:174)", "shortDescription": {"text": "Dangling fetch: POST /api/claim/reprocess (src/app/dashboard/scope-review/scope-review-content.tsx:174)"}, "fullDescription": {"text": "`src/app/dashboard/scope-review/scope-review-content.tsx:174` calls `POST /api/claim/reprocess` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claim/reprocess`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b56c2b42ad4fe698", "name": "Dangling fetch: GET /api/admin/claims-grid?${params.toString()} (src/app/dashboard/reps/page.tsx:57)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/claims-grid?${params.toString()} (src/app/dashboard/reps/page.tsx:57)"}, "fullDescription": {"text": "`src/app/dashboard/reps/page.tsx:57` calls `GET /api/admin/claims-grid?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/claims-grid`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-69f30d19178ab256", "name": "Dangling fetch: GET /api/commissions/mine (src/app/dashboard/commissions/commissions-content.tsx:55)", "shortDescription": {"text": "Dangling fetch: GET /api/commissions/mine (src/app/dashboard/commissions/commissions-content.tsx:55)"}, "fullDescription": {"text": "`src/app/dashboard/commissions/commissions-content.tsx:55` calls `GET /api/commissions/mine` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/commissions/mine`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-51141357e2df6abc", "name": "Dangling fetch: PATCH /api/leadgen/campaigns/${campaignId} (src/app/dashboard/storm-leads/storm-leads-client.tsx:240)", "shortDescription": {"text": "Dangling fetch: PATCH /api/leadgen/campaigns/${campaignId} (src/app/dashboard/storm-leads/storm-leads-client.tsx:240)"}, "fullDescription": {"text": "`src/app/dashboard/storm-leads/storm-leads-client.tsx:240` calls `PATCH /api/leadgen/campaigns/${campaignId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/leadgen/campaigns/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a2ef923e3957075c", "name": "Dangling fetch: PATCH /api/leadgen/campaigns/${campaignId} (src/app/dashboard/storm-leads/storm-leads-client.tsx:270)", "shortDescription": {"text": "Dangling fetch: PATCH /api/leadgen/campaigns/${campaignId} (src/app/dashboard/storm-leads/storm-leads-client.tsx:270)"}, "fullDescription": {"text": "`src/app/dashboard/storm-leads/storm-leads-client.tsx:270` calls `PATCH /api/leadgen/campaigns/${campaignId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/leadgen/campaigns/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4688d8ef1a23375c", "name": "Dangling fetch: GET /api/leadgen/campaigns (src/app/dashboard/storm-leads/storm-leads-client.tsx:596)", "shortDescription": {"text": "Dangling fetch: GET /api/leadgen/campaigns (src/app/dashboard/storm-leads/storm-leads-client.tsx:596)"}, "fullDescription": {"text": "`src/app/dashboard/storm-leads/storm-leads-client.tsx:596` calls `GET /api/leadgen/campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/leadgen/campaigns`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1718403a22dff8a7", "name": "Dangling fetch: GET /api/leadgen/sender-domain (src/app/dashboard/storm-leads/storm-leads-client.tsx:617)", "shortDescription": {"text": "Dangling fetch: GET /api/leadgen/sender-domain (src/app/dashboard/storm-leads/storm-leads-client.tsx:617)"}, "fullDescription": {"text": "`src/app/dashboard/storm-leads/storm-leads-client.tsx:617` calls `GET /api/leadgen/sender-domain` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/leadgen/sender-domain`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3ac07c4a66e7c0eb", "name": "Dangling fetch: GET /api/leadgen/integrations (src/app/dashboard/storm-leads/storm-leads-client.tsx:641)", "shortDescription": {"text": "Dangling fetch: GET /api/leadgen/integrations (src/app/dashboard/storm-leads/storm-leads-client.tsx:641)"}, "fullDescription": {"text": "`src/app/dashboard/storm-leads/storm-leads-client.tsx:641` calls `GET /api/leadgen/integrations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/leadgen/integrations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b6d4ca470576fce4", "name": "Dangling fetch: POST /api/leadgen/sender-domain (src/app/dashboard/storm-leads/storm-leads-client.tsx:671)", "shortDescription": {"text": "Dangling fetch: POST /api/leadgen/sender-domain (src/app/dashboard/storm-leads/storm-leads-client.tsx:671)"}, "fullDescription": {"text": "`src/app/dashboard/storm-leads/storm-leads-client.tsx:671` calls `POST /api/leadgen/sender-domain` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/leadgen/sender-domain`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-952e7534fa0d77e9", "name": "Dangling fetch: PATCH /api/leadgen/campaigns/${c.id} (src/app/dashboard/storm-leads/storm-leads-client.tsx:707)", "shortDescription": {"text": "Dangling fetch: PATCH /api/leadgen/campaigns/${c.id} (src/app/dashboard/storm-leads/storm-leads-client.tsx:707)"}, "fullDescription": {"text": "`src/app/dashboard/storm-leads/storm-leads-client.tsx:707` calls `PATCH /api/leadgen/campaigns/${c.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/leadgen/campaigns/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9bd56b72433ff563", "name": "Dangling fetch: PATCH /api/leadgen/campaigns/${c.id} (src/app/dashboard/storm-leads/storm-leads-client.tsx:733)", "shortDescription": {"text": "Dangling fetch: PATCH /api/leadgen/campaigns/${c.id} (src/app/dashboard/storm-leads/storm-leads-client.tsx:733)"}, "fullDescription": {"text": "`src/app/dashboard/storm-leads/storm-leads-client.tsx:733` calls `PATCH /api/leadgen/campaigns/${c.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/leadgen/campaigns/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-43a74ef97516f47f", "name": "Dangling fetch: POST /api/leadgen/campaigns (src/app/dashboard/storm-leads/storm-leads-client.tsx:801)", "shortDescription": {"text": "Dangling fetch: POST /api/leadgen/campaigns (src/app/dashboard/storm-leads/storm-leads-client.tsx:801)"}, "fullDescription": {"text": "`src/app/dashboard/storm-leads/storm-leads-client.tsx:801` calls `POST /api/leadgen/campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/leadgen/campaigns`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a4167cb46febd977", "name": "Dangling fetch: POST /api/leadgen/integrations (src/app/dashboard/storm-leads/storm-leads-client.tsx:829)", "shortDescription": {"text": "Dangling fetch: POST /api/leadgen/integrations (src/app/dashboard/storm-leads/storm-leads-client.tsx:829)"}, "fullDescription": {"text": "`src/app/dashboard/storm-leads/storm-leads-client.tsx:829` calls `POST /api/leadgen/integrations` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/leadgen/integrations`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e7e8ace4e3b18c13", "name": "Dangling fetch: GET /api/admin/crews (src/app/dashboard/production/page.tsx:413)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/crews (src/app/dashboard/production/page.tsx:413)"}, "fullDescription": {"text": "`src/app/dashboard/production/page.tsx:413` calls `GET /api/admin/crews` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/crews`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-af47de189ebf756c", "name": "Dangling fetch: POST /api/admin/crews (src/app/dashboard/production/page.tsx:432)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/crews (src/app/dashboard/production/page.tsx:432)"}, "fullDescription": {"text": "`src/app/dashboard/production/page.tsx:432` calls `POST /api/admin/crews` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/crews`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-13b01d9dc992e19c", "name": "Dangling fetch: GET /api/admin/claims-grid?filter=${filter}&scope=active (src/app/dashboard/admin/page.tsx:65)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/claims-grid?filter=${filter}&scope=active (src/app/dashboard/admin/page.tsx:65)"}, "fullDescription": {"text": "`src/app/dashboard/admin/page.tsx:65` calls `GET /api/admin/claims-grid?filter=${filter}&scope=active` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/claims-grid`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3ab2f42d709a799b", "name": "Dangling fetch: GET /api/admin/overview (src/app/dashboard/admin/page.tsx:68)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/overview (src/app/dashboard/admin/page.tsx:68)"}, "fullDescription": {"text": "`src/app/dashboard/admin/page.tsx:68` calls `GET /api/admin/overview` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/overview`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a2e4480ddd956638", "name": "Dangling fetch: GET /api/admin/team (src/app/dashboard/admin/settings/page.tsx:336)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/team (src/app/dashboard/admin/settings/page.tsx:336)"}, "fullDescription": {"text": "`src/app/dashboard/admin/settings/page.tsx:336` calls `GET /api/admin/team` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/team`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-500ba0f920e451c7", "name": "Dangling fetch: POST /api/storage/sign-upload (src/app/dashboard/admin/settings/page.tsx:389)", "shortDescription": {"text": "Dangling fetch: POST /api/storage/sign-upload (src/app/dashboard/admin/settings/page.tsx:389)"}, "fullDescription": {"text": "`src/app/dashboard/admin/settings/page.tsx:389` calls `POST /api/storage/sign-upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/storage/sign-upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-372a9979a7aafd4b", "name": "Dangling fetch: POST /api/storage/sign-upload (src/app/dashboard/admin/settings/page.tsx:477)", "shortDescription": {"text": "Dangling fetch: POST /api/storage/sign-upload (src/app/dashboard/admin/settings/page.tsx:477)"}, "fullDescription": {"text": "`src/app/dashboard/admin/settings/page.tsx:477` calls `POST /api/storage/sign-upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/storage/sign-upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-11b04543c3d1c2e4", "name": "Dangling fetch: GET /api/admin/carriers (src/app/dashboard/admin/carriers/page.tsx:58)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/carriers (src/app/dashboard/admin/carriers/page.tsx:58)"}, "fullDescription": {"text": "`src/app/dashboard/admin/carriers/page.tsx:58` calls `GET /api/admin/carriers` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/carriers`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-465539c22fb97ef5", "name": "Dangling fetch: GET /api/admin/commissions?status=${tab} (src/app/dashboard/admin/commissions/page.tsx:66)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/commissions?status=${tab} (src/app/dashboard/admin/commissions/page.tsx:66)"}, "fullDescription": {"text": "`src/app/dashboard/admin/commissions/page.tsx:66` calls `GET /api/admin/commissions?status=${tab}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/commissions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3ce93fbaa886de12", "name": "Dangling fetch: GET /api/admin/commissions?status=pending (src/app/dashboard/admin/commissions/page.tsx:92)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/commissions?status=pending (src/app/dashboard/admin/commissions/page.tsx:92)"}, "fullDescription": {"text": "`src/app/dashboard/admin/commissions/page.tsx:92` calls `GET /api/admin/commissions?status=pending` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/commissions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3e865d4a78730110", "name": "Dangling fetch: POST /api/admin/commissions (src/app/dashboard/admin/commissions/page.tsx:110)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/commissions (src/app/dashboard/admin/commissions/page.tsx:110)"}, "fullDescription": {"text": "`src/app/dashboard/admin/commissions/page.tsx:110` calls `POST /api/admin/commissions` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/commissions`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c8998a4e42e7b8b2", "name": "Dangling fetch: GET /api/admin/import/runs?status=all (src/app/dashboard/admin/imports/page.tsx:48)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/import/runs?status=all (src/app/dashboard/admin/imports/page.tsx:48)"}, "fullDescription": {"text": "`src/app/dashboard/admin/imports/page.tsx:48` calls `GET /api/admin/import/runs?status=all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/import/runs`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e6b236bf469bd96d", "name": "Dangling fetch: GET /api/admin/import/unmatched?status=pending (src/app/dashboard/admin/imports/page.tsx:64)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/import/unmatched?status=pending (src/app/dashboard/admin/imports/page.tsx:64)"}, "fullDescription": {"text": "`src/app/dashboard/admin/imports/page.tsx:64` calls `GET /api/admin/import/unmatched?status=pending` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/import/unmatched`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9b083f31dc159f72", "name": "Dangling fetch: POST /api/admin/import/rollback/${runId} (src/app/dashboard/admin/imports/page.tsx:87)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/import/rollback/${runId} (src/app/dashboard/admin/imports/page.tsx:87)"}, "fullDescription": {"text": "`src/app/dashboard/admin/imports/page.tsx:87` calls `POST /api/admin/import/rollback/${runId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/import/rollback/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-38e7f0eb1a37f273", "name": "Dangling fetch: GET /api/admin/import/unmatched?${params} (src/app/dashboard/admin/imports/unmatched/page.tsx:44)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/import/unmatched?${params} (src/app/dashboard/admin/imports/unmatched/page.tsx:44)"}, "fullDescription": {"text": "`src/app/dashboard/admin/imports/unmatched/page.tsx:44` calls `GET /api/admin/import/unmatched?${params}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/import/unmatched`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5a181a12c1c26924", "name": "Dangling fetch: GET /api/claims/search?q=${encodeURIComponent(query)}&limit=10 (src/app/dashboard/admin/imports/unmatche", "shortDescription": {"text": "Dangling fetch: GET /api/claims/search?q=${encodeURIComponent(query)}&limit=10 (src/app/dashboard/admin/imports/unmatched/page.tsx:73)"}, "fullDescription": {"text": "`src/app/dashboard/admin/imports/unmatched/page.tsx:73` calls `GET /api/claims/search?q=${encodeURIComponent(query)}&limit=10` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claims/search`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cf05512308162efd", "name": "Dangling fetch: POST /api/admin/import/unmatched/${rowId}/convert (src/app/dashboard/admin/imports/unmatched/page.tsx:92", "shortDescription": {"text": "Dangling fetch: POST /api/admin/import/unmatched/${rowId}/convert (src/app/dashboard/admin/imports/unmatched/page.tsx:92)"}, "fullDescription": {"text": "`src/app/dashboard/admin/imports/unmatched/page.tsx:92` calls `POST /api/admin/import/unmatched/${rowId}/convert` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/import/unmatched/<p>/convert`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bd2b389f73f9ea4e", "name": "Dangling fetch: GET /api/admin/job-pnl (src/app/dashboard/admin/expenses/page.tsx:98)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/job-pnl (src/app/dashboard/admin/expenses/page.tsx:98)"}, "fullDescription": {"text": "`src/app/dashboard/admin/expenses/page.tsx:98` calls `GET /api/admin/job-pnl` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/job-pnl`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-42794316e101e806", "name": "Dangling fetch: GET /api/admin/pnl-audit (src/app/dashboard/admin/expenses/page.tsx:121)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/pnl-audit (src/app/dashboard/admin/expenses/page.tsx:121)"}, "fullDescription": {"text": "`src/app/dashboard/admin/expenses/page.tsx:121` calls `GET /api/admin/pnl-audit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/pnl-audit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b9783e186dcb4d98", "name": "Dangling fetch: POST /api/admin/pnl-audit/clean-duplicates (src/app/dashboard/admin/expenses/page.tsx:142)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/pnl-audit/clean-duplicates (src/app/dashboard/admin/expenses/page.tsx:142)"}, "fullDescription": {"text": "`src/app/dashboard/admin/expenses/page.tsx:142` calls `POST /api/admin/pnl-audit/clean-duplicates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/pnl-audit/clean-duplicates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-adbe3cfbe6b0c209", "name": "Dangling fetch: GET /api/admin/expense-proposals (src/app/dashboard/admin/expenses/page.tsx:667)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/expense-proposals (src/app/dashboard/admin/expenses/page.tsx:667)"}, "fullDescription": {"text": "`src/app/dashboard/admin/expenses/page.tsx:667` calls `GET /api/admin/expense-proposals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/expense-proposals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-070db4620581d610", "name": "Dangling fetch: POST /api/admin/expense-proposals (src/app/dashboard/admin/expenses/page.tsx:691)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/expense-proposals (src/app/dashboard/admin/expenses/page.tsx:691)"}, "fullDescription": {"text": "`src/app/dashboard/admin/expenses/page.tsx:691` calls `POST /api/admin/expense-proposals` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/expense-proposals`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3c90329fb18a6920", "name": "Dangling fetch: GET /api/admin/claims-grid?filter=${filter}&scope=all (src/app/dashboard/admin/pipeline/page.tsx:68)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/claims-grid?filter=${filter}&scope=all (src/app/dashboard/admin/pipeline/page.tsx:68)"}, "fullDescription": {"text": "`src/app/dashboard/admin/pipeline/page.tsx:68` calls `GET /api/admin/claims-grid?filter=${filter}&scope=all` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/claims-grid`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a13c5eb3e00af9a3", "name": "Dangling fetch: GET /api/admin/meta/campaigns?datePreset=${datePreset} (src/app/dashboard/admin/meta-ads/page.tsx:55)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/meta/campaigns?datePreset=${datePreset} (src/app/dashboard/admin/meta-ads/page.tsx:55)"}, "fullDescription": {"text": "`src/app/dashboard/admin/meta-ads/page.tsx:55` calls `GET /api/admin/meta/campaigns?datePreset=${datePreset}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/meta/campaigns`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-16d92fc4af240f37", "name": "Dangling fetch: GET /api/admin/meta/insights?datePreset=${datePreset} (src/app/dashboard/admin/meta-ads/page.tsx:56)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/meta/insights?datePreset=${datePreset} (src/app/dashboard/admin/meta-ads/page.tsx:56)"}, "fullDescription": {"text": "`src/app/dashboard/admin/meta-ads/page.tsx:56` calls `GET /api/admin/meta/insights?datePreset=${datePreset}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/meta/insights`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1d9ac24ebca5e405", "name": "Dangling fetch: POST /api/admin/meta/campaigns/${id} (src/app/dashboard/admin/meta-ads/page.tsx:83)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/meta/campaigns/${id} (src/app/dashboard/admin/meta-ads/page.tsx:83)"}, "fullDescription": {"text": "`src/app/dashboard/admin/meta-ads/page.tsx:83` calls `POST /api/admin/meta/campaigns/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/meta/campaigns/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-52216b6befa9d954", "name": "Dangling fetch: GET /api/admin/revenue (src/app/dashboard/admin/revenue/page.tsx:86)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/revenue (src/app/dashboard/admin/revenue/page.tsx:86)"}, "fullDescription": {"text": "`src/app/dashboard/admin/revenue/page.tsx:86` calls `GET /api/admin/revenue` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/revenue`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-70127e50ff70ddbd", "name": "Dangling fetch: PUT /api/invoices (src/app/dashboard/admin/revenue/page.tsx:109)", "shortDescription": {"text": "Dangling fetch: PUT /api/invoices (src/app/dashboard/admin/revenue/page.tsx:109)"}, "fullDescription": {"text": "`src/app/dashboard/admin/revenue/page.tsx:109` calls `PUT /api/invoices` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/invoices`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa29978d506325da", "name": "Dangling fetch: GET /api/retail-templates (src/app/dashboard/retail-estimate/retail-estimate-client.tsx:115)", "shortDescription": {"text": "Dangling fetch: GET /api/retail-templates (src/app/dashboard/retail-estimate/retail-estimate-client.tsx:115)"}, "fullDescription": {"text": "`src/app/dashboard/retail-estimate/retail-estimate-client.tsx:115` calls `GET /api/retail-templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/retail-templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dbdaf20ce010c431", "name": "Dangling fetch: GET /api/retail-estimates/${existingId} (src/app/dashboard/retail-estimate/retail-estimate-client.tsx:11", "shortDescription": {"text": "Dangling fetch: GET /api/retail-estimates/${existingId} (src/app/dashboard/retail-estimate/retail-estimate-client.tsx:117)"}, "fullDescription": {"text": "`src/app/dashboard/retail-estimate/retail-estimate-client.tsx:117` calls `GET /api/retail-estimates/${existingId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/retail-estimates/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-098e8355c8526691", "name": "Dangling fetch: POST /api/retail-measurements/parse (src/app/dashboard/retail-estimate/retail-estimate-client.tsx:219)", "shortDescription": {"text": "Dangling fetch: POST /api/retail-measurements/parse (src/app/dashboard/retail-estimate/retail-estimate-client.tsx:219)"}, "fullDescription": {"text": "`src/app/dashboard/retail-estimate/retail-estimate-client.tsx:219` calls `POST /api/retail-measurements/parse` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/retail-measurements/parse`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-548dcac23cc591f9", "name": "Dangling fetch: POST /api/retail-measurements/estimate-siding (src/app/dashboard/retail-estimate/retail-estimate-client.", "shortDescription": {"text": "Dangling fetch: POST /api/retail-measurements/estimate-siding (src/app/dashboard/retail-estimate/retail-estimate-client.tsx:266)"}, "fullDescription": {"text": "`src/app/dashboard/retail-estimate/retail-estimate-client.tsx:266` calls `POST /api/retail-measurements/estimate-siding` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/retail-measurements/estimate-siding`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0ee66ad9f1c2a7f6", "name": "Dangling fetch: POST /api/retail-estimates/${idForInvoice}/invoice (src/app/dashboard/retail-estimate/retail-estimate-cl", "shortDescription": {"text": "Dangling fetch: POST /api/retail-estimates/${idForInvoice}/invoice (src/app/dashboard/retail-estimate/retail-estimate-client.tsx:320)"}, "fullDescription": {"text": "`src/app/dashboard/retail-estimate/retail-estimate-client.tsx:320` calls `POST /api/retail-estimates/${idForInvoice}/invoice` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/retail-estimates/<p>/invoice`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2eea172357b8d8ae", "name": "Dangling fetch: POST /api/retail-estimates/${idForSign}/sign-token (src/app/dashboard/retail-estimate/retail-estimate-cl", "shortDescription": {"text": "Dangling fetch: POST /api/retail-estimates/${idForSign}/sign-token (src/app/dashboard/retail-estimate/retail-estimate-client.tsx:362)"}, "fullDescription": {"text": "`src/app/dashboard/retail-estimate/retail-estimate-client.tsx:362` calls `POST /api/retail-estimates/${idForSign}/sign-token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/retail-estimates/<p>/sign-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-7198252914763d58", "name": "Dangling fetch: POST /api/retail-estimates/${idToSend}/send (src/app/dashboard/retail-estimate/retail-estimate-client.ts", "shortDescription": {"text": "Dangling fetch: POST /api/retail-estimates/${idToSend}/send (src/app/dashboard/retail-estimate/retail-estimate-client.tsx:404)"}, "fullDescription": {"text": "`src/app/dashboard/retail-estimate/retail-estimate-client.tsx:404` calls `POST /api/retail-estimates/${idToSend}/send` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/retail-estimates/<p>/send`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8d8976d02cddab58", "name": "Dangling fetch: GET /api/team-claims/claim?id=${claimId} (src/app/dashboard/claim/[id]/page.tsx:196)", "shortDescription": {"text": "Dangling fetch: GET /api/team-claims/claim?id=${claimId} (src/app/dashboard/claim/[id]/page.tsx:196)"}, "fullDescription": {"text": "`src/app/dashboard/claim/[id]/page.tsx:196` calls `GET /api/team-claims/claim?id=${claimId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/team-claims/claim`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-92ea4e838901af55", "name": "Dangling fetch: GET /api/claims/${claim.id}/esx (src/app/dashboard/claim/[id]/page.tsx:523)", "shortDescription": {"text": "Dangling fetch: GET /api/claims/${claim.id}/esx (src/app/dashboard/claim/[id]/page.tsx:523)"}, "fullDescription": {"text": "`src/app/dashboard/claim/[id]/page.tsx:523` calls `GET /api/claims/${claim.id}/esx` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claims/<p>/esx`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d30377c4443d8476", "name": "Dangling fetch: POST /api/claims/update (src/app/dashboard/claim/[id]/page.tsx:583)", "shortDescription": {"text": "Dangling fetch: POST /api/claims/update (src/app/dashboard/claim/[id]/page.tsx:583)"}, "fullDescription": {"text": "`src/app/dashboard/claim/[id]/page.tsx:583` calls `POST /api/claims/update` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claims/update`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-23a97b1f5cc6a6fd", "name": "Dangling fetch: POST /api/claim/reprocess (src/app/dashboard/claim/[id]/page.tsx:613)", "shortDescription": {"text": "Dangling fetch: POST /api/claim/reprocess (src/app/dashboard/claim/[id]/page.tsx:613)"}, "fullDescription": {"text": "`src/app/dashboard/claim/[id]/page.tsx:613` calls `POST /api/claim/reprocess` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claim/reprocess`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-436cd88e9095faad", "name": "Dangling fetch: POST /api/send-email (src/app/dashboard/claim/[id]/page.tsx:636)", "shortDescription": {"text": "Dangling fetch: POST /api/send-email (src/app/dashboard/claim/[id]/page.tsx:636)"}, "fullDescription": {"text": "`src/app/dashboard/claim/[id]/page.tsx:636` calls `POST /api/send-email` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/send-email`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6d13f20ba303a310", "name": "Dangling fetch: POST /api/claims/update (src/app/dashboard/claim/[id]/page.tsx:1031)", "shortDescription": {"text": "Dangling fetch: POST /api/claims/update (src/app/dashboard/claim/[id]/page.tsx:1031)"}, "fullDescription": {"text": "`src/app/dashboard/claim/[id]/page.tsx:1031` calls `POST /api/claims/update` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claims/update`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d8d9b06639f30117", "name": "Dangling fetch: POST /api/claim/reprocess (src/app/dashboard/claim/[id]/page.tsx:2431)", "shortDescription": {"text": "Dangling fetch: POST /api/claim/reprocess (src/app/dashboard/claim/[id]/page.tsx:2431)"}, "fullDescription": {"text": "`src/app/dashboard/claim/[id]/page.tsx:2431` calls `POST /api/claim/reprocess` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claim/reprocess`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-9e99d948752e1b20", "name": "Dangling fetch: GET /api/company-docs (src/app/dashboard/company-docs/company-docs-client.tsx:62)", "shortDescription": {"text": "Dangling fetch: GET /api/company-docs (src/app/dashboard/company-docs/company-docs-client.tsx:62)"}, "fullDescription": {"text": "`src/app/dashboard/company-docs/company-docs-client.tsx:62` calls `GET /api/company-docs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/company-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-c3b5eb3792830707", "name": "Dangling fetch: POST /api/company-docs/upload-url (src/app/dashboard/company-docs/company-docs-client.tsx:87)", "shortDescription": {"text": "Dangling fetch: POST /api/company-docs/upload-url (src/app/dashboard/company-docs/company-docs-client.tsx:87)"}, "fullDescription": {"text": "`src/app/dashboard/company-docs/company-docs-client.tsx:87` calls `POST /api/company-docs/upload-url` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/company-docs/upload-url`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fcc6bf06f8141eb6", "name": "Dangling fetch: POST /api/company-docs (src/app/dashboard/company-docs/company-docs-client.tsx:118)", "shortDescription": {"text": "Dangling fetch: POST /api/company-docs (src/app/dashboard/company-docs/company-docs-client.tsx:118)"}, "fullDescription": {"text": "`src/app/dashboard/company-docs/company-docs-client.tsx:118` calls `POST /api/company-docs` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/company-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-2366255aef75623f", "name": "Dangling fetch: DELETE /api/company-docs/${id} (src/app/dashboard/company-docs/company-docs-client.tsx:146)", "shortDescription": {"text": "Dangling fetch: DELETE /api/company-docs/${id} (src/app/dashboard/company-docs/company-docs-client.tsx:146)"}, "fullDescription": {"text": "`src/app/dashboard/company-docs/company-docs-client.tsx:146` calls `DELETE /api/company-docs/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/company-docs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3da11a67416b9d95", "name": "Dangling fetch: PATCH /api/company-docs/${id} (src/app/dashboard/company-docs/company-docs-client.tsx:160)", "shortDescription": {"text": "Dangling fetch: PATCH /api/company-docs/${id} (src/app/dashboard/company-docs/company-docs-client.tsx:160)"}, "fullDescription": {"text": "`src/app/dashboard/company-docs/company-docs-client.tsx:160` calls `PATCH /api/company-docs/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/company-docs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7d84bd7c391ab196", "name": "Dangling fetch: GET /api/company-docs/${id} (src/app/dashboard/company-docs/company-docs-client.tsx:178)", "shortDescription": {"text": "Dangling fetch: GET /api/company-docs/${id} (src/app/dashboard/company-docs/company-docs-client.tsx:178)"}, "fullDescription": {"text": "`src/app/dashboard/company-docs/company-docs-client.tsx:178` calls `GET /api/company-docs/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/company-docs/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4093029973e9bc47", "name": "Dangling fetch: GET /api/repair-review (src/app/dashboard/repair-review/repair-review-content.tsx:41)", "shortDescription": {"text": "Dangling fetch: GET /api/repair-review (src/app/dashboard/repair-review/repair-review-content.tsx:41)"}, "fullDescription": {"text": "`src/app/dashboard/repair-review/repair-review-content.tsx:41` calls `GET /api/repair-review` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/repair-review`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-adc72762fd37c71e", "name": "Dangling fetch: POST /api/repair-review (src/app/dashboard/repair-review/repair-review-content.tsx:53)", "shortDescription": {"text": "Dangling fetch: POST /api/repair-review (src/app/dashboard/repair-review/repair-review-content.tsx:53)"}, "fullDescription": {"text": "`src/app/dashboard/repair-review/repair-review-content.tsx:53` calls `POST /api/repair-review` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/repair-review`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5af020e31ddea056", "name": "Dangling fetch: GET /api/admin/email-templates (src/app/dashboard/email-templates/page.tsx:41)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/email-templates (src/app/dashboard/email-templates/page.tsx:41)"}, "fullDescription": {"text": "`src/app/dashboard/email-templates/page.tsx:41` calls `GET /api/admin/email-templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/email-templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-5a474737b70d7718", "name": "Dangling fetch: GET /api/admin/marketing-assets (src/app/dashboard/email-templates/page.tsx:42)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/marketing-assets (src/app/dashboard/email-templates/page.tsx:42)"}, "fullDescription": {"text": "`src/app/dashboard/email-templates/page.tsx:42` calls `GET /api/admin/marketing-assets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/marketing-assets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-ab448e10a179945c", "name": "Dangling fetch: POST /api/admin/email-templates (src/app/dashboard/email-templates/page.tsx:72)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/email-templates (src/app/dashboard/email-templates/page.tsx:72)"}, "fullDescription": {"text": "`src/app/dashboard/email-templates/page.tsx:72` calls `POST /api/admin/email-templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/email-templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2549900d4ab7e2a8", "name": "Dangling fetch: PATCH /api/admin/email-templates/${selected.id} (src/app/dashboard/email-templates/page.tsx:107)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/email-templates/${selected.id} (src/app/dashboard/email-templates/page.tsx:107)"}, "fullDescription": {"text": "`src/app/dashboard/email-templates/page.tsx:107` calls `PATCH /api/admin/email-templates/${selected.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/email-templates/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3df42b23fee4ca8b", "name": "Dangling fetch: DELETE /api/admin/email-templates/${selected.id} (src/app/dashboard/email-templates/page.tsx:128)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/email-templates/${selected.id} (src/app/dashboard/email-templates/page.tsx:128)"}, "fullDescription": {"text": "`src/app/dashboard/email-templates/page.tsx:128` calls `DELETE /api/admin/email-templates/${selected.id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/email-templates/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-053b396b53d7d683", "name": "Dangling fetch: POST /api/repair-checkpoint (src/app/dashboard/repair/[id]/page.tsx:134)", "shortDescription": {"text": "Dangling fetch: POST /api/repair-checkpoint (src/app/dashboard/repair/[id]/page.tsx:134)"}, "fullDescription": {"text": "`src/app/dashboard/repair/[id]/page.tsx:134` calls `POST /api/repair-checkpoint` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/repair-checkpoint`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d61f1a9235d00b66", "name": "Dangling fetch: GET /api/admin/marketing-assets (src/app/dashboard/marketing-assets/page.tsx:44)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/marketing-assets (src/app/dashboard/marketing-assets/page.tsx:44)"}, "fullDescription": {"text": "`src/app/dashboard/marketing-assets/page.tsx:44` calls `GET /api/admin/marketing-assets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/marketing-assets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-044a46d9df7f672f", "name": "Dangling fetch: POST /api/admin/marketing-assets/sign-upload (src/app/dashboard/marketing-assets/page.tsx:61)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/marketing-assets/sign-upload (src/app/dashboard/marketing-assets/page.tsx:61)"}, "fullDescription": {"text": "`src/app/dashboard/marketing-assets/page.tsx:61` calls `POST /api/admin/marketing-assets/sign-upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/marketing-assets/sign-upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-cf36f325a567ca27", "name": "Dangling fetch: POST /api/admin/marketing-assets (src/app/dashboard/marketing-assets/page.tsx:82)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/marketing-assets (src/app/dashboard/marketing-assets/page.tsx:82)"}, "fullDescription": {"text": "`src/app/dashboard/marketing-assets/page.tsx:82` calls `POST /api/admin/marketing-assets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/marketing-assets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4df088809bb4ac7e", "name": "Dangling fetch: PATCH /api/admin/marketing-assets/${id} (src/app/dashboard/marketing-assets/page.tsx:108)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/marketing-assets/${id} (src/app/dashboard/marketing-assets/page.tsx:108)"}, "fullDescription": {"text": "`src/app/dashboard/marketing-assets/page.tsx:108` calls `PATCH /api/admin/marketing-assets/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/marketing-assets/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3999ab6a3f968bfa", "name": "Dangling fetch: DELETE /api/admin/marketing-assets/${id} (src/app/dashboard/marketing-assets/page.tsx:123)", "shortDescription": {"text": "Dangling fetch: DELETE /api/admin/marketing-assets/${id} (src/app/dashboard/marketing-assets/page.tsx:123)"}, "fullDescription": {"text": "`src/app/dashboard/marketing-assets/page.tsx:123` calls `DELETE /api/admin/marketing-assets/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/marketing-assets/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-13a9be99d9082503", "name": "Dangling fetch: DELETE /api/retail-estimates/${id} (src/app/dashboard/retail-estimates/retail-estimates-list.tsx:202)", "shortDescription": {"text": "Dangling fetch: DELETE /api/retail-estimates/${id} (src/app/dashboard/retail-estimates/retail-estimates-list.tsx:202)"}, "fullDescription": {"text": "`src/app/dashboard/retail-estimates/retail-estimates-list.tsx:202` calls `DELETE /api/retail-estimates/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/retail-estimates/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-11462a70f8710e26", "name": "Dangling fetch: POST /api/claims/preflight (src/app/dashboard/quick-report/page.tsx:130)", "shortDescription": {"text": "Dangling fetch: POST /api/claims/preflight (src/app/dashboard/quick-report/page.tsx:130)"}, "fullDescription": {"text": "`src/app/dashboard/quick-report/page.tsx:130` calls `POST /api/claims/preflight` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claims/preflight`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-70876dc4c968c117", "name": "Dangling fetch: POST /api/capi-event (src/app/dashboard/quick-report/page.tsx:221)", "shortDescription": {"text": "Dangling fetch: POST /api/capi-event (src/app/dashboard/quick-report/page.tsx:221)"}, "fullDescription": {"text": "`src/app/dashboard/quick-report/page.tsx:221` calls `POST /api/capi-event` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/capi-event`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a84556918c5abf3f", "name": "Dangling fetch: POST /api/billing/acknowledge-overage (src/app/dashboard/quick-report/page.tsx:380)", "shortDescription": {"text": "Dangling fetch: POST /api/billing/acknowledge-overage (src/app/dashboard/quick-report/page.tsx:380)"}, "fullDescription": {"text": "`src/app/dashboard/quick-report/page.tsx:380` calls `POST /api/billing/acknowledge-overage` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/billing/acknowledge-overage`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-481c9e97f25feb02", "name": "Dangling fetch: GET /api/templates (src/app/dashboard/send-document/page.tsx:45)", "shortDescription": {"text": "Dangling fetch: GET /api/templates (src/app/dashboard/send-document/page.tsx:45)"}, "fullDescription": {"text": "`src/app/dashboard/send-document/page.tsx:45` calls `GET /api/templates` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/templates`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8d932275c6f38db0", "name": "Dangling fetch: POST /api/signatures (src/app/dashboard/send-document/page.tsx:78)", "shortDescription": {"text": "Dangling fetch: POST /api/signatures (src/app/dashboard/send-document/page.tsx:78)"}, "fullDescription": {"text": "`src/app/dashboard/send-document/page.tsx:78` calls `POST /api/signatures` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/signatures`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2fd5aff565af5fb9", "name": "Dangling fetch: GET /api/admin/retail${q} (src/app/dashboard/retail/page.tsx:117)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/retail${q} (src/app/dashboard/retail/page.tsx:117)"}, "fullDescription": {"text": "`src/app/dashboard/retail/page.tsx:117` calls `GET /api/admin/retail${q}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/retail/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-afe09566a1a05883", "name": "Dangling fetch: GET /api/admin/retail/${jobId} (src/app/dashboard/retail/page.tsx:399)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/retail/${jobId} (src/app/dashboard/retail/page.tsx:399)"}, "fullDescription": {"text": "`src/app/dashboard/retail/page.tsx:399` calls `GET /api/admin/retail/${jobId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/retail/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b1eddd2baf64ff55", "name": "Dangling fetch: POST /api/admin/retail/${jobId}/invoices/${invoiceId}/send (src/app/dashboard/retail/page.tsx:419)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/retail/${jobId}/invoices/${invoiceId}/send (src/app/dashboard/retail/page.tsx:419)"}, "fullDescription": {"text": "`src/app/dashboard/retail/page.tsx:419` calls `POST /api/admin/retail/${jobId}/invoices/${invoiceId}/send` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/retail/<p>/invoices/<p>/send`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-448ca167ffdc6f47", "name": "Dangling fetch: POST /api/unsubscribe (src/app/unsubscribe/unsubscribe-client.tsx:32)", "shortDescription": {"text": "Dangling fetch: POST /api/unsubscribe (src/app/unsubscribe/unsubscribe-client.tsx:32)"}, "fullDescription": {"text": "`src/app/unsubscribe/unsubscribe-client.tsx:32` calls `POST /api/unsubscribe` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/unsubscribe`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-58cbae0a171c0b6b", "name": "Dangling fetch: POST /api/signup/check-domain (src/app/signup/signup-client.tsx:65)", "shortDescription": {"text": "Dangling fetch: POST /api/signup/check-domain (src/app/signup/signup-client.tsx:65)"}, "fullDescription": {"text": "`src/app/signup/signup-client.tsx:65` calls `POST /api/signup/check-domain` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/signup/check-domain`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fa9ee72d28c26e01", "name": "Dangling fetch: POST /api/notify-signup (src/app/signup/signup-client.tsx:163)", "shortDescription": {"text": "Dangling fetch: POST /api/notify-signup (src/app/signup/signup-client.tsx:163)"}, "fullDescription": {"text": "`src/app/signup/signup-client.tsx:163` calls `POST /api/notify-signup` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/notify-signup`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b38bd78090bbc0ba", "name": "Dangling fetch: POST /api/team/accept (src/app/signup/signup-client.tsx:178)", "shortDescription": {"text": "Dangling fetch: POST /api/team/accept (src/app/signup/signup-client.tsx:178)"}, "fullDescription": {"text": "`src/app/signup/signup-client.tsx:178` calls `POST /api/team/accept` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/team/accept`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-16734993d819ba5c", "name": "Dangling fetch: POST /api/referrals/link (src/app/signup/signup-client.tsx:187)", "shortDescription": {"text": "Dangling fetch: POST /api/referrals/link (src/app/signup/signup-client.tsx:187)"}, "fullDescription": {"text": "`src/app/signup/signup-client.tsx:187` calls `POST /api/referrals/link` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/referrals/link`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c055d1f24c2a680a", "name": "Dangling fetch: POST /api/sign/${signatureId} (src/app/sign/[id]/sign-form.tsx:229)", "shortDescription": {"text": "Dangling fetch: POST /api/sign/${signatureId} (src/app/sign/[id]/sign-form.tsx:229)"}, "fullDescription": {"text": "`src/app/sign/[id]/sign-form.tsx:229` calls `POST /api/sign/${signatureId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sign/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e1054ea828b0e71e", "name": "Dangling fetch: POST /api/sign/retail/${token}/submit (src/app/sign/retail/[token]/sign-form.tsx:85)", "shortDescription": {"text": "Dangling fetch: POST /api/sign/retail/${token}/submit (src/app/sign/retail/[token]/sign-form.tsx:85)"}, "fullDescription": {"text": "`src/app/sign/retail/[token]/sign-form.tsx:85` calls `POST /api/sign/retail/${token}/submit` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/sign/retail/<p>/submit`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-037d25a567f55b9e", "name": "Dangling fetch: GET /api/admin/directory (src/app/admin/admin-dashboard.tsx:128)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/directory (src/app/admin/admin-dashboard.tsx:128)"}, "fullDescription": {"text": "`src/app/admin/admin-dashboard.tsx:128` calls `GET /api/admin/directory` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/directory`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4e85632ee3ec3762", "name": "Dangling fetch: POST /api/inspector-invite (src/app/admin/admin-dashboard.tsx:327)", "shortDescription": {"text": "Dangling fetch: POST /api/inspector-invite (src/app/admin/admin-dashboard.tsx:327)"}, "fullDescription": {"text": "`src/app/admin/admin-dashboard.tsx:327` calls `POST /api/inspector-invite` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/inspector-invite`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1a246f549c55c11d", "name": "Dangling fetch: GET /api/admin/live (src/app/admin/analytics/analytics-content.tsx:121)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/live (src/app/admin/analytics/analytics-content.tsx:121)"}, "fullDescription": {"text": "`src/app/admin/analytics/analytics-content.tsx:121` calls `GET /api/admin/live` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/live`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d9d2754881f1249f", "name": "Dangling fetch: GET /api/admin/analytics/insights (src/app/admin/analytics/analytics-content.tsx:135)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/analytics/insights (src/app/admin/analytics/analytics-content.tsx:135)"}, "fullDescription": {"text": "`src/app/admin/analytics/analytics-content.tsx:135` calls `GET /api/admin/analytics/insights` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/analytics/insights`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8141cc4ea222e6b4", "name": "Dangling fetch: GET /api/admin/leads (src/app/admin/leads/leads-client.tsx:38)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/leads (src/app/admin/leads/leads-client.tsx:38)"}, "fullDescription": {"text": "`src/app/admin/leads/leads-client.tsx:38` calls `GET /api/admin/leads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/leads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3fde7e867f43df0a", "name": "Dangling fetch: POST /api/admin/leads/reply (src/app/admin/leads/leads-client.tsx:65)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/leads/reply (src/app/admin/leads/leads-client.tsx:65)"}, "fullDescription": {"text": "`src/app/admin/leads/leads-client.tsx:65` calls `POST /api/admin/leads/reply` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/leads/reply`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-bec7ba633cd6d58f", "name": "Dangling fetch: GET /api/admin/activation (src/app/admin/activation/activation-content.tsx:47)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/activation (src/app/admin/activation/activation-content.tsx:47)"}, "fullDescription": {"text": "`src/app/admin/activation/activation-content.tsx:47` calls `GET /api/admin/activation` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/activation`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8ac8ceff7e26f1a9", "name": "Dangling fetch: GET /api/admin/paths (src/app/admin/paths/paths-monitor.tsx:38)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/paths (src/app/admin/paths/paths-monitor.tsx:38)"}, "fullDescription": {"text": "`src/app/admin/paths/paths-monitor.tsx:38` calls `GET /api/admin/paths` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/paths`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8d0e3cbc116b9222", "name": "Dangling fetch: POST /api/admin/claims-update (src/app/admin/claim/[id]/admin-claim-detail.tsx:149)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/claims-update (src/app/admin/claim/[id]/admin-claim-detail.tsx:149)"}, "fullDescription": {"text": "`src/app/admin/claim/[id]/admin-claim-detail.tsx:149` calls `POST /api/admin/claims-update` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/claims-update`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-dd56c5938abab909", "name": "Dangling fetch: POST /api/admin/delete-file (src/app/admin/claim/[id]/admin-claim-detail.tsx:175)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/delete-file (src/app/admin/claim/[id]/admin-claim-detail.tsx:175)"}, "fullDescription": {"text": "`src/app/admin/claim/[id]/admin-claim-detail.tsx:175` calls `POST /api/admin/delete-file` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/delete-file`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-97e06268de852da9", "name": "Dangling fetch: POST /api/claim/reprocess (src/app/admin/claim/[id]/admin-claim-detail.tsx:201)", "shortDescription": {"text": "Dangling fetch: POST /api/claim/reprocess (src/app/admin/claim/[id]/admin-claim-detail.tsx:201)"}, "fullDescription": {"text": "`src/app/admin/claim/[id]/admin-claim-detail.tsx:201` calls `POST /api/claim/reprocess` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claim/reprocess`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-fe8b57153315798b", "name": "Dangling fetch: PATCH /api/admin/qa-learning/${id} (src/app/admin/qa-learning/qa-learning-queue.tsx:97)", "shortDescription": {"text": "Dangling fetch: PATCH /api/admin/qa-learning/${id} (src/app/admin/qa-learning/qa-learning-queue.tsx:97)"}, "fullDescription": {"text": "`src/app/admin/qa-learning/qa-learning-queue.tsx:97` calls `PATCH /api/admin/qa-learning/${id}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/qa-learning/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-71db4afb64f8eb11", "name": "Dangling fetch: POST /api/admin/qa-review/${claimId}/release (src/app/admin/qa-review/qa-review-queue.tsx:111)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/qa-review/${claimId}/release (src/app/admin/qa-review/qa-review-queue.tsx:111)"}, "fullDescription": {"text": "`src/app/admin/qa-review/qa-review-queue.tsx:111` calls `POST /api/admin/qa-review/${claimId}/release` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/qa-review/<p>/release`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-83dbf06ca776d579", "name": "Dangling fetch: POST /api/claim/reprocess (src/app/admin/qa-review/qa-review-queue.tsx:129)", "shortDescription": {"text": "Dangling fetch: POST /api/claim/reprocess (src/app/admin/qa-review/qa-review-queue.tsx:129)"}, "fullDescription": {"text": "`src/app/admin/qa-review/qa-review-queue.tsx:129` calls `POST /api/claim/reprocess` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claim/reprocess`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7893ecf21e27c424", "name": "Dangling fetch: POST /api/admin/qa-review/${claimId}/auto-fix (src/app/admin/qa-review/qa-review-queue.tsx:156)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/qa-review/${claimId}/auto-fix (src/app/admin/qa-review/qa-review-queue.tsx:156)"}, "fullDescription": {"text": "`src/app/admin/qa-review/qa-review-queue.tsx:156` calls `POST /api/admin/qa-review/${claimId}/auto-fix` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/qa-review/<p>/auto-fix`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-54919e30b9971922", "name": "Dangling fetch: POST /api/claim/regen (src/app/admin/qa-review/qa-review-queue.tsx:456)", "shortDescription": {"text": "Dangling fetch: POST /api/claim/regen (src/app/admin/qa-review/qa-review-queue.tsx:456)"}, "fullDescription": {"text": "`src/app/admin/qa-review/qa-review-queue.tsx:456` calls `POST /api/claim/regen` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/claim/regen`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2fd24cc4b83ddc79", "name": "Dangling fetch: GET /api/admin/crm-keys${qs} (src/app/admin/api-keys/api-keys-client.tsx:53)", "shortDescription": {"text": "Dangling fetch: GET /api/admin/crm-keys${qs} (src/app/admin/api-keys/api-keys-client.tsx:53)"}, "fullDescription": {"text": "`src/app/admin/api-keys/api-keys-client.tsx:53` calls `GET /api/admin/crm-keys${qs}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/crm-keys/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4c4fa7097bd4c0db", "name": "Dangling fetch: POST /api/admin/crm-keys (src/app/admin/api-keys/api-keys-client.tsx:77)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/crm-keys (src/app/admin/api-keys/api-keys-client.tsx:77)"}, "fullDescription": {"text": "`src/app/admin/api-keys/api-keys-client.tsx:77` calls `POST /api/admin/crm-keys` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/crm-keys`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c428d21e1a07aef8", "name": "Dangling fetch: POST /api/admin/crm-keys/revoke (src/app/admin/api-keys/api-keys-client.tsx:114)", "shortDescription": {"text": "Dangling fetch: POST /api/admin/crm-keys/revoke (src/app/admin/api-keys/api-keys-client.tsx:114)"}, "fullDescription": {"text": "`src/app/admin/api-keys/api-keys-client.tsx:114` calls `POST /api/admin/crm-keys/revoke` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/crm-keys/revoke`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7ed758929115dc60", "name": "Dangling fetch: POST /api/admin/agent-recommendations/${id}/${action} (src/app/admin/agent-recommendations/recommendatio", "shortDescription": {"text": "Dangling fetch: POST /api/admin/agent-recommendations/${id}/${action} (src/app/admin/agent-recommendations/recommendations-queue.tsx:56)"}, "fullDescription": {"text": "`src/app/admin/agent-recommendations/recommendations-queue.tsx:56` calls `POST /api/admin/agent-recommendations/${id}/${action}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/admin/agent-recommendations/<p>/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a6efa834bd58fb9a", "name": "Dangling fetch: POST /api/onboarding/profile (src/app/onboarding/profile/onboarding-client.tsx:97)", "shortDescription": {"text": "Dangling fetch: POST /api/onboarding/profile (src/app/onboarding/profile/onboarding-client.tsx:97)"}, "fullDescription": {"text": "`src/app/onboarding/profile/onboarding-client.tsx:97` calls `POST /api/onboarding/profile` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/onboarding/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-734c057b3e23276d", "name": "Dangling fetch: POST /api/portal/${snapshot.token} (src/app/portal/[token]/portal-client.tsx:138)", "shortDescription": {"text": "Dangling fetch: POST /api/portal/${snapshot.token} (src/app/portal/[token]/portal-client.tsx:138)"}, "fullDescription": {"text": "`src/app/portal/[token]/portal-client.tsx:138` calls `POST /api/portal/${snapshot.token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/portal/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-74407faed8ef9a5e", "name": "Dangling fetch: POST /api/portal/${token} (src/app/portal/[token]/portal-client.tsx:363)", "shortDescription": {"text": "Dangling fetch: POST /api/portal/${token} (src/app/portal/[token]/portal-client.tsx:363)"}, "fullDescription": {"text": "`src/app/portal/[token]/portal-client.tsx:363` calls `POST /api/portal/${token}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/portal/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d13e492bd45a8498", "name": "Dangling fetch: GET /api/billing/validate-coupon?coupon=${encodeURIComponent(coupon)} (src/app/pricing/pricing-client.ts", "shortDescription": {"text": "Dangling fetch: GET /api/billing/validate-coupon?coupon=${encodeURIComponent(coupon)} (src/app/pricing/pricing-client.tsx:56)"}, "fullDescription": {"text": "`src/app/pricing/pricing-client.tsx:56` calls `GET /api/billing/validate-coupon?coupon=${encodeURIComponent(coupon)}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/billing/validate-coupon`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-8debbe12f5f727a8", "name": "Dangling fetch: POST /api/billing/create-checkout (src/app/pricing/pricing-client.tsx:98)", "shortDescription": {"text": "Dangling fetch: POST /api/billing/create-checkout (src/app/pricing/pricing-client.tsx:98)"}, "fullDescription": {"text": "`src/app/pricing/pricing-client.tsx:98` calls `POST /api/billing/create-checkout` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/billing/create-checkout`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2e58ed8b8d3222f3", "name": "Dangling fetch: POST /api/instant-intake/upload (src/app/instant/continue/instant-recover-client.tsx:53)", "shortDescription": {"text": "Dangling fetch: POST /api/instant-intake/upload (src/app/instant/continue/instant-recover-client.tsx:53)"}, "fullDescription": {"text": "`src/app/instant/continue/instant-recover-client.tsx:53` calls `POST /api/instant-intake/upload` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instant-intake/upload`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2ee4003e41ff7a9a", "name": "Dangling fetch: POST /api/instant-intake/claim (src/app/instant/continue/instant-recover-client.tsx:64)", "shortDescription": {"text": "Dangling fetch: POST /api/instant-intake/claim (src/app/instant/continue/instant-recover-client.tsx:64)"}, "fullDescription": {"text": "`src/app/instant/continue/instant-recover-client.tsx:64` calls `POST /api/instant-intake/claim` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/instant-intake/claim`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-3bedf8bfa5bb0324", "name": "Dangling fetch: POST /api/track (src/lib/track.ts:85)", "shortDescription": {"text": "Dangling fetch: POST /api/track (src/lib/track.ts:85)"}, "fullDescription": {"text": "`src/lib/track.ts:85` calls `POST /api/track` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/track`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e6a75415254a23af", "name": "Dangling fetch: GET /api/auth/token (src/lib/richard-auth.ts:28)", "shortDescription": {"text": "Dangling fetch: GET /api/auth/token (src/lib/richard-auth.ts:28)"}, "fullDescription": {"text": "`src/lib/richard-auth.ts:28` calls `GET /api/auth/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/auth/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-dabba8bb42e03158", "name": "Dangling fetch: GET /${campaignId} (src/lib/meta-ads.ts:199)", "shortDescription": {"text": "Dangling fetch: GET /${campaignId} (src/lib/meta-ads.ts:199)"}, "fullDescription": {"text": "`src/lib/meta-ads.ts:199` calls `GET /${campaignId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f61ddfdc495239b5", "name": "Dangling fetch: POST /act_${this.adAccountId}/campaigns (src/lib/meta-ads.ts:214)", "shortDescription": {"text": "Dangling fetch: POST /act_${this.adAccountId}/campaigns (src/lib/meta-ads.ts:214)"}, "fullDescription": {"text": "`src/lib/meta-ads.ts:214` calls `POST /act_${this.adAccountId}/campaigns` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/act_/<p>/campaigns`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b7aff7221e5db69a", "name": "Dangling fetch: POST /${campaignId} (src/lib/meta-ads.ts:234)", "shortDescription": {"text": "Dangling fetch: POST /${campaignId} (src/lib/meta-ads.ts:234)"}, "fullDescription": {"text": "`src/lib/meta-ads.ts:234` calls `POST /${campaignId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-7629c5df5d052828", "name": "Dangling fetch: POST /${campaignId}/copies (src/lib/meta-ads.ts:262)", "shortDescription": {"text": "Dangling fetch: POST /${campaignId}/copies (src/lib/meta-ads.ts:262)"}, "fullDescription": {"text": "`src/lib/meta-ads.ts:262` calls `POST /${campaignId}/copies` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/<p>/copies`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-1871d78cc90823b9", "name": "Dangling fetch: POST /act_${this.adAccountId}/adsets (src/lib/meta-ads.ts:332)", "shortDescription": {"text": "Dangling fetch: POST /act_${this.adAccountId}/adsets (src/lib/meta-ads.ts:332)"}, "fullDescription": {"text": "`src/lib/meta-ads.ts:332` calls `POST /act_${this.adAccountId}/adsets` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/act_/<p>/adsets`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c069a1726ae4ca7d", "name": "Dangling fetch: POST /${adSetId} (src/lib/meta-ads.ts:343)", "shortDescription": {"text": "Dangling fetch: POST /${adSetId} (src/lib/meta-ads.ts:343)"}, "fullDescription": {"text": "`src/lib/meta-ads.ts:343` calls `POST /${adSetId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-54d12012733eea96", "name": "Dangling fetch: POST /${adId} (src/lib/meta-ads.ts:376)", "shortDescription": {"text": "Dangling fetch: POST /${adId} (src/lib/meta-ads.ts:376)"}, "fullDescription": {"text": "`src/lib/meta-ads.ts:376` calls `POST /${adId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-2b0959c0094f2b62", "name": "Dangling fetch: POST /act_${this.adAccountId}/adcreatives (src/lib/meta-ads.ts:399)", "shortDescription": {"text": "Dangling fetch: POST /act_${this.adAccountId}/adcreatives (src/lib/meta-ads.ts:399)"}, "fullDescription": {"text": "`src/lib/meta-ads.ts:399` calls `POST /act_${this.adAccountId}/adcreatives` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/act_/<p>/adcreatives`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a02640bd69550f5b", "name": "Dangling fetch: POST /act_${this.adAccountId}/ads (src/lib/meta-ads.ts:416)", "shortDescription": {"text": "Dangling fetch: POST /act_${this.adAccountId}/ads (src/lib/meta-ads.ts:416)"}, "fullDescription": {"text": "`src/lib/meta-ads.ts:416` calls `POST /act_${this.adAccountId}/ads` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/act_/<p>/ads`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-200d36f4a50c1e72", "name": "Dangling fetch: GET /${adId} (src/lib/meta-ads.ts:437)", "shortDescription": {"text": "Dangling fetch: GET /${adId} (src/lib/meta-ads.ts:437)"}, "fullDescription": {"text": "`src/lib/meta-ads.ts:437` calls `GET /${adId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-39d2412304036e46", "name": "Dangling fetch: POST /act_${this.adAccountId}/adcreatives (src/lib/meta-ads.ts:457)", "shortDescription": {"text": "Dangling fetch: POST /act_${this.adAccountId}/adcreatives (src/lib/meta-ads.ts:457)"}, "fullDescription": {"text": "`src/lib/meta-ads.ts:457` calls `POST /act_${this.adAccountId}/adcreatives` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/act_/<p>/adcreatives`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-733341fb5fcdf68d", "name": "Dangling fetch: POST /${adId} (src/lib/meta-ads.ts:466)", "shortDescription": {"text": "Dangling fetch: POST /${adId} (src/lib/meta-ads.ts:466)"}, "fullDescription": {"text": "`src/lib/meta-ads.ts:466` calls `POST /${adId}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-6acb726ce52800c5", "name": "Dangling fetch: POST /act_${this.adAccountId}/customaudiences (src/lib/meta-ads.ts:601)", "shortDescription": {"text": "Dangling fetch: POST /act_${this.adAccountId}/customaudiences (src/lib/meta-ads.ts:601)"}, "fullDescription": {"text": "`src/lib/meta-ads.ts:601` calls `POST /act_${this.adAccountId}/customaudiences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/act_/<p>/customaudiences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c3db6590e09f039c", "name": "Dangling fetch: POST /${audience.id}/users (src/lib/meta-ads.ts:615)", "shortDescription": {"text": "Dangling fetch: POST /${audience.id}/users (src/lib/meta-ads.ts:615)"}, "fullDescription": {"text": "`src/lib/meta-ads.ts:615` calls `POST /${audience.id}/users` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/<p>/users`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d112644144efe68d", "name": "Dangling fetch: POST /act_${this.adAccountId}/customaudiences (src/lib/meta-ads.ts:639)", "shortDescription": {"text": "Dangling fetch: POST /act_${this.adAccountId}/customaudiences (src/lib/meta-ads.ts:639)"}, "fullDescription": {"text": "`src/lib/meta-ads.ts:639` calls `POST /act_${this.adAccountId}/customaudiences` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: helper:request\nNormalized path used for matching: `/act_/<p>/customaudiences`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-4621c6fe7bbb357e", "name": "Dangling fetch: POST https://graph.facebook.com/${API_VERSION}/${PIXEL_ID}/events?access_token=${ACCESS_TOKEN} (src/lib/", "shortDescription": {"text": "Dangling fetch: POST https://graph.facebook.com/${API_VERSION}/${PIXEL_ID}/events?access_token=${ACCESS_TOKEN} (src/lib/meta-capi.ts:65)"}, "fullDescription": {"text": "`src/lib/meta-capi.ts:65` calls `POST https://graph.facebook.com/${API_VERSION}/${PIXEL_ID}/events?access_token=${ACCESS_TOKEN}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/graph.facebook.com/<p>/<p>/events`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-43c9f981aa23f934", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/lib/analytics/ga4-paths.ts:29)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/lib/analytics/ga4-paths.ts:29)"}, "fullDescription": {"text": "`src/lib/analytics/ga4-paths.ts:29` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-45d646d092ce43ef", "name": "Dangling fetch: POST https://analyticsdata.googleapis.com/v1beta/properties/${propertyId}:${method} (src/lib/analytics/g", "shortDescription": {"text": "Dangling fetch: POST https://analyticsdata.googleapis.com/v1beta/properties/${propertyId}:${method} (src/lib/analytics/ga4-paths.ts:74)"}, "fullDescription": {"text": "`src/lib/analytics/ga4-paths.ts:74` calls `POST https://analyticsdata.googleapis.com/v1beta/properties/${propertyId}:${method}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/analyticsdata.googleapis.com/v1beta/properties/<p>:/<p>`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d6ae149b55bc2ba4", "name": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/lib/funnel-monitor/ai-insight.ts:74)", "shortDescription": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/lib/funnel-monitor/ai-insight.ts:74)"}, "fullDescription": {"text": "`src/lib/funnel-monitor/ai-insight.ts:74` calls `POST https://api.anthropic.com/v1/messages` 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.anthropic.com/v1/messages`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b3f0af758b4a9e71", "name": "Dangling fetch: GET https://api.vercel.com/v1/web-analytics/views?${params.toString()} (src/lib/funnel-monitor/sources/v", "shortDescription": {"text": "Dangling fetch: GET https://api.vercel.com/v1/web-analytics/views?${params.toString()} (src/lib/funnel-monitor/sources/vercel-analytics.ts:45)"}, "fullDescription": {"text": "`src/lib/funnel-monitor/sources/vercel-analytics.ts:45` calls `GET https://api.vercel.com/v1/web-analytics/views?${params.toString()}` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.vercel.com/v1/web-analytics/views`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e2b278e8bbe6206e", "name": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/lib/funnel-monitor/sources/ga4.ts:51)", "shortDescription": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/lib/funnel-monitor/sources/ga4.ts:51)"}, "fullDescription": {"text": "`src/lib/funnel-monitor/sources/ga4.ts:51` calls `POST https://oauth2.googleapis.com/token` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/oauth2.googleapis.com/token`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-a43733b89f33e8ad", "name": "Dangling fetch: GET https://api.resend.com/emails?limit=100 (src/lib/funnel-monitor/sources/resend.ts:18)", "shortDescription": {"text": "Dangling fetch: GET https://api.resend.com/emails?limit=100 (src/lib/funnel-monitor/sources/resend.ts:18)"}, "fullDescription": {"text": "`src/lib/funnel-monitor/sources/resend.ts:18` calls `GET https://api.resend.com/emails?limit=100` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/https:/api.resend.com/emails`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-40a1eabc4b06bd8e", "name": "Dangling fetch: GET /api/billing/check-quota (src/hooks/use-billing-quota.ts:10)", "shortDescription": {"text": "Dangling fetch: GET /api/billing/check-quota (src/hooks/use-billing-quota.ts:10)"}, "fullDescription": {"text": "`src/hooks/use-billing-quota.ts:10` calls `GET /api/billing/check-quota` but no backend route matches that path. This is a runtime 404 waiting to happen.\n\nTool: fetch\nNormalized path used for matching: `/billing/check-quota`\nIf this points at an external API, prefix it with `https://` so the matcher skips it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "high", "confidence": 1.0}}, {"id": "scanner-c1e1ee09590b0a49", "name": "Unused endpoint: GET /projects", "shortDescription": {"text": "Unused endpoint: GET /projects"}, "fullDescription": {"text": "`services/xactimate-worker/main.py` declares `GET /projects` 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-f3f3b97255ab7924", "name": "Unused endpoint: GET /pricelist/{code}/export", "shortDescription": {"text": "Unused endpoint: GET /pricelist/{code}/export"}, "fullDescription": {"text": "`services/xactimate-worker/main.py` declares `GET /pricelist/{code}/export` 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-5752f5963e57ba22", "name": "Unused endpoint: POST /pricelist/{code}/clone", "shortDescription": {"text": "Unused endpoint: POST /pricelist/{code}/clone"}, "fullDescription": {"text": "`services/xactimate-worker/main.py` declares `POST /pricelist/{code}/clone` 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-42982843ebf55d34", "name": "Unused endpoint: GET /token/status", "shortDescription": {"text": "Unused endpoint: GET /token/status"}, "fullDescription": {"text": "`services/xactimate-worker/main.py` declares `GET /token/status` 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-0c2cfd73ef2e3487", "name": "Unused endpoint: GET /pricing", "shortDescription": {"text": "Unused endpoint: GET /pricing"}, "fullDescription": {"text": "`backend/public_richard.py` declares `GET /pricing` 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-72982445b2bb2354", "name": "Unused endpoint: POST /process-claim", "shortDescription": {"text": "Unused endpoint: POST /process-claim"}, "fullDescription": {"text": "`backend/public_richard.py` declares `POST /process-claim` 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-4de977927457f6d3", "name": "Unused endpoint: POST /draft-supplement", "shortDescription": {"text": "Unused endpoint: POST /draft-supplement"}, "fullDescription": {"text": "`backend/public_richard.py` declares `POST /draft-supplement` 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-d3eaacdbdba88007", "name": "Unused endpoint: POST /annotate-photo", "shortDescription": {"text": "Unused endpoint: POST /annotate-photo"}, "fullDescription": {"text": "`backend/public_richard.py` declares `POST /annotate-photo` 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-cd3484e3a195dcf9", "name": "Unused endpoint: GET /job/{job_id}", "shortDescription": {"text": "Unused endpoint: GET /job/{job_id}"}, "fullDescription": {"text": "`backend/public_richard.py` declares `GET /job/{job_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-21d4e3431aa9b5dc", "name": "Unused endpoint: POST /parse", "shortDescription": {"text": "Unused endpoint: POST /parse"}, "fullDescription": {"text": "`backend/retail_router.py` declares `POST /parse` 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-c0a1c60fe1f40dcb", "name": "Unused endpoint: POST /estimate-siding", "shortDescription": {"text": "Unused endpoint: POST /estimate-siding"}, "fullDescription": {"text": "`backend/retail_router.py` declares `POST /estimate-siding` 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-2a80ba5dfaf44b1f", "name": "Unused endpoint: POST /claims", "shortDescription": {"text": "Unused endpoint: POST /claims"}, "fullDescription": {"text": "`backend/crm_api.py` declares `POST /claims` 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-b1660e14dd34a5d6", "name": "Unused endpoint: GET /claims/{claim_id}", "shortDescription": {"text": "Unused endpoint: GET /claims/{claim_id}"}, "fullDescription": {"text": "`backend/crm_api.py` declares `GET /claims/{claim_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-3d8851d02537151d", "name": "Unused endpoint: POST /sms", "shortDescription": {"text": "Unused endpoint: POST /sms"}, "fullDescription": {"text": "`backend/remote_richard.py` declares `POST /sms` 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-626922a75134a420", "name": "Unused endpoint: POST /whatsapp", "shortDescription": {"text": "Unused endpoint: POST /whatsapp"}, "fullDescription": {"text": "`backend/remote_richard.py` declares `POST /whatsapp` 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-b0c737301aa8b493", "name": "Unused endpoint: POST /email", "shortDescription": {"text": "Unused endpoint: POST /email"}, "fullDescription": {"text": "`backend/remote_richard.py` declares `POST /email` 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-d4cab17a0ca8a24c", "name": "Unused endpoint: POST /api/upload-link/{token}/files", "shortDescription": {"text": "Unused endpoint: POST /api/upload-link/{token}/files"}, "fullDescription": {"text": "`backend/upload_link.py` declares `POST /api/upload-link/{token}/files` 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-6a4f7911bcf9aca9", "name": "Unused endpoint: POST /api/internal/poll-email-intake", "shortDescription": {"text": "Unused endpoint: POST /api/internal/poll-email-intake"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/internal/poll-email-intake` 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-3a22c0f4ca76bffa", "name": "Unused endpoint: POST /api/internal/sweep-pending-correspondence", "shortDescription": {"text": "Unused endpoint: POST /api/internal/sweep-pending-correspondence"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/internal/sweep-pending-correspondence` 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-f874c1a75bd3e352", "name": "Unused endpoint: GET /api/debug/profile/{user_id}", "shortDescription": {"text": "Unused endpoint: GET /api/debug/profile/{user_id}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/debug/profile/{user_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-5be9951e25207ebe", "name": "Unused endpoint: POST /api/reprocess/{claim_id}", "shortDescription": {"text": "Unused endpoint: POST /api/reprocess/{claim_id}"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/reprocess/{claim_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-2e31fa78bdc899aa", "name": "Unused endpoint: POST /api/regen/{claim_id}", "shortDescription": {"text": "Unused endpoint: POST /api/regen/{claim_id}"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/regen/{claim_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-2bdb460cbeabb108", "name": "Unused endpoint: POST /api/qa/auto-fix/{claim_id}", "shortDescription": {"text": "Unused endpoint: POST /api/qa/auto-fix/{claim_id}"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/qa/auto-fix/{claim_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-223226c263fb5a3d", "name": "Unused endpoint: POST /api/process/{claim_id}", "shortDescription": {"text": "Unused endpoint: POST /api/process/{claim_id}"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/process/{claim_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-1b8e5a834e7726ff", "name": "Unused endpoint: POST /api/process-repair/{repair_id}", "shortDescription": {"text": "Unused endpoint: POST /api/process-repair/{repair_id}"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/process-repair/{repair_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-cdbd1ba0ff18189e", "name": "Unused endpoint: POST /api/reprocess-repair/{repair_id}", "shortDescription": {"text": "Unused endpoint: POST /api/reprocess-repair/{repair_id}"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/reprocess-repair/{repair_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-cff4080a39d0f377", "name": "Unused endpoint: GET /api/repair/{repair_id}/checkpoints", "shortDescription": {"text": "Unused endpoint: GET /api/repair/{repair_id}/checkpoints"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/repair/{repair_id}/checkpoints` 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-c2bf728eb5d0e6d3", "name": "Unused endpoint: POST /api/repair/{repair_id}/checkpoint/{cp_id}/submit", "shortDescription": {"text": "Unused endpoint: POST /api/repair/{repair_id}/checkpoint/{cp_id}/submit"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/repair/{repair_id}/checkpoint/{cp_id}/submit` but no frontend code we scanned calls it. This is fine if the endpoint serves external clients (mobile app, third-party, server-side webhooks). Otherwise it's dead code \u2014 consider removing or documenting who consumes it."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "low", "confidence": 1.0}}, {"id": "scanner-212c08b3b67e91e1", "name": "Unused endpoint: POST /api/repair/{repair_id}/checkpoint/{cp_id}/skip", "shortDescription": {"text": "Unused endpoint: POST /api/repair/{repair_id}/checkpoint/{cp_id}/skip"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/repair/{repair_id}/checkpoint/{cp_id}/skip` 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-4ff2107180938c19", "name": "Unused endpoint: POST /api/cadence/send-one", "shortDescription": {"text": "Unused endpoint: POST /api/cadence/send-one"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/cadence/send-one` 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-96f6e741a4d1c45a", "name": "Unused endpoint: GET /api/analytics/overview", "shortDescription": {"text": "Unused endpoint: GET /api/analytics/overview"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/analytics/overview` 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-9c68bdc7caa48110", "name": "Unused endpoint: GET /api/analytics/processing-costs", "shortDescription": {"text": "Unused endpoint: GET /api/analytics/processing-costs"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/analytics/processing-costs` 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-4e0ff41e3d81dfdc", "name": "Unused endpoint: GET /api/analytics/pricing", "shortDescription": {"text": "Unused endpoint: GET /api/analytics/pricing"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/analytics/pricing` 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-9a887aba395a7b91", "name": "Unused endpoint: GET /api/analytics/photos", "shortDescription": {"text": "Unused endpoint: GET /api/analytics/photos"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/analytics/photos` 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-a402bd519e57eb8b", "name": "Unused endpoint: GET /api/analytics/predict", "shortDescription": {"text": "Unused endpoint: GET /api/analytics/predict"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/analytics/predict` 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-12273e5c7c0bb279", "name": "Unused endpoint: GET /api/intelligence/carriers", "shortDescription": {"text": "Unused endpoint: GET /api/intelligence/carriers"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/intelligence/carriers` 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-933da45dd07a25bd", "name": "Unused endpoint: GET /api/intelligence/carrier/{carrier_name}", "shortDescription": {"text": "Unused endpoint: GET /api/intelligence/carrier/{carrier_name}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/intelligence/carrier/{carrier_name}` 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-cf5c7308fcc7ff98", "name": "Unused endpoint: GET /api/intelligence/arguments/{carrier_name}", "shortDescription": {"text": "Unused endpoint: GET /api/intelligence/arguments/{carrier_name}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/intelligence/arguments/{carrier_name}` 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-f5e59ea9393dfb1d", "name": "Unused endpoint: GET /api/intelligence/suggest/{carrier_name}", "shortDescription": {"text": "Unused endpoint: GET /api/intelligence/suggest/{carrier_name}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/intelligence/suggest/{carrier_name}` 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-a8105f73401e28a2", "name": "Unused endpoint: POST /api/noaa-scan", "shortDescription": {"text": "Unused endpoint: POST /api/noaa-scan"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/noaa-scan` 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-575a6745c6d05455", "name": "Unused endpoint: POST /api/analyze-correspondence/{correspondence_id}", "shortDescription": {"text": "Unused endpoint: POST /api/analyze-correspondence/{correspondence_id}"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/analyze-correspondence/{correspondence_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-2625c6e9c7559706", "name": "Unused endpoint: GET /api/correspondence/{claim_id}", "shortDescription": {"text": "Unused endpoint: GET /api/correspondence/{claim_id}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/correspondence/{claim_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-2033ba2d1a0a71ac", "name": "Unused endpoint: GET /api/correspondence", "shortDescription": {"text": "Unused endpoint: GET /api/correspondence"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/correspondence` 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-36b5c9bab8e123d4", "name": "Unused endpoint: GET /api/drafts/{claim_id}", "shortDescription": {"text": "Unused endpoint: GET /api/drafts/{claim_id}"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/drafts/{claim_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-dcb1fd52fe460c11", "name": "Unused endpoint: PUT /api/drafts/{draft_id}", "shortDescription": {"text": "Unused endpoint: PUT /api/drafts/{draft_id}"}, "fullDescription": {"text": "`backend/main.py` declares `PUT /api/drafts/{draft_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-34fa2446e65c50bd", "name": "Unused endpoint: POST /api/drafts/{draft_id}/send", "shortDescription": {"text": "Unused endpoint: POST /api/drafts/{draft_id}/send"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/drafts/{draft_id}/send` 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-1315c86e012558ab", "name": "Unused endpoint: POST /api/drafts/{draft_id}/regenerate", "shortDescription": {"text": "Unused endpoint: POST /api/drafts/{draft_id}/regenerate"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/drafts/{draft_id}/regenerate` 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-5d499401deab8efe", "name": "Unused endpoint: POST /api/correspondence/{correspondence_id}/match", "shortDescription": {"text": "Unused endpoint: POST /api/correspondence/{correspondence_id}/match"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/correspondence/{correspondence_id}/match` 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-0f16836bb48d0b5d", "name": "Unused endpoint: GET /api/forwarders", "shortDescription": {"text": "Unused endpoint: GET /api/forwarders"}, "fullDescription": {"text": "`backend/main.py` declares `GET /api/forwarders` 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-1343254eb3ff1f39", "name": "Unused endpoint: POST /api/forwarders", "shortDescription": {"text": "Unused endpoint: POST /api/forwarders"}, "fullDescription": {"text": "`backend/main.py` declares `POST /api/forwarders` 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/21384"}, "properties": {"repository": "tkovack10/dumbroof-web", "repoUrl": "https://github.com/tkovack10/dumbroof-web", "branch": "main"}, "results": [{"ruleId": "scanner-2d82cf86d46c4d95", "level": "note", "message": {"text": "Possibly dead Python function: is_image_file"}, "properties": {"repobilityId": "cc513f1bc4de623b", "scanner": "scanner-primary", "fingerprint": "2d82cf86d46c4d95", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/photo_utils.py:50"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-956cd053716d958d", "level": "note", "message": {"text": "Possibly dead Python function: is_container_file"}, "properties": {"repobilityId": "86ad12d7074334bb", "scanner": "scanner-primary", "fingerprint": "956cd053716d958d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/photo_utils.py:56"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1341177fc3403f13", "level": "note", "message": {"text": "Possibly dead Python function: resize_photo"}, "properties": {"repobilityId": "4df68970e7d5f80a", "scanner": "scanner-primary", "fingerprint": "1341177fc3403f13", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/photo_utils.py:119"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-27525f2e232e65f2", "level": "note", "message": {"text": "Possibly dead Python function: bulk_log_claim_events"}, "properties": {"repobilityId": "ed5b3ae78cbc3142", "scanner": "scanner-primary", "fingerprint": "27525f2e232e65f2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/claim_events.py:192"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-68f7ccc0098bdeca", "level": "note", "message": {"text": "Possibly dead Python function: parse_residential"}, "properties": {"repobilityId": "a4ba792570f678ce", "scanner": "scanner-primary", "fingerprint": "68f7ccc0098bdeca", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/leadgen_ingest.py:70"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7099b5539b025cf9", "level": "note", "message": {"text": "Possibly dead Python function: parse_commercial"}, "properties": {"repobilityId": "b186e64126e7d1f8", "scanner": "scanner-primary", "fingerprint": "7099b5539b025cf9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/leadgen_ingest.py:99"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-295d4d7770ae2034", "level": "note", "message": {"text": "Possibly dead Python function: model_for"}, "properties": {"repobilityId": "7acdc6131ce1b482", "scanner": "scanner-primary", "fingerprint": "295d4d7770ae2034", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/model_config.py:98"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-47e5c8ed8883b202", "level": "note", "message": {"text": "Possibly dead Python function: decorator"}, "properties": {"repobilityId": "ffbcbc9bc189af1c", "scanner": "scanner-primary", "fingerprint": "47e5c8ed8883b202", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/pdf_templates.py:143"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-323e812680de574e", "level": "note", "message": {"text": "Possibly dead Python function: detect_price_deviations"}, "properties": {"repobilityId": "4a78fcc41da39940", "scanner": "scanner-primary", "fingerprint": "323e812680de574e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/analytics.py:101"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-bb2346d82d57c8a1", "level": "note", "message": {"text": "Possibly dead Python function: lookup_by_code"}, "properties": {"repobilityId": "f5c949459130d597", "scanner": "scanner-primary", "fingerprint": "bb2346d82d57c8a1", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/xactimate_lookup.py:870"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4510c0a716f47bff", "level": "note", "message": {"text": "Possibly dead Python function: match_by_code"}, "properties": {"repobilityId": "b69ebcbe5dbefe62", "scanner": "scanner-primary", "fingerprint": "4510c0a716f47bff", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/xactimate_lookup.py:1186"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-57c300892214e5ff", "level": "note", "message": {"text": "Possibly dead Python function: match_carrier_to_usarm"}, "properties": {"repobilityId": "e2cbbb25ec32bdb3", "scanner": "scanner-primary", "fingerprint": "57c300892214e5ff", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/xactimate_lookup.py:1256"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c0db824eef8f78c7", "level": "note", "message": {"text": "Possibly dead Python function: find_missing_items"}, "properties": {"repobilityId": "e59ecc2d4d4426dd", "scanner": "scanner-primary", "fingerprint": "c0db824eef8f78c7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/xactimate_lookup.py:2112"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-42cde1be10185ff0", "level": "note", "message": {"text": "Possibly dead Python function: ws5_owner_label"}, "properties": {"repobilityId": "a0941ac9fd362bc3", "scanner": "scanner-primary", "fingerprint": "42cde1be10185ff0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/usarm_pdf_generator.py:119"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1ecbedc60ee21966", "level": "note", "message": {"text": "Possibly dead Python function: trim_conversation"}, "properties": {"repobilityId": "5ea20a5c7b14ffd7", "scanner": "scanner-primary", "fingerprint": "1ecbedc60ee21966", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/chat_storage.py:114"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-85216f802c2f1a4c", "level": "note", "message": {"text": "Possibly dead Python function: extract_measurements"}, "properties": {"repobilityId": "ef084461a6b73bef", "scanner": "scanner-primary", "fingerprint": "85216f802c2f1a4c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/processor.py:1681"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a538e32b9bf4b5c8", "level": "note", "message": {"text": "Possibly dead Python function: extract_roof_facets"}, "properties": {"repobilityId": "1d2204b934a3d752", "scanner": "scanner-primary", "fingerprint": "a538e32b9bf4b5c8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/processor.py:1972"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-cd419ba73ec4f2a2", "level": "note", "message": {"text": "Possibly dead Python function: analyze_photos"}, "properties": {"repobilityId": "628f4463dfdcb5b8", "scanner": "scanner-primary", "fingerprint": "cd419ba73ec4f2a2", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/processor.py:2103"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-0c3ed93caa6df354", "level": "note", "message": {"text": "Possibly dead Python function: analyze_photo_integrity"}, "properties": {"repobilityId": "d951b07a6dfcee1b", "scanner": "scanner-primary", "fingerprint": "0c3ed93caa6df354", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/processor.py:2661"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1a2021c62bb1efad", "level": "note", "message": {"text": "Possibly dead Python function: extract_scope_chain"}, "properties": {"repobilityId": "a2ceba36ceddc719", "scanner": "scanner-primary", "fingerprint": "1a2021c62bb1efad", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/processor.py:3316"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-41ab5791d6e61134", "level": "note", "message": {"text": "Possibly dead Python function: extract_weather_data"}, "properties": {"repobilityId": "979512ca88ff59f8", "scanner": "scanner-primary", "fingerprint": "41ab5791d6e61134", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/processor.py:3432"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e69b780863e18131", "level": "note", "message": {"text": "Possibly dead Python function: sort_key"}, "properties": {"repobilityId": "ac2a4181eae38738", "scanner": "scanner-primary", "fingerprint": "e69b780863e18131", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/processor.py:7144"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-da7d9ffce3b5d1dc", "level": "note", "message": {"text": "Possibly dead Python function: load_reference_file"}, "properties": {"repobilityId": "24e5fc88c9470e2b", "scanner": "scanner-primary", "fingerprint": "da7d9ffce3b5d1dc", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/processor.py:7356"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4dbc1ce82e0afe03", "level": "note", "message": {"text": "Possibly dead Python function: build_supplement_invoice"}, "properties": {"repobilityId": "147a0efef277a67d", "scanner": "scanner-primary", "fingerprint": "4dbc1ce82e0afe03", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/supplement_invoice.py:501"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a9930598c446ec5d", "level": "note", "message": {"text": "Possibly dead Python function: audit_and_remediate"}, "properties": {"repobilityId": "561eaba0b2e897b4", "scanner": "scanner-primary", "fingerprint": "a9930598c446ec5d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/qa_auditor.py:2388"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1b322c0a55981018", "level": "note", "message": {"text": "Possibly dead Python function: format_audit_for_email"}, "properties": {"repobilityId": "4e6fc00628be37a8", "scanner": "scanner-primary", "fingerprint": "1b322c0a55981018", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/qa_auditor.py:2500"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-68a72c5f9dcadc0f", "level": "note", "message": {"text": "Possibly dead Python function: format_date_human"}, "properties": {"repobilityId": "6421788da3ca78ba", "scanner": "scanner-primary", "fingerprint": "68a72c5f9dcadc0f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/date_utils.py:6"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6b303d108da5cce5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/seed-usarm-aob.ts:39"}, "properties": {"repobilityId": "c419c7a64a81eb12", "scanner": "scanner-primary", "fingerprint": "6b303d108da5cce5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ea6be2f892a791cc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/email-worker/src/index.ts:53"}, "properties": {"repobilityId": "b6002a0d91202e41", "scanner": "scanner-primary", "fingerprint": "ea6be2f892a791cc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c7525b9c6019a3f3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 cloudflare/claims-intake-worker/src/index.ts:27"}, "properties": {"repobilityId": "59e048b44700ec75", "scanner": "scanner-primary", "fingerprint": "c7525b9c6019a3f3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8ab69b8d07e4df04", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 supabase/functions/email-ingest/index.ts:103"}, "properties": {"repobilityId": "48aab12c7fc88428", "scanner": "scanner-primary", "fingerprint": "8ab69b8d07e4df04", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7cd2c71f0f0145a8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/claim-lifecycle-bar.tsx:195"}, "properties": {"repobilityId": "5e79cbb0544370b6", "scanner": "scanner-primary", "fingerprint": "7cd2c71f0f0145a8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b41b596ef8f088c4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/onboarding-chat.tsx:332"}, "properties": {"repobilityId": "1a4d58fd6bce89c0", "scanner": "scanner-primary", "fingerprint": "b41b596ef8f088c4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f368abc8a7c27ea7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/invoice-builder.tsx:420"}, "properties": {"repobilityId": "eb8b0c98df8467e2", "scanner": "scanner-primary", "fingerprint": "f368abc8a7c27ea7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d678f5d49a8b67be", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/rep-action-center.tsx:242"}, "properties": {"repobilityId": "fb748cf9c4c3a13f", "scanner": "scanner-primary", "fingerprint": "d678f5d49a8b67be", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5e9c4b11146ff848", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/job-pnl-card.tsx:206"}, "properties": {"repobilityId": "73a4f72a4bad9bf4", "scanner": "scanner-primary", "fingerprint": "5e9c4b11146ff848", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e2ebce5eaaea7fd7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/production-trades-card.tsx:118"}, "properties": {"repobilityId": "89191ca9ee8f844e", "scanner": "scanner-primary", "fingerprint": "e2ebce5eaaea7fd7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a76f524d4b35b212", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/homeowner-engagement-card.tsx:310"}, "properties": {"repobilityId": "743295a9a499f80d", "scanner": "scanner-primary", "fingerprint": "a76f524d4b35b212", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-46fa2acb7b9685d8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/unlinked-installs-list.tsx:193"}, "properties": {"repobilityId": "be985485809383a6", "scanner": "scanner-primary", "fingerprint": "46fa2acb7b9685d8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ce42e2214302a0f2", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/markdown-content.tsx:8"}, "properties": {"repobilityId": "cdd6cfcea65a8d1e", "scanner": "scanner-primary", "fingerprint": "ce42e2214302a0f2", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-270125e0d2183e26", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/whats-next-hero.tsx:160"}, "properties": {"repobilityId": "d534d3780aa7b01c", "scanner": "scanner-primary", "fingerprint": "270125e0d2183e26", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-25cb6de49eb57843", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin-brain-chat.tsx:623"}, "properties": {"repobilityId": "204ad964d4d3348b", "scanner": "scanner-primary", "fingerprint": "25cb6de49eb57843", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1697b6bac254c644", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/agentic-drop-zone.tsx:335"}, "properties": {"repobilityId": "4ce0a671ca8d02ca", "scanner": "scanner-primary", "fingerprint": "1697b6bac254c644", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0079eafd83b01a23", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin-right-rail.tsx:214"}, "properties": {"repobilityId": "8bc6e87ef299cb6d", "scanner": "scanner-primary", "fingerprint": "0079eafd83b01a23", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-43a9f82b231b4e7e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/close-out-list.tsx:226"}, "properties": {"repobilityId": "4e6928c11db05190", "scanner": "scanner-primary", "fingerprint": "43a9f82b231b4e7e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-880b60eb0effc719", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/workorder-card.tsx:179"}, "properties": {"repobilityId": "f32a6f6131076565", "scanner": "scanner-primary", "fingerprint": "880b60eb0effc719", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-99502a6a4b0b0bfe", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/install-supplement-builder.tsx:728"}, "properties": {"repobilityId": "641b48025ae911dc", "scanner": "scanner-primary", "fingerprint": "99502a6a4b0b0bfe", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6f720fc27a6be4df", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/production-calendar.tsx:295"}, "properties": {"repobilityId": "547314c654f3ee6b", "scanner": "scanner-primary", "fingerprint": "6f720fc27a6be4df", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-156c8c3a52666eed", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/contact-registry-card.tsx:182"}, "properties": {"repobilityId": "9e8da3dbaccf9df4", "scanner": "scanner-primary", "fingerprint": "156c8c3a52666eed", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-34dce73ada2e396c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/claim-row-action.tsx:103"}, "properties": {"repobilityId": "75f41b2cb4fba96b", "scanner": "scanner-primary", "fingerprint": "34dce73ada2e396c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-da84dae7e9d3131f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/schedule-claim-modal.tsx:382"}, "properties": {"repobilityId": "b2eef5f7f40feb3a", "scanner": "scanner-primary", "fingerprint": "da84dae7e9d3131f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-89b8016389a81f44", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/communication-log.tsx:117"}, "properties": {"repobilityId": "d406ca77aafc80ec", "scanner": "scanner-primary", "fingerprint": "89b8016389a81f44", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ec27322ef46e6d24", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/communication-log.tsx:141"}, "properties": {"repobilityId": "5de964fbce23ba9e", "scanner": "scanner-primary", "fingerprint": "ec27322ef46e6d24", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-dc31b2f25be4e548", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/claim-picker.tsx:65"}, "properties": {"repobilityId": "cdf2673250d2fb4e", "scanner": "scanner-primary", "fingerprint": "dc31b2f25be4e548", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b7ddde23bc04228e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/file-upload-zone.tsx:169"}, "properties": {"repobilityId": "0a25f4264eb979e5", "scanner": "scanner-primary", "fingerprint": "b7ddde23bc04228e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-68d8b3fdb6ed2489", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/admin-referral-loop-panel.tsx:209"}, "properties": {"repobilityId": "dd147aa8bdc461d5", "scanner": "scanner-primary", "fingerprint": "68d8b3fdb6ed2489", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7771135f00d44f04", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/claim-brain-chat.tsx:369"}, "properties": {"repobilityId": "a71284857ac8a02e", "scanner": "scanner-primary", "fingerprint": "7771135f00d44f04", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dfd6d526b86f9560", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/claim-brain-chat.tsx:920"}, "properties": {"repobilityId": "8122d20fcd4000b5", "scanner": "scanner-primary", "fingerprint": "dfd6d526b86f9560", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-fe65485adedb2ce1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/uploaded-documents.tsx:219"}, "properties": {"repobilityId": "0ba7c5d53a484dfb", "scanner": "scanner-primary", "fingerprint": "fe65485adedb2ce1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fc6b355cf4a8bb4a", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/json-ld.tsx:9"}, "properties": {"repobilityId": "a0a0d37f8caa6f14", "scanner": "scanner-primary", "fingerprint": "fc6b355cf4a8bb4a", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-86a70a72f2bb1e13", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/scope-comparison.tsx:211"}, "properties": {"repobilityId": "916591810ab1afd1", "scanner": "scanner-primary", "fingerprint": "86a70a72f2bb1e13", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-40e33537522e9a71", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/roof-photo-map.tsx:503"}, "properties": {"repobilityId": "d664f3e739492525", "scanner": "scanner-primary", "fingerprint": "40e33537522e9a71", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d4065b3dcd257e59", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/claim-detail/communications-center.tsx:299"}, "properties": {"repobilityId": "ab122a073961da73", "scanner": "scanner-primary", "fingerprint": "d4065b3dcd257e59", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d3f58f280ca26cc2", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 src/components/claim-detail/communications-center.tsx:532"}, "properties": {"repobilityId": "10dba28f3e6a15fa", "scanner": "scanner-primary", "fingerprint": "d3f58f280ca26cc2", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-dc13abb6d71653be", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/components/claim-detail/v2/highlights-panel.tsx:65"}, "properties": {"repobilityId": "70f7edc7c53f2df7", "scanner": "scanner-primary", "fingerprint": "dc13abb6d71653be", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-b22d1d8ca79a22b3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/team/accept/route.ts:124"}, "properties": {"repobilityId": "e52e661dcfb8fb43", "scanner": "scanner-primary", "fingerprint": "b22d1d8ca79a22b3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ed214433a01295a2", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 src/app/api/scope-comparison/route.ts:91"}, "properties": {"repobilityId": "78c6f46c78125427", "scanner": "scanner-primary", "fingerprint": "ed214433a01295a2", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-7519fa249e71cebe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/upgrade-emails/route.ts:377"}, "properties": {"repobilityId": "d21ae269c9cf61ec", "scanner": "scanner-primary", "fingerprint": "7519fa249e71cebe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-51797bf5fd3bc18b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/reactivation-emails/route.ts:162"}, "properties": {"repobilityId": "d11b20636dd0e083", "scanner": "scanner-primary", "fingerprint": "51797bf5fd3bc18b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-107650ec0fcfee18", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/reconcile-overage/route.ts:185"}, "properties": {"repobilityId": "c59ede30484798a0", "scanner": "scanner-primary", "fingerprint": "107650ec0fcfee18", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9789af7b0779a021", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/cron/reconcile-period/route.ts:169"}, "properties": {"repobilityId": "146f0e8c222bb035", "scanner": "scanner-primary", "fingerprint": "9789af7b0779a021", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-604f5bc6cb53e1d9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/notify-repair-complete/route.ts:36"}, "properties": {"repobilityId": "14bd8c0a40fb30af", "scanner": "scanner-primary", "fingerprint": "604f5bc6cb53e1d9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8d83ebaea1af00e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/notify-complete/route.ts:205"}, "properties": {"repobilityId": "62a1febc52b1699f", "scanner": "scanner-primary", "fingerprint": "8d83ebaea1af00e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-96f8337e2e2a6eee", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 src/app/api/webhooks/stripe/route.ts:182"}, "properties": {"repobilityId": "d219e3c7fea8c39b", "scanner": "scanner-primary", "fingerprint": "96f8337e2e2a6eee", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fe72fa9213aed222", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/dashboard-content.tsx:611"}, "properties": {"repobilityId": "cb8982d915f88fc5", "scanner": "scanner-primary", "fingerprint": "fe72fa9213aed222", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e7328f2cc3de32e4", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/repair-tab-content.tsx:96"}, "properties": {"repobilityId": "7f6d67e060120b1b", "scanner": "scanner-primary", "fingerprint": "e7328f2cc3de32e4", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eb89d75ccab2e226", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/photo-review/photo-review-content.tsx:477"}, "properties": {"repobilityId": "e6bc08b5b8bbe1ce", "scanner": "scanner-primary", "fingerprint": "eb89d75ccab2e226", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e16ecbd9e99bc671", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/analytics/analytics-content.tsx:412"}, "properties": {"repobilityId": "f9d79ab1f966f006", "scanner": "scanner-primary", "fingerprint": "e16ecbd9e99bc671", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e2323b87d94834ca", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/commissions/commissions-content.tsx:244"}, "properties": {"repobilityId": "3f585b58359bcbe1", "scanner": "scanner-primary", "fingerprint": "e2323b87d94834ca", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-8dbbb408d3ace6eb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/repairs/repairs-dashboard.tsx:261"}, "properties": {"repobilityId": "743f8985ab3fc1ef", "scanner": "scanner-primary", "fingerprint": "8dbbb408d3ace6eb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a12163412005b148", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/correspondence/page.tsx:236"}, "properties": {"repobilityId": "f903f8d29712b008", "scanner": "scanner-primary", "fingerprint": "a12163412005b148", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7dc74aea56fa729c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/admin-sidebar.tsx:178"}, "properties": {"repobilityId": "d7e7cb7bb93291b8", "scanner": "scanner-primary", "fingerprint": "7dc74aea56fa729c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-e8c202c1e931c731", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/settings/page.tsx:1158"}, "properties": {"repobilityId": "5eb622420c63465e", "scanner": "scanner-primary", "fingerprint": "e8c202c1e931c731", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a340f4d8530e35b7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/carriers/page.tsx:260"}, "properties": {"repobilityId": "6f71e86649a336be", "scanner": "scanner-primary", "fingerprint": "a340f4d8530e35b7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-bf6b8440e0a9cebb", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/commissions/page.tsx:281"}, "properties": {"repobilityId": "ca34a2c966122cf1", "scanner": "scanner-primary", "fingerprint": "bf6b8440e0a9cebb", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4d3a5f02e913fedd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/expenses/page.tsx:737"}, "properties": {"repobilityId": "454486d3a25c8088", "scanner": "scanner-primary", "fingerprint": "4d3a5f02e913fedd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a17475d174a1666f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/admin/revenue/page.tsx:398"}, "properties": {"repobilityId": "97798ed3e1e0163f", "scanner": "scanner-primary", "fingerprint": "a17475d174a1666f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a5658c561cd1ab5d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/company-docs/company-docs-client.tsx:338"}, "properties": {"repobilityId": "35829ffe9bd9e357", "scanner": "scanner-primary", "fingerprint": "a5658c561cd1ab5d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-0299a4d062043998", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/repair-review/repair-review-content.tsx:153"}, "properties": {"repobilityId": "84ed1d530a4832f1", "scanner": "scanner-primary", "fingerprint": "0299a4d062043998", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-82482600d86a2f86", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/email-templates/page.tsx:290"}, "properties": {"repobilityId": "12296db5ae151504", "scanner": "scanner-primary", "fingerprint": "82482600d86a2f86", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-544ce01495451779", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/retail-estimates/retail-estimates-list.tsx:336"}, "properties": {"repobilityId": "bbb1246da7802433", "scanner": "scanner-primary", "fingerprint": "544ce01495451779", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-d5e50f63ea7a4a2f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/dashboard/retail/page.tsx:578"}, "properties": {"repobilityId": "c1370fe92c46f630", "scanner": "scanner-primary", "fingerprint": "d5e50f63ea7a4a2f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-04983ec869d760f3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/admin-dashboard.tsx:497"}, "properties": {"repobilityId": "a68608e863254b66", "scanner": "scanner-primary", "fingerprint": "04983ec869d760f3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-4648cf993c4ab01e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/analytics/analytics-content.tsx:256"}, "properties": {"repobilityId": "406bb9f3d2a8a471", "scanner": "scanner-primary", "fingerprint": "4648cf993c4ab01e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6a30219ac1b84dc8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/leads/leads-client.tsx:152"}, "properties": {"repobilityId": "74e3ac4c51614e48", "scanner": "scanner-primary", "fingerprint": "6a30219ac1b84dc8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-7aebee1aacf65873", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/activation/activation-content.tsx:237"}, "properties": {"repobilityId": "188d132fa1081e27", "scanner": "scanner-primary", "fingerprint": "7aebee1aacf65873", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f2c8aa0eafb7e67d", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/paths/paths-monitor.tsx:150"}, "properties": {"repobilityId": "c9f1c8b5acb0187c", "scanner": "scanner-primary", "fingerprint": "f2c8aa0eafb7e67d", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fec4dc090691cee7", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/admin/claim/[id]/admin-claim-detail.tsx:723"}, "properties": {"repobilityId": "9ba8d49cbe7aa2a7", "scanner": "scanner-primary", "fingerprint": "fec4dc090691cee7", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-61884648e17029ca", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/app/admin/qa-learning/qa-learning-queue.tsx:355"}, "properties": {"repobilityId": "559cc1430ebcce1b", "scanner": "scanner-primary", "fingerprint": "61884648e17029ca", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-f8b2f7f79c192165", "level": "note", "message": {"text": "\"active\" state uses light bg in a dark theme \u2014 src/app/admin/agent-recommendations/recommendations-queue.tsx:235"}, "properties": {"repobilityId": "609edb850e79a90a", "scanner": "scanner-primary", "fingerprint": "f8b2f7f79c192165", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.active-light-bg"]}}, {"ruleId": "scanner-993c36155d4ca642", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/portal/[token]/portal-client.tsx:467"}, "properties": {"repobilityId": "5564639898cce769", "scanner": "scanner-primary", "fingerprint": "993c36155d4ca642", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-db50ddb2eeb886e8", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/u/[token]/upload-client.tsx:174"}, "properties": {"repobilityId": "151cee1ffd670381", "scanner": "scanner-primary", "fingerprint": "db50ddb2eeb886e8", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-dd5575eafc00af8f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 src/app/sample/dashboard/page.tsx:425"}, "properties": {"repobilityId": "78923eb5494645f7", "scanner": "scanner-primary", "fingerprint": "dd5575eafc00af8f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-1f66ad88286ca30a", "level": "warning", "message": {"text": "Dockerfile runs as root: backend/Dockerfile"}, "properties": {"repobilityId": "7afd2b0e8a8c9eeb", "scanner": "scanner-primary", "fingerprint": "1f66ad88286ca30a", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-8cd20d539467d2c5", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: python:3.11-slim"}, "properties": {"repobilityId": "06b87ac9439092d6", "scanner": "scanner-primary", "fingerprint": "8cd20d539467d2c5", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-aa5acaa49eb8315b", "level": "note", "message": {"text": "Containers defined but no K8s/orchestration manifest found"}, "properties": {"repobilityId": "b230ea9b68736081", "scanner": "scanner-primary", "fingerprint": "aa5acaa49eb8315b", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["coverage", "deployment"]}}, {"ruleId": "scanner-07f1e067dbf0ac8f", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in supabase/functions/email-ingest/index.ts:82"}, "properties": {"repobilityId": "656f4e7284eeb431", "scanner": "scanner-primary", "fingerprint": "07f1e067dbf0ac8f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "supabase/functions/email-ingest/index.ts"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-711ce51aec81b474", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/communication-log.tsx:141"}, "properties": {"repobilityId": "a49dc2f8884dbd5b", "scanner": "scanner-primary", "fingerprint": "711ce51aec81b474", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/communication-log.tsx"}, "region": {"startLine": 141}}}]}, {"ruleId": "scanner-e7bd30cb2ff1fcb0", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/claim-brain-chat.tsx:920"}, "properties": {"repobilityId": "f2f60f376c71d70d", "scanner": "scanner-primary", "fingerprint": "e7bd30cb2ff1fcb0", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/claim-brain-chat.tsx"}, "region": {"startLine": 920}}}]}, {"ruleId": "scanner-9f04b0d772c7c5d7", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/json-ld.tsx:9"}, "properties": {"repobilityId": "9b57d463e843e76c", "scanner": "scanner-primary", "fingerprint": "9f04b0d772c7c5d7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/json-ld.tsx"}, "region": {"startLine": 9}}}]}, {"ruleId": "scanner-a74ea101d1055e34", "level": "warning", "message": {"text": "Insecure pattern 'dangerous_innerhtml' in src/components/claim-detail/communications-center.tsx:532"}, "properties": {"repobilityId": "6302332f1c5f341a", "scanner": "scanner-primary", "fingerprint": "a74ea101d1055e34", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "dangerous_innerhtml"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "src/components/claim-detail/communications-center.tsx"}, "region": {"startLine": 532}}}]}, {"ruleId": "scanner-b699504408c250bd", "level": "note", "message": {"text": "Very large file: backend/repair_generator.py (1667 lines)"}, "properties": {"repobilityId": "17cfc3b0a4862383", "scanner": "scanner-primary", "fingerprint": "b699504408c250bd", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-0c7cb6deab0394da", "level": "note", "message": {"text": "Very large file: backend/compliance_report.py (2448 lines)"}, "properties": {"repobilityId": "58894f13339c9114", "scanner": "scanner-primary", "fingerprint": "0c7cb6deab0394da", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-59e37ba12ae28835", "level": "note", "message": {"text": "Very large file: backend/qa_pdf_checks.py (1207 lines)"}, "properties": {"repobilityId": "0f782444064a1a51", "scanner": "scanner-primary", "fingerprint": "59e37ba12ae28835", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-04f1cc2ea550ff50", "level": "note", "message": {"text": "Very large file: backend/claim_brain_pdfs.py (1115 lines)"}, "properties": {"repobilityId": "5554c5e5592b347b", "scanner": "scanner-primary", "fingerprint": "04f1cc2ea550ff50", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-4b6aba46eadf2fb5", "level": "note", "message": {"text": "Very large file: backend/pdf_templates.py (1719 lines)"}, "properties": {"repobilityId": "40e9d0fecf26ef20", "scanner": "scanner-primary", "fingerprint": "4b6aba46eadf2fb5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-958cb040b91cbb79", "level": "note", "message": {"text": "Very large file: backend/xactimate_lookup.py (2234 lines)"}, "properties": {"repobilityId": "f10ac74fc029faf8", "scanner": "scanner-primary", "fingerprint": "958cb040b91cbb79", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b8286b9effa6fb23", "level": "note", "message": {"text": "Very large file: backend/claim_brain_tools.py (7046 lines)"}, "properties": {"repobilityId": "3525c23a9ee677a7", "scanner": "scanner-primary", "fingerprint": "b8286b9effa6fb23", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-582bb91fca40cc6e", "level": "note", "message": {"text": "Very large file: backend/remote_richard.py (2709 lines)"}, "properties": {"repobilityId": "83474da2ad461c22", "scanner": "scanner-primary", "fingerprint": "582bb91fca40cc6e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1774781f17c4cc56", "level": "note", "message": {"text": "Very large file: backend/repair_processor.py (1359 lines)"}, "properties": {"repobilityId": "f1e97433669ae313", "scanner": "scanner-primary", "fingerprint": "1774781f17c4cc56", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6a576260ae106d87", "level": "note", "message": {"text": "Very large file: backend/usarm_pdf_generator.py (5955 lines)"}, "properties": {"repobilityId": "44de5d776e3fa7fd", "scanner": "scanner-primary", "fingerprint": "6a576260ae106d87", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-116edcfda759a7c7", "level": "note", "message": {"text": "Very large file: backend/gmail_poller.py (2149 lines)"}, "properties": {"repobilityId": "7ea0093139d68254", "scanner": "scanner-primary", "fingerprint": "116edcfda759a7c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6cf217db41d5ec32", "level": "note", "message": {"text": "Very large file: backend/processor.py (11723 lines)"}, "properties": {"repobilityId": "d6964eff0050fe17", "scanner": "scanner-primary", "fingerprint": "6cf217db41d5ec32", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d8e724f25bac1ef5", "level": "note", "message": {"text": "Very large file: backend/qa_auditor.py (2528 lines)"}, "properties": {"repobilityId": "ff5b13209f84b094", "scanner": "scanner-primary", "fingerprint": "d8e724f25bac1ef5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-49b7f2d6b388a692", "level": "note", "message": {"text": "Very large file: backend/main.py (8603 lines)"}, "properties": {"repobilityId": "fb764a5c13811891", "scanner": "scanner-primary", "fingerprint": "49b7f2d6b388a692", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-d86a16b7deffaad6", "level": "note", "message": {"text": "Very large file: backend/tests/test_doc06_siding.py (1189 lines)"}, "properties": {"repobilityId": "c8bd3318daf0b03c", "scanner": "scanner-primary", "fingerprint": "d86a16b7deffaad6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-32b1b80f5f1f4c70", "level": "note", "message": {"text": "Very large file: src/components/install-supplement-builder.tsx (982 lines)"}, "properties": {"repobilityId": "76351c692d1dc73c", "scanner": "scanner-primary", "fingerprint": "32b1b80f5f1f4c70", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-82368d856e3fd7b4", "level": "note", "message": {"text": "Very large file: src/components/claim-brain-chat.tsx (2223 lines)"}, "properties": {"repobilityId": "b07f3c71955f3c13", "scanner": "scanner-primary", "fingerprint": "82368d856e3fd7b4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-63d5b49265d82abe", "level": "note", "message": {"text": "Very large file: src/app/page.tsx (1573 lines)"}, "properties": {"repobilityId": "476ce75d7038532f", "scanner": "scanner-primary", "fingerprint": "63d5b49265d82abe", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-07df40aeba8de912", "level": "note", "message": {"text": "Very large file: src/app/dashboard/dashboard-content.tsx (1643 lines)"}, "properties": {"repobilityId": "f7122a938e923986", "scanner": "scanner-primary", "fingerprint": "07df40aeba8de912", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-e3848cdc1a488804", "level": "note", "message": {"text": "Very large file: src/app/dashboard/new-claim/page.tsx (1637 lines)"}, "properties": {"repobilityId": "8d779221256213f7", "scanner": "scanner-primary", "fingerprint": "e3848cdc1a488804", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8a0f51985dd53800", "level": "note", "message": {"text": "Very large file: src/app/dashboard/settings/page.tsx (1745 lines)"}, "properties": {"repobilityId": "6c178d30dbea70e8", "scanner": "scanner-primary", "fingerprint": "8a0f51985dd53800", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a927b77ca2dc8a9f", "level": "note", "message": {"text": "Very large file: src/app/dashboard/storm-leads/storm-leads-client.tsx (1383 lines)"}, "properties": {"repobilityId": "3b178c179d395e62", "scanner": "scanner-primary", "fingerprint": "a927b77ca2dc8a9f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-337e60b86676a143", "level": "note", "message": {"text": "Very large file: src/app/dashboard/admin/settings/page.tsx (1245 lines)"}, "properties": {"repobilityId": "0a59ebf98604a035", "scanner": "scanner-primary", "fingerprint": "337e60b86676a143", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-7f793cff4d411ef5", "level": "note", "message": {"text": "Very large file: src/app/dashboard/claim/[id]/page.tsx (2515 lines)"}, "properties": {"repobilityId": "093960381e601e84", "scanner": "scanner-primary", "fingerprint": "7f793cff4d411ef5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-52cfdfaaeb08253c", "level": "note", "message": {"text": "Very large file: src/app/admin/admin-dashboard.tsx (1331 lines)"}, "properties": {"repobilityId": "4861407e899b777c", "scanner": "scanner-primary", "fingerprint": "52cfdfaaeb08253c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-69aa7b79be166311", "level": "note", "message": {"text": "Very large file: src/lib/seo/locations.ts (1142 lines)"}, "properties": {"repobilityId": "505efefb0cd58bab", "scanner": "scanner-primary", "fingerprint": "69aa7b79be166311", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "b782e436eb03de5c", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-796689a5f1663f86", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: cloudflare/claims-intake-worker/package.json"}, "properties": {"repobilityId": "aa05c42bc2a2f172", "scanner": "scanner-primary", "fingerprint": "796689a5f1663f86", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "cloudflare/claims-intake-worker/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "e247594c353a8817", "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": "a474cb29174d674a", "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": "697aee4eb6be2754", "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": "1c7e02ea1cb83da8", "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": "78d7c35c3325c285", "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": "90e54990687c4b34", "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": "4a8e0edb51f4bdc3", "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": "70a3d025ca86030a", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-7ac41429a9c8ddd8", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/parity_harness_ship3.py:179"}, "properties": {"repobilityId": "08eddd81d1df578e", "scanner": "scanner-primary", "fingerprint": "7ac41429a9c8ddd8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f45cd3b15a618c17", "level": "note", "message": {"text": "Legacy-named symbol `missing_in_old` in scripts/parity_harness.py:42"}, "properties": {"repobilityId": "21ce3df759323f60", "scanner": "scanner-primary", "fingerprint": "f45cd3b15a618c17", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8db45b3529cdfa67", "level": "none", "message": {"text": "Commented-code block (7 lines) in scripts/import_national_prices.py:38"}, "properties": {"repobilityId": "6f5d552d08649efa", "scanner": "scanner-primary", "fingerprint": "8db45b3529cdfa67", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ed8744c2638e4d35", "level": "none", "message": {"text": "Commented-code block (6 lines) in scripts/import_pricing_to_tables.py:66"}, "properties": {"repobilityId": "5a0c5c1eae17b89e", "scanner": "scanner-primary", "fingerprint": "ed8744c2638e4d35", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-116ab2f4c3a47f85", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/email-worker/src/index.ts:113"}, "properties": {"repobilityId": "2d7343d22003d424", "scanner": "scanner-primary", "fingerprint": "116ab2f4c3a47f85", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0ef8f5cace26fdbb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 cloudflare/claims-intake-worker/src/index.ts:58"}, "properties": {"repobilityId": "cccade5cc359f6c1", "scanner": "scanner-primary", "fingerprint": "0ef8f5cace26fdbb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a10d41467d14353b", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/code_compliance.py:16"}, "properties": {"repobilityId": "2f6dfd2bb1b7041f", "scanner": "scanner-primary", "fingerprint": "a10d41467d14353b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2da02001c44b459d", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/test_noaa_source_priority.py:73"}, "properties": {"repobilityId": "6440a104b7c9b7c5", "scanner": "scanner-primary", "fingerprint": "2da02001c44b459d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1e2d7f010f0fa64", "level": "none", "message": {"text": "Commented-code block (10 lines) in backend/compliance_report.py:72"}, "properties": {"repobilityId": "2bc9a1c480fbfa2f", "scanner": "scanner-primary", "fingerprint": "a1e2d7f010f0fa64", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6dbeb224e4fb2b4e", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/qa_pdf_checks.py:295"}, "properties": {"repobilityId": "555454974eb32fe6", "scanner": "scanner-primary", "fingerprint": "6dbeb224e4fb2b4e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0d7cbc827f8f350f", "level": "note", "message": {"text": "Legacy-named symbol `usarm_storm_v1` in backend/leadgen_ingest.py:160"}, "properties": {"repobilityId": "f829d12c29aae859", "scanner": "scanner-primary", "fingerprint": "0d7cbc827f8f350f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-9bfba01c89e2c2fb", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/carrier_analyst.py:79"}, "properties": {"repobilityId": "6682fb2018acf05b", "scanner": "scanner-primary", "fingerprint": "9bfba01c89e2c2fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae14ed6cd6b70c8c", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/email_voice.py:110"}, "properties": {"repobilityId": "4c9b36e69606468b", "scanner": "scanner-primary", "fingerprint": "ae14ed6cd6b70c8c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb35245e9b200dbe", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/model_config.py:170"}, "properties": {"repobilityId": "0fad52a34860dd26", "scanner": "scanner-primary", "fingerprint": "eb35245e9b200dbe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9eb502d26b173ec2", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/pdf_templates.py:1609"}, "properties": {"repobilityId": "b6e8f188942e911c", "scanner": "scanner-primary", "fingerprint": "9eb502d26b173ec2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c193d39e086f2d4f", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/xactimate_lookup.py:87"}, "properties": {"repobilityId": "f6bca186a9689946", "scanner": "scanner-primary", "fingerprint": "c193d39e086f2d4f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92ccb7786cc208dd", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/crm_api.py:651"}, "properties": {"repobilityId": "9fbc457631efab91", "scanner": "scanner-primary", "fingerprint": "92ccb7786cc208dd", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-534dd5af562f16b4", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/correspondence_analyzer.py:81"}, "properties": {"repobilityId": "2d16c1d307d0d13c", "scanner": "scanner-primary", "fingerprint": "534dd5af562f16b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8929c21f9b130923", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/carrier_normalizer.py:48"}, "properties": {"repobilityId": "371ea9a69e75a670", "scanner": "scanner-primary", "fingerprint": "8929c21f9b130923", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0c8c908bb521e8fb", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/slope_mapping.py:334"}, "properties": {"repobilityId": "a275aa3f826dfeca", "scanner": "scanner-primary", "fingerprint": "0c8c908bb521e8fb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f897cedfa8a4553c", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/telemetry.py:51"}, "properties": {"repobilityId": "6948d183c5da69e8", "scanner": "scanner-primary", "fingerprint": "f897cedfa8a4553c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d21487a5cb8b7225", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/claim_brain_tools.py:1691"}, "properties": {"repobilityId": "940afbcebe5e2024", "scanner": "scanner-primary", "fingerprint": "d21487a5cb8b7225", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35993947a1f56a1b", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/bulk_campaigns.py:57"}, "properties": {"repobilityId": "6da196fc60096522", "scanner": "scanner-primary", "fingerprint": "35993947a1f56a1b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3dcebb61774c9896", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/remote_richard.py:90"}, "properties": {"repobilityId": "1fc8c0822ef099cf", "scanner": "scanner-primary", "fingerprint": "3dcebb61774c9896", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9d5075c4a16bff12", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/repair_processor.py:1295"}, "properties": {"repobilityId": "3907c14bc4ca654a", "scanner": "scanner-primary", "fingerprint": "9d5075c4a16bff12", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a6c8a71f7ccfc36d", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/usarm_pdf_generator.py:220"}, "properties": {"repobilityId": "fe923a26e8734efa", "scanner": "scanner-primary", "fingerprint": "a6c8a71f7ccfc36d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ef71dd23ebcf2e6a", "level": "none", "message": {"text": "Commented-code block (11 lines) in backend/validate_market_prices.py:117"}, "properties": {"repobilityId": "32e27cb762f9eb93", "scanner": "scanner-primary", "fingerprint": "ef71dd23ebcf2e6a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-fb0e6ee437ba1678", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/gmail_poller.py:418"}, "properties": {"repobilityId": "cfe90a9ab28efa37", "scanner": "scanner-primary", "fingerprint": "fb0e6ee437ba1678", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ae1ab197fcb1bc7c", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/remote_richard_agent.py:607"}, "properties": {"repobilityId": "6302966dd430485c", "scanner": "scanner-primary", "fingerprint": "ae1ab197fcb1bc7c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f357e37288dd0fc8", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/processor.py:97"}, "properties": {"repobilityId": "ef50bf58f690cb66", "scanner": "scanner-primary", "fingerprint": "f357e37288dd0fc8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1bbc5bc5221b719c", "level": "error", "message": {"text": "Blocking `urllib.request.urlopen(...)` inside `async def process_claim` \u2014 backend/processor.py:7837"}, "properties": {"repobilityId": "649b8faee78c7569", "scanner": "scanner-primary", "fingerprint": "1bbc5bc5221b719c", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/processor.py"}, "region": {"startLine": 7837}}}]}, {"ruleId": "scanner-71bb66d21dbefa3b", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/upload_link.py:62"}, "properties": {"repobilityId": "972700a2049e2f59", "scanner": "scanner-primary", "fingerprint": "71bb66d21dbefa3b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-be7599f7df28afcb", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/qa_auditor.py:67"}, "properties": {"repobilityId": "c489e5f1dc2df7c4", "scanner": "scanner-primary", "fingerprint": "be7599f7df28afcb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6a966e5bb308efa7", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/backfill_carrier_brand.py:123"}, "properties": {"repobilityId": "c6f8a14915807f82", "scanner": "scanner-primary", "fingerprint": "6a966e5bb308efa7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-944c3a3665164e1c", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/backfill_canonical_carriers.py:100"}, "properties": {"repobilityId": "32aeed692f3c01c8", "scanner": "scanner-primary", "fingerprint": "944c3a3665164e1c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b09e315752258a25", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/main.py:546"}, "properties": {"repobilityId": "a18e1a424b2c9f49", "scanner": "scanner-primary", "fingerprint": "b09e315752258a25", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0eab04c70e25c0c9", "level": "error", "message": {"text": "Blocking `urllib.request.urlopen(...)` inside `async def debug_profile` \u2014 backend/main.py:505"}, "properties": {"repobilityId": "ced1172db326dcb4", "scanner": "scanner-primary", "fingerprint": "0eab04c70e25c0c9", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/main.py"}, "region": {"startLine": 505}}}]}, {"ruleId": "scanner-f3974e478aee7081", "level": "error", "message": {"text": "Blocking `time.sleep(...)` inside `async def noaa_scan` \u2014 backend/main.py:1485"}, "properties": {"repobilityId": "728966b6c8fdd365", "scanner": "scanner-primary", "fingerprint": "f3974e478aee7081", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/main.py"}, "region": {"startLine": 1485}}}]}, {"ruleId": "scanner-faa702c974bfff97", "level": "error", "message": {"text": "Blocking `urllib.request.urlopen(...)` inside `async def gmail_auth_callback` \u2014 backend/main.py:7125"}, "properties": {"repobilityId": "ff99bb3519c69c90", "scanner": "scanner-primary", "fingerprint": "faa702c974bfff97", "layer": "quality", "severity": "high", "confidence": 1.0, "tags": ["integrity", "sync-io-in-async", "performance"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/main.py"}, "region": {"startLine": 7125}}}]}, {"ruleId": "scanner-22cb5f2cd515192d", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/claim_brain_email.py:54"}, "properties": {"repobilityId": "e60df4db578e7078", "scanner": "scanner-primary", "fingerprint": "22cb5f2cd515192d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4c9962cb933b933a", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 backend/claim_brain_email.py:183"}, "properties": {"repobilityId": "699b8c0a0357ab95", "scanner": "scanner-primary", "fingerprint": "4c9962cb933b933a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-dc348bdadd5fc268", "level": "note", "message": {"text": "Legacy-named symbol `claim_config_backup` in backend/reprocess_13_chrisfield.py:222"}, "properties": {"repobilityId": "66d6b7f91ad0ee23", "scanner": "scanner-primary", "fingerprint": "dc348bdadd5fc268", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1416ded7586705a0", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/richard_middleware.py:51"}, "properties": {"repobilityId": "83f3e84f1ab09597", "scanner": "scanner-primary", "fingerprint": "1416ded7586705a0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cd6072dfdf6105d4", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/carrier_reply_money_loop.py:74"}, "properties": {"repobilityId": "bbe54de52ab03b27", "scanner": "scanner-primary", "fingerprint": "cd6072dfdf6105d4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1b3e99b0236e8ece", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/remote_email_poller.py:235"}, "properties": {"repobilityId": "dae308eab8ee6181", "scanner": "scanner-primary", "fingerprint": "1b3e99b0236e8ece", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66e8f34807a7d2ea", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/integrations/companycam.py:28"}, "properties": {"repobilityId": "114bab7890eb765f", "scanner": "scanner-primary", "fingerprint": "66e8f34807a7d2ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7adb0080d448e05a", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/test_roof_geometry_svg.py:45"}, "properties": {"repobilityId": "fb282e275310e5ea", "scanner": "scanner-primary", "fingerprint": "7adb0080d448e05a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a3f77a110cbdcd1", "level": "note", "message": {"text": "Legacy-named symbol `cfg_legacy` in backend/tests/test_material_enum.py:281"}, "properties": {"repobilityId": "4361fa8d28a4e06d", "scanner": "scanner-primary", "fingerprint": "0a3f77a110cbdcd1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-df626c0c03d02264", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/tests/test_doc06_siding.py:572"}, "properties": {"repobilityId": "17d53e8a8495ed2b", "scanner": "scanner-primary", "fingerprint": "df626c0c03d02264", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6fa60c3fee70a4b4", "level": "none", "message": {"text": "Commented-code block (6 lines) in backend/tests/claim_invariants.py:93"}, "properties": {"repobilityId": "191ae15a43128832", "scanner": "scanner-primary", "fingerprint": "6fa60c3fee70a4b4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-542bb297251153eb", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/tests/test_doc06_priced_supplement.py:116"}, "properties": {"repobilityId": "42961b8425eea50d", "scanner": "scanner-primary", "fingerprint": "542bb297251153eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5904c01e12a0625e", "level": "none", "message": {"text": "Commented-code block (10 lines) in backend/tests/test_claim_invariants.py:208"}, "properties": {"repobilityId": "d22cccc259ce2cef", "scanner": "scanner-primary", "fingerprint": "5904c01e12a0625e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f37040f61027b9d0", "level": "none", "message": {"text": "Commented-code block (8 lines) in backend/scope_comparison/rules.py:396"}, "properties": {"repobilityId": "4a0a6603247ba3c9", "scanner": "scanner-primary", "fingerprint": "f37040f61027b9d0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-63c837a3674d912d", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/building_codes/lookup.py:77"}, "properties": {"repobilityId": "1b2794830972b281", "scanner": "scanner-primary", "fingerprint": "63c837a3674d912d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-558a0b5dab97ef3c", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/richard_evals/track1_unit.py:34"}, "properties": {"repobilityId": "3ce63506c5e9ccbd", "scanner": "scanner-primary", "fingerprint": "558a0b5dab97ef3c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9cb9586d8affe461", "level": "none", "message": {"text": "Commented-code block (5 lines) in backend/damage_scoring/code_triggers.py:13"}, "properties": {"repobilityId": "4cd36ff1f8aa173f", "scanner": "scanner-primary", "fingerprint": "9cb9586d8affe461", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e056ef86ccad6866", "level": "none", "message": {"text": "Commented-code block (9 lines) in backend/noaa_weather/api.py:200"}, "properties": {"repobilityId": "c311111fb6c666d9", "scanner": "scanner-primary", "fingerprint": "e056ef86ccad6866", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3e5a748f723764df", "level": "note", "message": {"text": "Legacy-named symbol `save_copy` in backend/noaa_weather/report.py:90"}, "properties": {"repobilityId": "fd662ba6e168b5a8", "scanner": "scanner-primary", "fingerprint": "3e5a748f723764df", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5dfa77e87b23d4d7", "level": "none", "message": {"text": "Commented-code block (7 lines) in backend/noaa_weather/report.py:123"}, "properties": {"repobilityId": "5c7773499613eec8", "scanner": "scanner-primary", "fingerprint": "5dfa77e87b23d4d7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-42a9e1c4e7cc5c50", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/money-strip.tsx:60"}, "properties": {"repobilityId": "a0378ec527ec5cf2", "scanner": "scanner-primary", "fingerprint": "42a9e1c4e7cc5c50", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-10957f24f8d9fc1e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/money-strip.tsx:70"}, "properties": {"repobilityId": "7bf6e221049ba2ec", "scanner": "scanner-primary", "fingerprint": "10957f24f8d9fc1e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-7e993a9b01810013", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/photo-markup-modal.tsx:137"}, "properties": {"repobilityId": "ef1b45d58c127cac", "scanner": "scanner-primary", "fingerprint": "7e993a9b01810013", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-082cabd21305e67c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/photo-markup-modal.tsx:171"}, "properties": {"repobilityId": "6c058566325d56fc", "scanner": "scanner-primary", "fingerprint": "082cabd21305e67c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8772b4e9ffb78855", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/onboarding-chat.tsx:11"}, "properties": {"repobilityId": "a6dd6a09c1c1d96f", "scanner": "scanner-primary", "fingerprint": "8772b4e9ffb78855", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3f7cb32578ce5c43", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/onboarding-chat.tsx:234"}, "properties": {"repobilityId": "ea76724414a676a0", "scanner": "scanner-primary", "fingerprint": "3f7cb32578ce5c43", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-174556e0bf38f71c", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/invoice-builder.tsx:31"}, "properties": {"repobilityId": "06ab2b45605ffd8b", "scanner": "scanner-primary", "fingerprint": "174556e0bf38f71c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5fa4f47ed502c5d6", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/rep-action-center.tsx:57"}, "properties": {"repobilityId": "3458215d54e42a3d", "scanner": "scanner-primary", "fingerprint": "5fa4f47ed502c5d6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ca92c79d610a5dde", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/estimate-view.tsx:72"}, "properties": {"repobilityId": "33b425467e9f7379", "scanner": "scanner-primary", "fingerprint": "ca92c79d610a5dde", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e9d51cfb60dc6566", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/hero-signup-form.tsx:95"}, "properties": {"repobilityId": "1ac03e69a10274a6", "scanner": "scanner-primary", "fingerprint": "e9d51cfb60dc6566", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-113309799a6297d1", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/send-documents-block.tsx:67"}, "properties": {"repobilityId": "95ee1819ad96ebf3", "scanner": "scanner-primary", "fingerprint": "113309799a6297d1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53807b73979e0d2a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/onboarding-checklist.tsx:94"}, "properties": {"repobilityId": "be0b1be645932e5d", "scanner": "scanner-primary", "fingerprint": "53807b73979e0d2a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cabea1472ae0e052", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/admin-brain-chat.tsx:35"}, "properties": {"repobilityId": "9387b8125fea48c5", "scanner": "scanner-primary", "fingerprint": "cabea1472ae0e052", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4b7ce2102c23170b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin-brain-chat.tsx:451"}, "properties": {"repobilityId": "3ed9603c86435f69", "scanner": "scanner-primary", "fingerprint": "4b7ce2102c23170b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eaaa71fcefb61d8e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/edit-report-fields-card.tsx:72"}, "properties": {"repobilityId": "93fccc1445f6a298", "scanner": "scanner-primary", "fingerprint": "eaaa71fcefb61d8e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-de5fc992c1c185f8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/claim-money-actions.tsx:46"}, "properties": {"repobilityId": "bdad6c432d353128", "scanner": "scanner-primary", "fingerprint": "de5fc992c1c185f8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc6f558cfc6bed04", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/signature-manager.tsx:122"}, "properties": {"repobilityId": "0d51e652d5de2b1b", "scanner": "scanner-primary", "fingerprint": "dc6f558cfc6bed04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a5fe320f14a359f7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/signature-manager.tsx:147"}, "properties": {"repobilityId": "074ae3c18badde06", "scanner": "scanner-primary", "fingerprint": "a5fe320f14a359f7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-2d550f915e098614", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/components/agentic-drop-zone.tsx:9"}, "properties": {"repobilityId": "82cc1573a541c99c", "scanner": "scanner-primary", "fingerprint": "2d550f915e098614", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e33aba68f24d686a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/agentic-drop-zone.tsx:112"}, "properties": {"repobilityId": "d8351585b0cf6fdb", "scanner": "scanner-primary", "fingerprint": "e33aba68f24d686a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9251ea91e988a986", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/richard-suggestion-banner.tsx:86"}, "properties": {"repobilityId": "7fad94b52dfb7289", "scanner": "scanner-primary", "fingerprint": "9251ea91e988a986", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-436b6d8a373a3276", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/page-view-tracker.tsx:12"}, "properties": {"repobilityId": "e35cfad69bc0d0d4", "scanner": "scanner-primary", "fingerprint": "436b6d8a373a3276", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d94584cf3c35c017", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/share-win-button.tsx:54"}, "properties": {"repobilityId": "fe1fdbb66728b28a", "scanner": "scanner-primary", "fingerprint": "d94584cf3c35c017", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2181c226a4ca264a", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/install-supplement-builder.tsx:836"}, "properties": {"repobilityId": "fe7d6627e24ed740", "scanner": "scanner-primary", "fingerprint": "2181c226a4ca264a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-80b6687bb1f0e62a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/install-supplement-builder.tsx:55"}, "properties": {"repobilityId": "b7b243433f2b76ec", "scanner": "scanner-primary", "fingerprint": "80b6687bb1f0e62a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-bf1c669304587724", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/comm-badges.tsx:3"}, "properties": {"repobilityId": "3772de32db644f5f", "scanner": "scanner-primary", "fingerprint": "bf1c669304587724", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09a1cf158063416b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/coc-builder.tsx:58"}, "properties": {"repobilityId": "d6082769498334e0", "scanner": "scanner-primary", "fingerprint": "09a1cf158063416b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-96cd7595486c088e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/check-upload-modal.tsx:105"}, "properties": {"repobilityId": "1c7023ce0c16ba5b", "scanner": "scanner-primary", "fingerprint": "96cd7595486c088e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a74b73193459e687", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/check-upload-modal.tsx:137"}, "properties": {"repobilityId": "cef6e2ed22b80048", "scanner": "scanner-primary", "fingerprint": "a74b73193459e687", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-54994ba0a9d08e09", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/instant-funnel.tsx:7"}, "properties": {"repobilityId": "76dd773de7bb0d96", "scanner": "scanner-primary", "fingerprint": "54994ba0a9d08e09", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a1d640b423fe3c9b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/admin-referral-loop-panel.tsx:94"}, "properties": {"repobilityId": "558fdae834b0634b", "scanner": "scanner-primary", "fingerprint": "a1d640b423fe3c9b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-233fa1adf68e424b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/claim-brain-chat.tsx:34"}, "properties": {"repobilityId": "2ed16429d9f4f2cb", "scanner": "scanner-primary", "fingerprint": "233fa1adf68e424b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-59dd8e7bed6ddfae", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/claim-brain-chat.tsx:1348"}, "properties": {"repobilityId": "998bff198b737d2b", "scanner": "scanner-primary", "fingerprint": "59dd8e7bed6ddfae", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a15866240814eb94", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/crm-import-modal.tsx:90"}, "properties": {"repobilityId": "57b13bde2120cc80", "scanner": "scanner-primary", "fingerprint": "a15866240814eb94", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dd8d305ca150867d", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/components/start-chat.tsx:14"}, "properties": {"repobilityId": "21129724331e24c5", "scanner": "scanner-primary", "fingerprint": "dd8d305ca150867d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0a677a83ce27720a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/supplement-composer.tsx:228"}, "properties": {"repobilityId": "51ef92abdb90ee79", "scanner": "scanner-primary", "fingerprint": "0a677a83ce27720a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-97e617edc4fbcbd1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/supplement-composer.tsx:451"}, "properties": {"repobilityId": "f271c64b9b8a9b9f", "scanner": "scanner-primary", "fingerprint": "97e617edc4fbcbd1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1eaaa0dce8074f40", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/components/claim-action-bar.tsx:50"}, "properties": {"repobilityId": "e3df5d26b5d45f5a", "scanner": "scanner-primary", "fingerprint": "1eaaa0dce8074f40", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9297f4db58ed7467", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/scope-comparison.tsx:58"}, "properties": {"repobilityId": "f7d3e7c590b02af5", "scanner": "scanner-primary", "fingerprint": "9297f4db58ed7467", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9550afc5c600a384", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/expense-upload-modal.tsx:130"}, "properties": {"repobilityId": "c126c5c352195700", "scanner": "scanner-primary", "fingerprint": "9550afc5c600a384", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-597c55993ce475bb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/components/claim-detail/communications-center.tsx:42"}, "properties": {"repobilityId": "9999ec2dd1af12b0", "scanner": "scanner-primary", "fingerprint": "597c55993ce475bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-66ed526f972e2faf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/components/claim-detail/communications-center.tsx:104"}, "properties": {"repobilityId": "c9c139cbfbf02a80", "scanner": "scanner-primary", "fingerprint": "66ed526f972e2faf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e7f3b4351916d7d8", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/page.tsx:11"}, "properties": {"repobilityId": "acae2d14a2393f42", "scanner": "scanner-primary", "fingerprint": "e7f3b4351916d7d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-05c31f576761cf26", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/instant-supplement/page.tsx:4"}, "properties": {"repobilityId": "c0602ee142785338", "scanner": "scanner-primary", "fingerprint": "05c31f576761cf26", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-569bb2f28c78a899", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/auth/callback/route.ts:205"}, "properties": {"repobilityId": "21abe378b6e88731", "scanner": "scanner-primary", "fingerprint": "569bb2f28c78a899", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0fe79e8caf448ff4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/auth/callback/route.ts:18"}, "properties": {"repobilityId": "bc1388493dfac319", "scanner": "scanner-primary", "fingerprint": "0fe79e8caf448ff4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4bda1561a5d8fc0a", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/auth/confirm/route.ts:16"}, "properties": {"repobilityId": "596f3da266f635fd", "scanner": "scanner-primary", "fingerprint": "4bda1561a5d8fc0a", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1114b4305d9309cd", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/welcome-email/route.ts:79"}, "properties": {"repobilityId": "19382e82ba96c72e", "scanner": "scanner-primary", "fingerprint": "1114b4305d9309cd", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ad760d7571ef38ea", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/coc/route.ts:63"}, "properties": {"repobilityId": "fe8e8c37595170ca", "scanner": "scanner-primary", "fingerprint": "ad760d7571ef38ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d4b5bbedc9e095ef", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/coc/route.ts:256"}, "properties": {"repobilityId": "651014e909f24de2", "scanner": "scanner-primary", "fingerprint": "d4b5bbedc9e095ef", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-809296723905e7e5", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/install-supplements/route.ts:133"}, "properties": {"repobilityId": "649fa57b7d2d3324", "scanner": "scanner-primary", "fingerprint": "809296723905e7e5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20c6635acc44db3f", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/claims/update/route.ts:14"}, "properties": {"repobilityId": "32163197a7ef6c70", "scanner": "scanner-primary", "fingerprint": "20c6635acc44db3f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-28b0fef0b293184d", "level": "note", "message": {"text": "Legacy-named symbol `storm_v1` in src/app/api/leadgen/campaigns/route.ts:9"}, "properties": {"repobilityId": "9d0ec38119426ecb", "scanner": "scanner-primary", "fingerprint": "28b0fef0b293184d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-47a54d0108e3aa04", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/leadgen/campaigns/route.ts:124"}, "properties": {"repobilityId": "47f360e31a887ecb", "scanner": "scanner-primary", "fingerprint": "47a54d0108e3aa04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7a6961a13f82e356", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/instant-intake/claim/route.ts:9"}, "properties": {"repobilityId": "6b8b4813f4c8650c", "scanner": "scanner-primary", "fingerprint": "7a6961a13f82e356", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16492382bda2c4b9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/team/accept/route.ts:116"}, "properties": {"repobilityId": "6a66f1fc0fd82b4e", "scanner": "scanner-primary", "fingerprint": "16492382bda2c4b9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-739ed6aedc5b53ba", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/sales-manager/rep-actions/route.ts:139"}, "properties": {"repobilityId": "7f89636b2cfa8d4b", "scanner": "scanner-primary", "fingerprint": "739ed6aedc5b53ba", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-29193aa20110cf08", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/send-email/route.ts:32"}, "properties": {"repobilityId": "d4a0ffc8bd93ba09", "scanner": "scanner-primary", "fingerprint": "29193aa20110cf08", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c5f31d00b51434a4", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/production/send/[claim_id]/route.ts:92"}, "properties": {"repobilityId": "305417e35cac6eec", "scanner": "scanner-primary", "fingerprint": "c5f31d00b51434a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cb4ee24d71be8b36", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/billing/create-checkout/route.ts:73"}, "properties": {"repobilityId": "2ecdf2cf0735403a", "scanner": "scanner-primary", "fingerprint": "cb4ee24d71be8b36", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c318990862c82973", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/billing/create-checkout/route.ts:13"}, "properties": {"repobilityId": "ecc15b6048ea2c18", "scanner": "scanner-primary", "fingerprint": "c318990862c82973", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b6b985284697ac3b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/billing/meter-overage/route.ts:123"}, "properties": {"repobilityId": "e37f3a235798da4a", "scanner": "scanner-primary", "fingerprint": "b6b985284697ac3b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3fe1fc81f46eab27", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/admin/queue-counts/route.ts:21"}, "properties": {"repobilityId": "e2717576eff34831", "scanner": "scanner-primary", "fingerprint": "3fe1fc81f46eab27", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7b0fdfe787cd6dcf", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/admin/leads/route.ts:5"}, "properties": {"repobilityId": "64ae9f775fc407e7", "scanner": "scanner-primary", "fingerprint": "7b0fdfe787cd6dcf", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1c0c01afab3c8854", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/admin/reps/[id]/claims/route.ts:67"}, "properties": {"repobilityId": "cb868e0d1897f019", "scanner": "scanner-primary", "fingerprint": "1c0c01afab3c8854", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c2ce828b283a8e04", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/admin/import/commit/route.ts:104"}, "properties": {"repobilityId": "890eee83eb8cf1e8", "scanner": "scanner-primary", "fingerprint": "c2ce828b283a8e04", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e29351e9033fd288", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/admin/import/unmatched/[id]/convert/route.ts:100"}, "properties": {"repobilityId": "42e9f7a4186b6efe", "scanner": "scanner-primary", "fingerprint": "e29351e9033fd288", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1ed9435fe0535d06", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/admin/activation/route.ts:7"}, "properties": {"repobilityId": "42bf8c7bbed98fe0", "scanner": "scanner-primary", "fingerprint": "1ed9435fe0535d06", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-edc641e1a6b3f8bb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/admin/production/needs-install/route.ts:38"}, "properties": {"repobilityId": "2c06bda92ea9147c", "scanner": "scanner-primary", "fingerprint": "edc641e1a6b3f8bb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-699411f5c7e2758a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/admin/qa-review/[id]/deep-qa/route.ts:14"}, "properties": {"repobilityId": "6fc94467d51fc3e1", "scanner": "scanner-primary", "fingerprint": "699411f5c7e2758a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c53d0060786caf59", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/admin/qa-review/[id]/release/route.ts:36"}, "properties": {"repobilityId": "54c44f7f95241c55", "scanner": "scanner-primary", "fingerprint": "c53d0060786caf59", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e6f865686e60d9d7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/admin/agent-recommendations/[id]/approve/route.ts:100"}, "properties": {"repobilityId": "a90a8c0b36df98c0", "scanner": "scanner-primary", "fingerprint": "e6f865686e60d9d7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f96ee03acf8b6d7b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/admin/whats-next/route.ts:108"}, "properties": {"repobilityId": "071dab76a1830821", "scanner": "scanner-primary", "fingerprint": "f96ee03acf8b6d7b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8fdc5baca06ac4cc", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/admin/claims-grid/route.ts:135"}, "properties": {"repobilityId": "6790f309d6daca44", "scanner": "scanner-primary", "fingerprint": "8fdc5baca06ac4cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72f8008af706e31f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/admin/retail/settings/route.ts:97"}, "properties": {"repobilityId": "9098d53c2cdc8f13", "scanner": "scanner-primary", "fingerprint": "72f8008af706e31f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c12549d2edd0a5d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/claim/upload-estimate/route.ts:151"}, "properties": {"repobilityId": "ef84ea76edbdf79f", "scanner": "scanner-primary", "fingerprint": "2c12549d2edd0a5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-e98416272a9235d4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/claim/set-trades/route.ts:113"}, "properties": {"repobilityId": "767bb05bb620c689", "scanner": "scanner-primary", "fingerprint": "e98416272a9235d4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-1ef65db0a6b10138", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/claim/[id]/upload-check/route.ts:57"}, "properties": {"repobilityId": "aec81c02794c2ed3", "scanner": "scanner-primary", "fingerprint": "1ef65db0a6b10138", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-7fcb3d38328e8254", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/claim/[id]/commission-request/route.ts:72"}, "properties": {"repobilityId": "3a4fc5bfb6ebf465", "scanner": "scanner-primary", "fingerprint": "7fcb3d38328e8254", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9e43354b8888276d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/claim/[id]/assign-rep/route.ts:121"}, "properties": {"repobilityId": "e0addcf5d0e4dd02", "scanner": "scanner-primary", "fingerprint": "9e43354b8888276d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a26636a3f366b6eb", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/claim-photos/route.ts:42"}, "properties": {"repobilityId": "11cc597208b68c64", "scanner": "scanner-primary", "fingerprint": "a26636a3f366b6eb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0e82a8ca2ba89332", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/onboarding/upload/route.ts:8"}, "properties": {"repobilityId": "5fbe331d5c7c02fa", "scanner": "scanner-primary", "fingerprint": "0e82a8ca2ba89332", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01d38e19eaecf903", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/cron/upgrade-emails/route.ts:269"}, "properties": {"repobilityId": "d545d006683fb8f1", "scanner": "scanner-primary", "fingerprint": "01d38e19eaecf903", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc755cd6ff19c216", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/cron/nurture-sequence/route.ts:196"}, "properties": {"repobilityId": "f39042c48b4a0d45", "scanner": "scanner-primary", "fingerprint": "bc755cd6ff19c216", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0ae77d3611091be5", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/cron/funnel-monitor/route.ts:94"}, "properties": {"repobilityId": "b7b8fcb0a1b93f34", "scanner": "scanner-primary", "fingerprint": "0ae77d3611091be5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e27cf66c842a1032", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/app/api/cron/cron-health-canary/route.ts:150"}, "properties": {"repobilityId": "8fcd6e28a4c2b3e2", "scanner": "scanner-primary", "fingerprint": "e27cf66c842a1032", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-97ed7f7c10809976", "level": "note", "message": {"text": "Legacy-named symbol `abandoned_too_old` in src/app/api/cron/reconcile-overage/route.ts:51"}, "properties": {"repobilityId": "8f4377b9880c1ed8", "scanner": "scanner-primary", "fingerprint": "97ed7f7c10809976", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-ecb4fb45ff2045cf", "level": "note", "message": {"text": "Legacy-named symbol `storm_v1` in src/app/api/cron/leadgen-email-batch/route.ts:59"}, "properties": {"repobilityId": "fe245673e5fe11c8", "scanner": "scanner-primary", "fingerprint": "ecb4fb45ff2045cf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-832f93e4e6f48cdb", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/cron/leadgen-email-batch/route.ts:280"}, "properties": {"repobilityId": "243fa78d2ae3361f", "scanner": "scanner-primary", "fingerprint": "832f93e4e6f48cdb", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e466d20e16d18627", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/api/cron/homeowner-sequences/route.ts:78"}, "properties": {"repobilityId": "a6845f1e05fd7282", "scanner": "scanner-primary", "fingerprint": "e466d20e16d18627", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-837069f0a25b5f69", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/cron/ready-to-build-reminders/route.ts:22"}, "properties": {"repobilityId": "76fbf13de306ea45", "scanner": "scanner-primary", "fingerprint": "837069f0a25b5f69", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-60db658b034645d9", "level": "none", "message": {"text": "Commented-code block (8 lines) in src/app/api/cron/claim-brain-cadences/route.ts:22"}, "properties": {"repobilityId": "7f6a4b01f56d6c26", "scanner": "scanner-primary", "fingerprint": "60db658b034645d9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-72c8f177cb3ed4ec", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/cron/abandoner-recovery/route.ts:316"}, "properties": {"repobilityId": "a28fa8b89e8f1414", "scanner": "scanner-primary", "fingerprint": "72c8f177cb3ed4ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d8773710447de4a4", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/cron/gutter-supplements/route.ts:11"}, "properties": {"repobilityId": "a3ff47293f78eaee", "scanner": "scanner-primary", "fingerprint": "d8773710447de4a4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-52b94b8a982c6107", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/retail-estimates/[id]/invoice/route.ts:94"}, "properties": {"repobilityId": "d09f0ffee8f4adbe", "scanner": "scanner-primary", "fingerprint": "52b94b8a982c6107", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2e16ac02a3fdd7a", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/api/signatures/notify-carrier/route.ts:99"}, "properties": {"repobilityId": "cbf809b5edc07d20", "scanner": "scanner-primary", "fingerprint": "e2e16ac02a3fdd7a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-778355bba8c6d2c9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/api/signatures/notify-carrier/route.ts:106"}, "properties": {"repobilityId": "02114523c67f05ad", "scanner": "scanner-primary", "fingerprint": "778355bba8c6d2c9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-851feaf2b35f3cb4", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/track/route.ts:6"}, "properties": {"repobilityId": "18aa6e444727aab3", "scanner": "scanner-primary", "fingerprint": "851feaf2b35f3cb4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-75a612dda2e98a9d", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/api/webhooks/stripe/route.ts:131"}, "properties": {"repobilityId": "749d0b941c7b5111", "scanner": "scanner-primary", "fingerprint": "75a612dda2e98a9d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cc605cf1c913651e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/team-claims/claim/route.ts:25"}, "properties": {"repobilityId": "f4a09775572e0fe1", "scanner": "scanner-primary", "fingerprint": "cc605cf1c913651e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-b13fa075698b5d08", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/api/invoices/route.ts:234"}, "properties": {"repobilityId": "fcf4635a3ba19989", "scanner": "scanner-primary", "fingerprint": "b13fa075698b5d08", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ba21490a6b40b596", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/dashboard/dashboard-content.tsx:81"}, "properties": {"repobilityId": "52299e1f428b1574", "scanner": "scanner-primary", "fingerprint": "ba21490a6b40b596", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0be812e1e5683a21", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/photo-review/photo-review-content.tsx:126"}, "properties": {"repobilityId": "6f72296869623f8b", "scanner": "scanner-primary", "fingerprint": "0be812e1e5683a21", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9597dcbce913fdae", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/dashboard/new-claim/page.tsx:47"}, "properties": {"repobilityId": "da13ed02ff375f60", "scanner": "scanner-primary", "fingerprint": "9597dcbce913fdae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-6412b5a09b14a9e5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/new-claim/page.tsx:292"}, "properties": {"repobilityId": "bfbb5c0f42137170", "scanner": "scanner-primary", "fingerprint": "6412b5a09b14a9e5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4290bb6d4ef922cf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/settings/page.tsx:1639"}, "properties": {"repobilityId": "f602fa746b3c319a", "scanner": "scanner-primary", "fingerprint": "4290bb6d4ef922cf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-50c4d42410f0fe65", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/scope-review/scope-review-content.tsx:62"}, "properties": {"repobilityId": "6fb5dab3c2bbbf82", "scanner": "scanner-primary", "fingerprint": "50c4d42410f0fe65", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-edcba43c4e21204e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/dashboard/storm-leads/storm-leads-client.tsx:229"}, "properties": {"repobilityId": "4cfd9262754e77ac", "scanner": "scanner-primary", "fingerprint": "edcba43c4e21204e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8d3ef7c7b34f12b6", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/storm-leads/storm-leads-client.tsx:801"}, "properties": {"repobilityId": "5a462f1fd7741d9e", "scanner": "scanner-primary", "fingerprint": "8d3ef7c7b34f12b6", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-67e437d197a3b9b1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/admin/imports/unmatched/page.tsx:73"}, "properties": {"repobilityId": "d08d4c0c4633d29c", "scanner": "scanner-primary", "fingerprint": "67e437d197a3b9b1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6850fe828e646099", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/dashboard/claim/[id]/page.tsx:292"}, "properties": {"repobilityId": "628d2038ab49b565", "scanner": "scanner-primary", "fingerprint": "6850fe828e646099", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9cc9a372dc1a6aba", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/claim/[id]/page.tsx:583"}, "properties": {"repobilityId": "ef42b2086c835ba5", "scanner": "scanner-primary", "fingerprint": "9cc9a372dc1a6aba", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8cb9880339d13602", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/company-docs/company-docs-client.tsx:104"}, "properties": {"repobilityId": "06fb111aee553c22", "scanner": "scanner-primary", "fingerprint": "8cb9880339d13602", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c8c2d488462cfaf7", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/repair-review/repair-review-content.tsx:41"}, "properties": {"repobilityId": "613131009f2b4d41", "scanner": "scanner-primary", "fingerprint": "c8c2d488462cfaf7", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-657c20bbdc2f04e4", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/email-templates/page.tsx:41"}, "properties": {"repobilityId": "113cee6d36665b39", "scanner": "scanner-primary", "fingerprint": "657c20bbdc2f04e4", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ee17264593edbbe2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/repair/[id]/page.tsx:151"}, "properties": {"repobilityId": "54ab34c6683ad03b", "scanner": "scanner-primary", "fingerprint": "ee17264593edbbe2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9524258599370dd2", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/marketing-assets/page.tsx:44"}, "properties": {"repobilityId": "1b4787440b4b16bd", "scanner": "scanner-primary", "fingerprint": "9524258599370dd2", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-cdbf3c0a5cb5d423", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/retail-estimates/retail-estimates-list.tsx:152"}, "properties": {"repobilityId": "869d2a91d66b7951", "scanner": "scanner-primary", "fingerprint": "cdbf3c0a5cb5d423", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-8e6c04631dce4619", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/dashboard/send-document/page.tsx:78"}, "properties": {"repobilityId": "7afa88e2677e5109", "scanner": "scanner-primary", "fingerprint": "8e6c04631dce4619", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-3171134125582471", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/signup/page.tsx:108"}, "properties": {"repobilityId": "54d6ca9fb905b6cc", "scanner": "scanner-primary", "fingerprint": "3171134125582471", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c3a67fff88611a66", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/signup/signup-client.tsx:81"}, "properties": {"repobilityId": "72fc4f219f134341", "scanner": "scanner-primary", "fingerprint": "c3a67fff88611a66", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-805899dc2ae16ba3", "level": "note", "message": {"text": "Legacy-named symbol `canSubmitLegacy` in src/app/sign/[id]/sign-form.tsx:291"}, "properties": {"repobilityId": "2049f0ac304a5d1f", "scanner": "scanner-primary", "fingerprint": "805899dc2ae16ba3", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-3283bde4ca8a77fe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/sign/[id]/sign-form.tsx:229"}, "properties": {"repobilityId": "9d00f3f604608048", "scanner": "scanner-primary", "fingerprint": "3283bde4ca8a77fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-181aa760956c8433", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/app/admin/admin-dashboard.tsx:604"}, "properties": {"repobilityId": "17013f986905a3df", "scanner": "scanner-primary", "fingerprint": "181aa760956c8433", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40c7f1866a51f1c9", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/claim/[id]/admin-claim-detail.tsx:149"}, "properties": {"repobilityId": "be8471cb8d578855", "scanner": "scanner-primary", "fingerprint": "40c7f1866a51f1c9", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0437460608047ca2", "level": "none", "message": {"text": "Commented-code block (15 lines) in src/app/admin/qa-review/page.tsx:22"}, "properties": {"repobilityId": "e6a62412ea826e31", "scanner": "scanner-primary", "fingerprint": "0437460608047ca2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bde8fe4744a932ec", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/admin/qa-review/qa-review-queue.tsx:147"}, "properties": {"repobilityId": "07970cdbb4132ad4", "scanner": "scanner-primary", "fingerprint": "bde8fe4744a932ec", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ad2fc439bcd82bb", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/admin/api-keys/api-keys-client.tsx:53"}, "properties": {"repobilityId": "be54bee0b628f24d", "scanner": "scanner-primary", "fingerprint": "8ad2fc439bcd82bb", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6cb42ca33fb559ea", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/instant-forensic/page.tsx:5"}, "properties": {"repobilityId": "1a072b7709bbd7b0", "scanner": "scanner-primary", "fingerprint": "6cb42ca33fb559ea", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-53d11d5154503ef0", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/onboarding/profile/page.tsx:13"}, "properties": {"repobilityId": "915c2a82dde38836", "scanner": "scanner-primary", "fingerprint": "53d11d5154503ef0", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-09b6fd0184fac8f7", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/onboarding/profile/onboarding-client.tsx:16"}, "properties": {"repobilityId": "24f91c7433526710", "scanner": "scanner-primary", "fingerprint": "09b6fd0184fac8f7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-92d9922a8e828cfc", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/app/onboarding/profile/onboarding-client.tsx:97"}, "properties": {"repobilityId": "ba0bbe31da94b8a8", "scanner": "scanner-primary", "fingerprint": "92d9922a8e828cfc", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f33851c6e24d88c9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/start/page.tsx:5"}, "properties": {"repobilityId": "d5db34a6303e91e0", "scanner": "scanner-primary", "fingerprint": "f33851c6e24d88c9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8ddc995f8eafee28", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/win/[token]/opengraph-image.tsx:4"}, "properties": {"repobilityId": "111debc78ec0200f", "scanner": "scanner-primary", "fingerprint": "8ddc995f8eafee28", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f5b4153769218c82", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/pricing/page.tsx:15"}, "properties": {"repobilityId": "cfe16f994c366f64", "scanner": "scanner-primary", "fingerprint": "f5b4153769218c82", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-eb889f8c28aa3336", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/app/instant/continue/instant-recover-client.tsx:8"}, "properties": {"repobilityId": "7b9fae3fd8ec0c83", "scanner": "scanner-primary", "fingerprint": "eb889f8c28aa3336", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-01da07a168da3989", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/app/instant/continue/page.tsx:11"}, "properties": {"repobilityId": "f7338c1df62e8af6", "scanner": "scanner-primary", "fingerprint": "01da07a168da3989", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16ed1e8b86260a86", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/app/welcome/page.tsx:10"}, "properties": {"repobilityId": "31c21201771ad5b4", "scanner": "scanner-primary", "fingerprint": "16ed1e8b86260a86", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-08add460dad29218", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/track.ts:198"}, "properties": {"repobilityId": "10e08b8aa7bd7605", "scanner": "scanner-primary", "fingerprint": "08add460dad29218", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-20e5db6dc3e6700c", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/claim-reveal.ts:58"}, "properties": {"repobilityId": "1a94258fc572d9bc", "scanner": "scanner-primary", "fingerprint": "20e5db6dc3e6700c", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2cf7ade4a8af2f7a", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/stripe-config.test.ts:69"}, "properties": {"repobilityId": "7b051d86fcf67443", "scanner": "scanner-primary", "fingerprint": "2cf7ade4a8af2f7a", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4eaba6ea318490c2", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/report-mode.ts:3"}, "properties": {"repobilityId": "e2b36d34c2aad44a", "scanner": "scanner-primary", "fingerprint": "4eaba6ea318490c2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-726b29250a1dc16f", "level": "note", "message": {"text": "Legacy-named symbol `deep_copy` in src/lib/meta-ads.ts:258"}, "properties": {"repobilityId": "0cc68aca751524e5", "scanner": "scanner-primary", "fingerprint": "726b29250a1dc16f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-c1681358a0ed22b2", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/meta-ads.ts:655"}, "properties": {"repobilityId": "1728fcf1192e9222", "scanner": "scanner-primary", "fingerprint": "c1681358a0ed22b2", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-3aaadd91a49e9b9b", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/meta-ads.ts:171"}, "properties": {"repobilityId": "b70e9733e21b38f6", "scanner": "scanner-primary", "fingerprint": "3aaadd91a49e9b9b", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-395af471a3381d49", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/upload-utils.ts:76"}, "properties": {"repobilityId": "823c4f9ababb0658", "scanner": "scanner-primary", "fingerprint": "395af471a3381d49", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-865588567a89386e", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/meta-capi.ts:3"}, "properties": {"repobilityId": "55b3a51d6029a425", "scanner": "scanner-primary", "fingerprint": "865588567a89386e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ec7ffa0a2b9a2cc8", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/claim-constants.ts:3"}, "properties": {"repobilityId": "511faafe65d1f44b", "scanner": "scanner-primary", "fingerprint": "ec7ffa0a2b9a2cc8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d99133c9f9022c06", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/agent-common.ts:42"}, "properties": {"repobilityId": "0add40e5d8aed980", "scanner": "scanner-primary", "fingerprint": "d99133c9f9022c06", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-a2b9fe06d2115c9b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/team-bcc.ts:35"}, "properties": {"repobilityId": "cc769bb59bda47e8", "scanner": "scanner-primary", "fingerprint": "a2b9fe06d2115c9b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-16493fcb53a744d3", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/document-quality/qa-checks.ts:194"}, "properties": {"repobilityId": "4f2d4a2cc6add201", "scanner": "scanner-primary", "fingerprint": "16493fcb53a744d3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c42409c089392206", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/lib/analytics/ga4-paths.ts:3"}, "properties": {"repobilityId": "5927d177f232f621", "scanner": "scanner-primary", "fingerprint": "c42409c089392206", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f0150e7c9e6017e1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/analytics/ga4-paths.ts:29"}, "properties": {"repobilityId": "c83459a823998cb5", "scanner": "scanner-primary", "fingerprint": "f0150e7c9e6017e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-5afba4edea142a72", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/funnel-monitor/ai-insight.ts:7"}, "properties": {"repobilityId": "002e0e9aea85839e", "scanner": "scanner-primary", "fingerprint": "5afba4edea142a72", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-eb9004d2e4c2207f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/funnel-monitor/sources/meta-ads.ts:128"}, "properties": {"repobilityId": "794d7f689150bd84", "scanner": "scanner-primary", "fingerprint": "eb9004d2e4c2207f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-e2ba79926f10338f", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/funnel-monitor/sources/supabase.ts:123"}, "properties": {"repobilityId": "adc70eda92070b1c", "scanner": "scanner-primary", "fingerprint": "e2ba79926f10338f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-0773b21b334e82ed", "level": "note", "message": {"text": "Legacy-named symbol `usarm_storm_v1` in src/lib/leadgen/templates.ts:22"}, "properties": {"repobilityId": "a4d3328b6b94dedc", "scanner": "scanner-primary", "fingerprint": "0773b21b334e82ed", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-1c81ef77b0f38fc6", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/lib/leadgen/templates.ts:120"}, "properties": {"repobilityId": "9b8c5b97072da09c", "scanner": "scanner-primary", "fingerprint": "1c81ef77b0f38fc6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc5ee2482dc3fa7d", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/supabase/middleware.ts:49"}, "properties": {"repobilityId": "24bc8c3ea43379db", "scanner": "scanner-primary", "fingerprint": "dc5ee2482dc3fa7d", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d03f2d330cf015f9", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/supabase/admin.ts:3"}, "properties": {"repobilityId": "a11f3ee5c7d21cd4", "scanner": "scanner-primary", "fingerprint": "d03f2d330cf015f9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c73901108a8d8b1f", "level": "none", "message": {"text": "Commented-code block (11 lines) in src/lib/storm/storm-ads.ts:58"}, "properties": {"repobilityId": "8885489af3b1bd00", "scanner": "scanner-primary", "fingerprint": "c73901108a8d8b1f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-f8c1ecdf453d38e1", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 src/lib/storm/noaa-spc.ts:111"}, "properties": {"repobilityId": "86f28283cf4c76f1", "scanner": "scanner-primary", "fingerprint": "f8c1ecdf453d38e1", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-66c4bd842a49fcd1", "level": "none", "message": {"text": "Commented-code block (9 lines) in src/lib/acculynx/inbound-sync.ts:289"}, "properties": {"repobilityId": "7e4099f0d8f4a13c", "scanner": "scanner-primary", "fingerprint": "66c4bd842a49fcd1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-c974ddd7425c9089", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/lib/importers/address-matcher.ts:158"}, "properties": {"repobilityId": "e46fe6eb79b1bee2", "scanner": "scanner-primary", "fingerprint": "c974ddd7425c9089", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-55e923da39d3b6c1", "level": "none", "message": {"text": "Commented-code block (10 lines) in src/lib/seo/locations.ts:7"}, "properties": {"repobilityId": "5c3c6494a61ac83b", "scanner": "scanner-primary", "fingerprint": "55e923da39d3b6c1", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-cec97a47d770a265", "level": "note", "message": {"text": "101 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "8e5b02ed23db3686", "scanner": "scanner-primary", "fingerprint": "cec97a47d770a265", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "8ac79cd19bf1486d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "f4cb424042dc2867", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "039c53ad462b0eb1", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "861b16445adbdfa6", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "0c4e60f01ac5c29f", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "5065949a30bcc963", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "791717dd07e1f349", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "514129811b2fecc2", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "1e0368c5c67335f1", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "fcb2ea033bf0b19d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "2c2ffc528b8f832e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "8d922ce1b3077117", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "3e387e5527e4edfc", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "eacada07b797813a", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "63bb080485cc9efd", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-f341860ab6a90be6", "level": "note", "message": {"text": "Near-duplicate function bodies in 17 places"}, "properties": {"repobilityId": "7db01eb4436f1da8", "scanner": "scanner-primary", "fingerprint": "f341860ab6a90be6", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-02525d39071dd2c7", "level": "note", "message": {"text": "Near-duplicate function bodies in 5 places"}, "properties": {"repobilityId": "d48a223364906265", "scanner": "scanner-primary", "fingerprint": "02525d39071dd2c7", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "cd3e44c59763487f", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "f81620a970662d59", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-46969939caf8120b", "level": "note", "message": {"text": "Near-duplicate function bodies in 9 places"}, "properties": {"repobilityId": "5fa62d7569b359e3", "scanner": "scanner-primary", "fingerprint": "46969939caf8120b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-9a4107ab03f4685d", "level": "error", "message": {"text": "FastAPI POST `clone_to_pricelist` without auth dependency \u2014 services/xactimate-worker/main.py:185"}, "properties": {"repobilityId": "59e9eff7a51ac9e8", "scanner": "scanner-primary", "fingerprint": "9a4107ab03f4685d", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "services/xactimate-worker/main.py"}, "region": {"startLine": 185}}}]}, {"ruleId": "scanner-9b3348f87b912df6", "level": "error", "message": {"text": "FastAPI POST `agent_process_claim` without auth dependency \u2014 backend/public_richard.py:136"}, "properties": {"repobilityId": "8b28d10c30e1c5a5", "scanner": "scanner-primary", "fingerprint": "9b3348f87b912df6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/public_richard.py"}, "region": {"startLine": 136}}}]}, {"ruleId": "scanner-5f7abf23844c3d68", "level": "error", "message": {"text": "FastAPI POST `agent_draft_supplement` without auth dependency \u2014 backend/public_richard.py:177"}, "properties": {"repobilityId": "ccfb9195b2be873b", "scanner": "scanner-primary", "fingerprint": "5f7abf23844c3d68", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/public_richard.py"}, "region": {"startLine": 177}}}]}, {"ruleId": "scanner-024f64b8f2d5e17e", "level": "error", "message": {"text": "FastAPI POST `agent_annotate_photo` without auth dependency \u2014 backend/public_richard.py:205"}, "properties": {"repobilityId": "3e3c357a23f05cdf", "scanner": "scanner-primary", "fingerprint": "024f64b8f2d5e17e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/public_richard.py"}, "region": {"startLine": 205}}}]}, {"ruleId": "scanner-a554ea42d0f9c572", "level": "error", "message": {"text": "FastAPI POST `create_claim` without auth dependency \u2014 backend/crm_api.py:563"}, "properties": {"repobilityId": "285425c123b64ae4", "scanner": "scanner-primary", "fingerprint": "a554ea42d0f9c572", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/crm_api.py"}, "region": {"startLine": 563}}}]}, {"ruleId": "scanner-203923272ab6c5e6", "level": "error", "message": {"text": "FastAPI POST `remote_sms` without auth dependency \u2014 backend/remote_richard.py:1806"}, "properties": {"repobilityId": "88c21ff222e9ae10", "scanner": "scanner-primary", "fingerprint": "203923272ab6c5e6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/remote_richard.py"}, "region": {"startLine": 1806}}}]}, {"ruleId": "scanner-c5b244948914ab09", "level": "error", "message": {"text": "FastAPI POST `remote_whatsapp` without auth dependency \u2014 backend/remote_richard.py:2267"}, "properties": {"repobilityId": "0456eb18c77a4c4a", "scanner": "scanner-primary", "fingerprint": "c5b244948914ab09", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/remote_richard.py"}, "region": {"startLine": 2267}}}]}, {"ruleId": "scanner-acd69107e7872b37", "level": "error", "message": {"text": "FastAPI POST `remote_email` without auth dependency \u2014 backend/remote_richard.py:2333"}, "properties": {"repobilityId": "9122264c0dc3efba", "scanner": "scanner-primary", "fingerprint": "acd69107e7872b37", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/remote_richard.py"}, "region": {"startLine": 2333}}}]}, {"ruleId": "scanner-817c915c7741c804", "level": "error", "message": {"text": "FastAPI POST `upload_link_files` without auth dependency \u2014 backend/upload_link.py:220"}, "properties": {"repobilityId": "4015e538c46d1fab", "scanner": "scanner-primary", "fingerprint": "817c915c7741c804", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "backend/upload_link.py"}, "region": {"startLine": 220}}}]}, {"ruleId": "scanner-675b66b7f28e9ad1", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/money-strip (src/components/money-strip.tsx:44)"}, "properties": {"repobilityId": "d90b2ad17536c270", "scanner": "scanner-primary", "fingerprint": "675b66b7f28e9ad1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-766b8d168a62ac02", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/money-strip-meta (src/components/money-strip.tsx:70)"}, "properties": {"repobilityId": "0c5c236bd248e9fb", "scanner": "scanner-primary", "fingerprint": "766b8d168a62ac02", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c299b4b709365336", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/money-strip (src/components/money-strip.tsx:92)"}, "properties": {"repobilityId": "b35124748cbc4ec2", "scanner": "scanner-primary", "fingerprint": "c299b4b709365336", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aee68a53f7d6a547", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/crews (src/components/claim-production-actions.tsx:81)"}, "properties": {"repobilityId": "7e81a806ab52f030", "scanner": "scanner-primary", "fingerprint": "aee68a53f7d6a547", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-010df3df770482fc", "level": "error", "message": {"text": "Dangling fetch: POST /api/photos/annotate (src/components/photo-markup-modal.tsx:171)"}, "properties": {"repobilityId": "081cafa015902850", "scanner": "scanner-primary", "fingerprint": "010df3df770482fc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-54173d8ef22f4e2d", "level": "error", "message": {"text": "Dangling fetch: POST /api/photos/annotate (src/components/photo-markup-modal.tsx:210)"}, "properties": {"repobilityId": "691731207a4ba86a", "scanner": "scanner-primary", "fingerprint": "54173d8ef22f4e2d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bd0913a6a376b4ec", "level": "error", "message": {"text": "Dangling fetch: POST /api/onboarding/upload (src/components/onboarding-chat.tsx:131)"}, "properties": {"repobilityId": "9268416fea54d437", "scanner": "scanner-primary", "fingerprint": "bd0913a6a376b4ec", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f1ea3b3ec39f45f5", "level": "error", "message": {"text": "Dangling fetch: POST /api/onboarding/upload (src/components/onboarding-chat.tsx:153)"}, "properties": {"repobilityId": "173d5d5c882260b6", "scanner": "scanner-primary", "fingerprint": "f1ea3b3ec39f45f5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-289a6584f4da1717", "level": "error", "message": {"text": "Dangling fetch: POST /api/capi-event (src/components/onboarding-chat.tsx:234)"}, "properties": {"repobilityId": "6fca05f7bed245e4", "scanner": "scanner-primary", "fingerprint": "289a6584f4da1717", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-63b66268bf0852bf", "level": "error", "message": {"text": "Dangling fetch: GET /api/invoices?claim_id=${claimId} (src/components/invoice-builder.tsx:46)"}, "properties": {"repobilityId": "90457aca26cd9f85", "scanner": "scanner-primary", "fingerprint": "63b66268bf0852bf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-463522c1552e80da", "level": "error", "message": {"text": "Dangling fetch: POST /api/invoices (src/components/invoice-builder.tsx:72)"}, "properties": {"repobilityId": "b3b1e623c7feb212", "scanner": "scanner-primary", "fingerprint": "463522c1552e80da", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-194811d5230a7aa3", "level": "error", "message": {"text": "Dangling fetch: GET /api/invoices/${invoiceId}/pdf (src/components/invoice-builder.tsx:107)"}, "properties": {"repobilityId": "e3acf5851954a4b9", "scanner": "scanner-primary", "fingerprint": "194811d5230a7aa3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-97c9793ca002944d", "level": "error", "message": {"text": "Dangling fetch: PUT /api/invoices (src/components/invoice-builder.tsx:137)"}, "properties": {"repobilityId": "0ec3988aaf6a09e2", "scanner": "scanner-primary", "fingerprint": "97c9793ca002944d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8b4790a39717f73b", "level": "error", "message": {"text": "Dangling fetch: POST /api/invoices/payment-link (src/components/invoice-builder.tsx:169)"}, "properties": {"repobilityId": "6ae73db95a967954", "scanner": "scanner-primary", "fingerprint": "8b4790a39717f73b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c9921a1a319e5d36", "level": "error", "message": {"text": "Dangling fetch: GET /api/sales-manager/rep-actions (src/components/rep-action-center.tsx:163)"}, "properties": {"repobilityId": "9f5134c40d387c88", "scanner": "scanner-primary", "fingerprint": "c9921a1a319e5d36", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3846cd27f7c80e7e", "level": "error", "message": {"text": "Dangling fetch: GET /api/claim/${claimId}/expense (src/components/job-pnl-card.tsx:71)"}, "properties": {"repobilityId": "be54e4e15dbb136a", "scanner": "scanner-primary", "fingerprint": "3846cd27f7c80e7e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-03af7417e7c347aa", "level": "error", "message": {"text": "Dangling fetch: GET /api/scope-review?claim_id=${claimId} (src/components/estimate-view.tsx:63)"}, "properties": {"repobilityId": "3467d147bdbde863", "scanner": "scanner-primary", "fingerprint": "03af7417e7c347aa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e50da3909e3e2e36", "level": "error", "message": {"text": "Dangling fetch: GET /api/claim-photos?claim_id=${claimId} (src/components/estimate-view.tsx:72)"}, "properties": {"repobilityId": "842768397036da36", "scanner": "scanner-primary", "fingerprint": "e50da3909e3e2e36", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-02fc5c2c854d5bcf", "level": "error", "message": {"text": "Dangling fetch: GET /api/scope-comparison?claim_id=${claimId} (src/components/estimate-view.tsx:79)"}, "properties": {"repobilityId": "90b1918fb21df3e1", "scanner": "scanner-primary", "fingerprint": "02fc5c2c854d5bcf", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bf8e7ab927629c1e", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/production/claim-trades?claim_id=${claimId} (src/components/production-trades-card.tsx:42)"}, "properties": {"repobilityId": "510dfc453dfcad09", "scanner": "scanner-primary", "fingerprint": "bf8e7ab927629c1e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8c176f4d0029b858", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/production/claim-trades (src/components/production-trades-card.tsx:60)"}, "properties": {"repobilityId": "a2ede6f6b240d544", "scanner": "scanner-primary", "fingerprint": "8c176f4d0029b858", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3da120da0ed6322f", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/retail/settings (src/components/retail-settings-modal.tsx:46)"}, "properties": {"repobilityId": "a170b6c9b574f38b", "scanner": "scanner-primary", "fingerprint": "3da120da0ed6322f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa1952033f18c1cc", "level": "error", "message": {"text": "Dangling fetch: PUT /api/admin/retail/settings (src/components/retail-settings-modal.tsx:94)"}, "properties": {"repobilityId": "853c228225b23f0e", "scanner": "scanner-primary", "fingerprint": "fa1952033f18c1cc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-13fb55114f648e9b", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/retail/settings (src/components/retail-settings-modal.tsx:124)"}, "properties": {"repobilityId": "fb33141bff219b85", "scanner": "scanner-primary", "fingerprint": "13fb55114f648e9b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-07688de25027ea8b", "level": "error", "message": {"text": "Dangling fetch: POST /api/homeowner/send-now (src/components/homeowner-engagement-card.tsx:100)"}, "properties": {"repobilityId": "7720692bb6cfaaa5", "scanner": "scanner-primary", "fingerprint": "07688de25027ea8b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9249ee3667f7e815", "level": "error", "message": {"text": "Dangling fetch: POST /api/homeowner/sequence (src/components/homeowner-engagement-card.tsx:122)"}, "properties": {"repobilityId": "18018a3b0326f1e5", "scanner": "scanner-primary", "fingerprint": "9249ee3667f7e815", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6863153150aad8be", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/production/unlinked-installs (src/components/unlinked-installs-list.tsx:49)"}, "properties": {"repobilityId": "da272e61f72ee580", "scanner": "scanner-primary", "fingerprint": "6863153150aad8be", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-828de2fd6ba6b627", "level": "error", "message": {"text": "Dangling fetch: POST /api/integrations/acculynx/sync-calendar (src/components/unlinked-installs-list.tsx:71)"}, "properties": {"repobilityId": "6584e7705dddd9ce", "scanner": "scanner-primary", "fingerprint": "828de2fd6ba6b627", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6b2dafef7d429052", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/production/unlinked-installs/${ev.id}/link (src/components/unlinked-installs-list.tsx:173)"}, "properties": {"repobilityId": "dc5508f900539e0b", "scanner": "scanner-primary", "fingerprint": "6b2dafef7d429052", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-41d3bde77047efa1", "level": "error", "message": {"text": "Dangling fetch: POST /api/sample/brain/chat (src/components/sample-claim-brain-chat.tsx:66)"}, "properties": {"repobilityId": "798ac808e190a90d", "scanner": "scanner-primary", "fingerprint": "41d3bde77047efa1", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-46eb1e36ff83986d", "level": "error", "message": {"text": "Dangling fetch: GET /api/claim/${props.claimId}/checkpoints (src/components/claim-checkpoints.tsx:71)"}, "properties": {"repobilityId": "5def12e383275026", "scanner": "scanner-primary", "fingerprint": "46eb1e36ff83986d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fc23a780087b4969", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/production/claim-trades?claim_id=${claimId} (src/components/trade-coverage-strip.tsx:25)"}, "properties": {"repobilityId": "b3ba6f596e38eaf8", "scanner": "scanner-primary", "fingerprint": "fc23a780087b4969", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e872f3d5bb4d22f2", "level": "error", "message": {"text": "Dangling fetch: POST /api/notify-signup (src/components/hero-signup-form.tsx:86)"}, "properties": {"repobilityId": "60a18bef81467505", "scanner": "scanner-primary", "fingerprint": "e872f3d5bb4d22f2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c722aefc1a82ec4c", "level": "error", "message": {"text": "Dangling fetch: POST /api/claim/${claimId}/commission-request (src/components/commission-request-modal.tsx:105)"}, "properties": {"repobilityId": "988b3c6fbd134582", "scanner": "scanner-primary", "fingerprint": "c722aefc1a82ec4c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e4a9878aa812e185", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/queue-counts (src/components/admin-nav.tsx:23)"}, "properties": {"repobilityId": "8f2eaed3205db72f", "scanner": "scanner-primary", "fingerprint": "e4a9878aa812e185", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ec6bc01b074ed5fa", "level": "error", "message": {"text": "Dangling fetch: GET /api/roof-sections?claim_id=${claimId} (src/components/roof-sections-editor.tsx:24)"}, "properties": {"repobilityId": "6b850deeaaf4c9e2", "scanner": "scanner-primary", "fingerprint": "ec6bc01b074ed5fa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-38760d48fcf25198", "level": "error", "message": {"text": "Dangling fetch: PUT /api/roof-sections (src/components/roof-sections-editor.tsx:54)"}, "properties": {"repobilityId": "e0bc4a15778f2ca1", "scanner": "scanner-primary", "fingerprint": "38760d48fcf25198", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e9a87d9826a7ad02", "level": "error", "message": {"text": "Dangling fetch: POST /api/onboarding/dismiss (src/components/onboarding-checklist.tsx:177)"}, "properties": {"repobilityId": "acaedcee6406edde", "scanner": "scanner-primary", "fingerprint": "e9a87d9826a7ad02", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a9c8f84f201c1676", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/whats-next (src/components/whats-next-hero.tsx:63)"}, "properties": {"repobilityId": "e33d36c758c3ea61", "scanner": "scanner-primary", "fingerprint": "a9c8f84f201c1676", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf93e16b3735ee18", "level": "error", "message": {"text": "Dangling fetch: POST /api/onboarding/upload (src/components/admin-brain-chat.tsx:356)"}, "properties": {"repobilityId": "5f6d92e8cf451f8a", "scanner": "scanner-primary", "fingerprint": "cf93e16b3735ee18", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3da39d6ab2d1db7d", "level": "error", "message": {"text": "Dangling fetch: POST /api/capi-event (src/components/admin-brain-chat.tsx:451)"}, "properties": {"repobilityId": "ebf5f8bb1aee8c0a", "scanner": "scanner-primary", "fingerprint": "3da39d6ab2d1db7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-df88e287aec7e811", "level": "error", "message": {"text": "Dangling fetch: POST /api/claim/regen (src/components/edit-report-fields-card.tsx:72)"}, "properties": {"repobilityId": "3ef6700d0a1c6c20", "scanner": "scanner-primary", "fingerprint": "df88e287aec7e811", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c66d3a41b998346f", "level": "error", "message": {"text": "Dangling fetch: POST /api/inspector-apply (src/components/inspector-application-form.tsx:31)"}, "properties": {"repobilityId": "7df3782f856d9db0", "scanner": "scanner-primary", "fingerprint": "c66d3a41b998346f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c5a1ab34c13443fc", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/production/needs-install (src/components/needs-install-list.tsx:83)"}, "properties": {"repobilityId": "3954664cd7d50908", "scanner": "scanner-primary", "fingerprint": "c5a1ab34c13443fc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3953a7d0c131119a", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/crews (src/components/needs-install-list.tsx:115)"}, "properties": {"repobilityId": "0d9fb9aeb0ef6a25", "scanner": "scanner-primary", "fingerprint": "3953a7d0c131119a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-89b113435cd436fd", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/production/schedules/bulk (src/components/needs-install-list.tsx:217)"}, "properties": {"repobilityId": "1b8539fc85ee8d94", "scanner": "scanner-primary", "fingerprint": "89b113435cd436fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-53cafc2dfd98b019", "level": "error", "message": {"text": "Dangling fetch: GET /api/signatures?claim_id=${claimId} (src/components/signature-manager.tsx:84)"}, "properties": {"repobilityId": "ca3c41cf07b6d615", "scanner": "scanner-primary", "fingerprint": "53cafc2dfd98b019", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e90721bafda39381", "level": "error", "message": {"text": "Dangling fetch: GET /api/templates (src/components/signature-manager.tsx:95)"}, "properties": {"repobilityId": "5ff0e8ddf0ad263e", "scanner": "scanner-primary", "fingerprint": "e90721bafda39381", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-41b20628cecdd921", "level": "error", "message": {"text": "Dangling fetch: POST /api/signatures (src/components/signature-manager.tsx:147)"}, "properties": {"repobilityId": "99377f5e66ead9d7", "scanner": "scanner-primary", "fingerprint": "41b20628cecdd921", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cd7bfcd528b3a118", "level": "error", "message": {"text": "Dangling fetch: POST /api/signatures/notify-carrier (src/components/signature-manager.tsx:173)"}, "properties": {"repobilityId": "2612855af729cbdb", "scanner": "scanner-primary", "fingerprint": "cd7bfcd528b3a118", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5315964926faf0ce", "level": "error", "message": {"text": "Dangling fetch: POST /api/storage/sign-upload (src/components/signature-manager.tsx:543)"}, "properties": {"repobilityId": "02035083a461ae98", "scanner": "scanner-primary", "fingerprint": "5315964926faf0ce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-39a8616a68503d78", "level": "error", "message": {"text": "Dangling fetch: POST /api/signatures (src/components/signature-manager.tsx:578)"}, "properties": {"repobilityId": "9e6f9e27e0ef4ad3", "scanner": "scanner-primary", "fingerprint": "39a8616a68503d78", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c4805ce1b6c3f618", "level": "error", "message": {"text": "Dangling fetch: POST /api/team-claims/update-files (src/components/signature-manager.tsx:594)"}, "properties": {"repobilityId": "76bcd821448ec54c", "scanner": "scanner-primary", "fingerprint": "c4805ce1b6c3f618", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-221bef24de464563", "level": "error", "message": {"text": "Dangling fetch: GET /api/public-photos?${params} (src/components/learn-photo-gallery.tsx:33)"}, "properties": {"repobilityId": "342233af7154a148", "scanner": "scanner-primary", "fingerprint": "221bef24de464563", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-783194567288d381", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/team (src/components/claim-assignment-dropdown.tsx:105)"}, "properties": {"repobilityId": "c1c743efa500f535", "scanner": "scanner-primary", "fingerprint": "783194567288d381", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-facb9f1aef15b79b", "level": "error", "message": {"text": "Dangling fetch: POST /api/claim/${claimId}/assign-rep (src/components/claim-assignment-dropdown.tsx:148)"}, "properties": {"repobilityId": "5d393fbf82df813b", "scanner": "scanner-primary", "fingerprint": "facb9f1aef15b79b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b44c15193323230f", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/richard-suggestion?${qs.toString()} (src/components/richard-suggestion-banner.tsx:86)"}, "properties": {"repobilityId": "055d7ffa2aa76991", "scanner": "scanner-primary", "fingerprint": "b44c15193323230f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a2da1a5134b7f461", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/right-rail (src/components/admin-right-rail.tsx:79)"}, "properties": {"repobilityId": "accf1b8f91a45824", "scanner": "scanner-primary", "fingerprint": "a2da1a5134b7f461", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-71c5f98936f9310e", "level": "error", "message": {"text": "Dangling fetch: POST /api/share/win (src/components/share-win-button.tsx:37)"}, "properties": {"repobilityId": "747ef8366fb339a1", "scanner": "scanner-primary", "fingerprint": "71c5f98936f9310e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ffb579642fe7d3a9", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/production/close-out (src/components/close-out-list.tsx:55)"}, "properties": {"repobilityId": "c98b93a02f239f52", "scanner": "scanner-primary", "fingerprint": "ffb579642fe7d3a9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-593ec46e63a9aa95", "level": "error", "message": {"text": "Dangling fetch: POST /api/team/invite (src/components/invite-teammate-modal.tsx:40)"}, "properties": {"repobilityId": "6bfa591dca041f2d", "scanner": "scanner-primary", "fingerprint": "593ec46e63a9aa95", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-65dd0630cd07b35f", "level": "error", "message": {"text": "Dangling fetch: POST /api/storage/sign-upload (src/components/install-supplement-builder.tsx:55)"}, "properties": {"repobilityId": "8aab98f2f58c2155", "scanner": "scanner-primary", "fingerprint": "65dd0630cd07b35f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-860b3ece6a4dad65", "level": "error", "message": {"text": "Dangling fetch: PUT /api/install-supplements (src/components/install-supplement-builder.tsx:79)"}, "properties": {"repobilityId": "0c66c63ffbf9c078", "scanner": "scanner-primary", "fingerprint": "860b3ece6a4dad65", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-31d9e31c76b4c4ef", "level": "error", "message": {"text": "Dangling fetch: GET /api/install-supplements?claim_id=${claimId} (src/components/install-supplement-builder.tsx:98)"}, "properties": {"repobilityId": "c98dd72b7c6e94bb", "scanner": "scanner-primary", "fingerprint": "31d9e31c76b4c4ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-aaf30c3585d1d9eb", "level": "error", "message": {"text": "Dangling fetch: POST /api/install-supplements (src/components/install-supplement-builder.tsx:124)"}, "properties": {"repobilityId": "3247bcb71a8b4cb6", "scanner": "scanner-primary", "fingerprint": "aaf30c3585d1d9eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-517c49af28122b9d", "level": "error", "message": {"text": "Dangling fetch: POST /api/install-supplements (src/components/install-supplement-builder.tsx:196)"}, "properties": {"repobilityId": "de40e7f6eb8114d5", "scanner": "scanner-primary", "fingerprint": "517c49af28122b9d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e57aed20390f1689", "level": "error", "message": {"text": "Dangling fetch: POST /api/install-supplements (src/components/install-supplement-builder.tsx:222)"}, "properties": {"repobilityId": "3715ac7ce4e5cf10", "scanner": "scanner-primary", "fingerprint": "e57aed20390f1689", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7ed23541fdf3a379", "level": "error", "message": {"text": "Dangling fetch: PUT /api/install-supplements (src/components/install-supplement-builder.tsx:249)"}, "properties": {"repobilityId": "de66b955417e210f", "scanner": "scanner-primary", "fingerprint": "7ed23541fdf3a379", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-026f063b761aec89", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/install-supplements?id=${id} (src/components/install-supplement-builder.tsx:262)"}, "properties": {"repobilityId": "6258b799000ec00f", "scanner": "scanner-primary", "fingerprint": "026f063b761aec89", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0df99b7814fa2cca", "level": "error", "message": {"text": "Dangling fetch: PUT /api/install-supplements (src/components/install-supplement-builder.tsx:267)"}, "properties": {"repobilityId": "66b5e883e32b2e7a", "scanner": "scanner-primary", "fingerprint": "0df99b7814fa2cca", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1cb104fa8c8a4fa2", "level": "error", "message": {"text": "Dangling fetch: PUT /api/install-supplements (src/components/install-supplement-builder.tsx:864)"}, "properties": {"repobilityId": "9872852045370e53", "scanner": "scanner-primary", "fingerprint": "1cb104fa8c8a4fa2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a33b5f6b9bfb3d57", "level": "error", "message": {"text": "Dangling fetch: PUT /api/install-supplements (src/components/install-supplement-builder.tsx:882)"}, "properties": {"repobilityId": "a7a3b7ee5b07f1e9", "scanner": "scanner-primary", "fingerprint": "a33b5f6b9bfb3d57", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e333101894908fb7", "level": "error", "message": {"text": "Dangling fetch: PUT /api/install-supplements (src/components/install-supplement-builder.tsx:892)"}, "properties": {"repobilityId": "d7b627b540766f2d", "scanner": "scanner-primary", "fingerprint": "e333101894908fb7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e6764c92f9cafa23", "level": "error", "message": {"text": "Dangling fetch: POST /api/notify-signup (src/components/mobile-magic-hero.tsx:144)"}, "properties": {"repobilityId": "ef50ec2d9c9ca543", "scanner": "scanner-primary", "fingerprint": "e6764c92f9cafa23", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c56b7783b0554af", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/import/preview (src/components/import-modal.tsx:101)"}, "properties": {"repobilityId": "dfdedb7f9e598c0d", "scanner": "scanner-primary", "fingerprint": "4c56b7783b0554af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3f1e6a012e4a9775", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/import/commit (src/components/import-modal.tsx:123)"}, "properties": {"repobilityId": "298e9531f44fd9a2", "scanner": "scanner-primary", "fingerprint": "3f1e6a012e4a9775", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-392e2e94da0d00a9", "level": "error", "message": {"text": "Dangling fetch: POST /api/claims/update (src/components/contact-registry-card.tsx:84)"}, "properties": {"repobilityId": "c403639fc6d77a66", "scanner": "scanner-primary", "fingerprint": "392e2e94da0d00a9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6e5a41adc3100df4", "level": "error", "message": {"text": "Dangling fetch: POST /api/storage/sign-upload (src/components/coc-builder.tsx:58)"}, "properties": {"repobilityId": "9b950ff443f9524c", "scanner": "scanner-primary", "fingerprint": "6e5a41adc3100df4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-28b949f8792fddcb", "level": "error", "message": {"text": "Dangling fetch: POST /api/team-claims/update-files (src/components/coc-builder.tsx:88)"}, "properties": {"repobilityId": "84e3785993d860d9", "scanner": "scanner-primary", "fingerprint": "28b949f8792fddcb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a5e522eb42659905", "level": "error", "message": {"text": "Dangling fetch: GET /api/coc?claim_id=${claimId} (src/components/coc-builder.tsx:113)"}, "properties": {"repobilityId": "2049370f7db9dd21", "scanner": "scanner-primary", "fingerprint": "a5e522eb42659905", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e924a8499b21ab1d", "level": "error", "message": {"text": "Dangling fetch: POST /api/coc (src/components/coc-builder.tsx:147)"}, "properties": {"repobilityId": "61d5c38b49ed1528", "scanner": "scanner-primary", "fingerprint": "e924a8499b21ab1d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-efd1038db1c61b49", "level": "error", "message": {"text": "Dangling fetch: PUT /api/coc (src/components/coc-builder.tsx:203)"}, "properties": {"repobilityId": "74f7ba4c53cd1587", "scanner": "scanner-primary", "fingerprint": "efd1038db1c61b49", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-53dd57ab823bf178", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/production/claim-trades?claim_id=${selectedClaimId} (src/components/schedule-claim-modal.tsx:160)"}, "properties": {"repobilityId": "a51a32d7d8910fa8", "scanner": "scanner-primary", "fingerprint": "53dd57ab823bf178", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-501a788cac491b16", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/production/schedules/${existing.id} (src/components/schedule-claim-modal.tsx:229)"}, "properties": {"repobilityId": "139be0b39865d326", "scanner": "scanner-primary", "fingerprint": "501a788cac491b16", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e2b2c8685c9ff326", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/production/schedules (src/components/schedule-claim-modal.tsx:249)"}, "properties": {"repobilityId": "1c3a652ad6c4d790", "scanner": "scanner-primary", "fingerprint": "e2b2c8685c9ff326", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4101d8a26c3777f2", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/production/schedules/${scheduleId}/notify (src/components/schedule-claim-modal.tsx:271)"}, "properties": {"repobilityId": "ba67f46462fadac5", "scanner": "scanner-primary", "fingerprint": "4101d8a26c3777f2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d16d50bd95d9041f", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/production/schedules/${existing.id} (src/components/schedule-claim-modal.tsx:318)"}, "properties": {"repobilityId": "782c0b9b419ae991", "scanner": "scanner-primary", "fingerprint": "d16d50bd95d9041f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2dec43f2822eb79e", "level": "error", "message": {"text": "Dangling fetch: GET /api/claim-emails?claim_id=${claimId} (src/components/communication-log.tsx:51)"}, "properties": {"repobilityId": "be32e2793b782441", "scanner": "scanner-primary", "fingerprint": "2dec43f2822eb79e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1cea1484485217df", "level": "error", "message": {"text": "Dangling fetch: POST /api/claim/${effectiveClaimId}/upload-check (src/components/check-upload-modal.tsx:137)"}, "properties": {"repobilityId": "15b0134b7f9da146", "scanner": "scanner-primary", "fingerprint": "1cea1484485217df", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d01563f7c53de9bd", "level": "error", "message": {"text": "Dangling fetch: GET /api/team-claims (src/components/claim-picker.tsx:30)"}, "properties": {"repobilityId": "f500eeb46f270d0c", "scanner": "scanner-primary", "fingerprint": "d01563f7c53de9bd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-27c75863d80cadb6", "level": "error", "message": {"text": "Dangling fetch: POST /api/instant-intake/upload (src/components/instant-funnel.tsx:222)"}, "properties": {"repobilityId": "454bbdc488acefc8", "scanner": "scanner-primary", "fingerprint": "27c75863d80cadb6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7ebf47d21f60d756", "level": "error", "message": {"text": "Dangling fetch: GET /api/claims/${claimId}/events?limit=200 (src/components/claim-timeline-rail.tsx:52)"}, "properties": {"repobilityId": "b4b9e33761695e37", "scanner": "scanner-primary", "fingerprint": "7ebf47d21f60d756", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ed512c367964c1ee", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/referral-analytics (src/components/admin-referral-loop-panel.tsx:94)"}, "properties": {"repobilityId": "4826026277070b73", "scanner": "scanner-primary", "fingerprint": "ed512c367964c1ee", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-12ddfbd1c486ed2b", "level": "error", "message": {"text": "Dangling fetch: POST /api/storage/sign-upload (src/components/aob-commission-modal.tsx:71)"}, "properties": {"repobilityId": "1f747854f9290f22", "scanner": "scanner-primary", "fingerprint": "12ddfbd1c486ed2b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a4858ee5d98b1e06", "level": "error", "message": {"text": "Dangling fetch: POST /api/team-claims/update-files (src/components/aob-commission-modal.tsx:85)"}, "properties": {"repobilityId": "5d8e753e56a8f57b", "scanner": "scanner-primary", "fingerprint": "a4858ee5d98b1e06", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1de02eb29e942329", "level": "error", "message": {"text": "Dangling fetch: POST /api/claim/${claim.id}/commission-request (src/components/aob-commission-modal.tsx:122)"}, "properties": {"repobilityId": "99c2c4529d947f86", "scanner": "scanner-primary", "fingerprint": "1de02eb29e942329", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-55cf7d6dd9a705ac", "level": "error", "message": {"text": "Dangling fetch: POST /api/storage/sign-upload (src/components/claim-brain-chat.tsx:1348)"}, "properties": {"repobilityId": "3d7af71ebfd9cd30", "scanner": "scanner-primary", "fingerprint": "55cf7d6dd9a705ac", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0637f82897f858fa", "level": "error", "message": {"text": "Dangling fetch: GET /api/pending-changes?claim_id=${claimId} (src/components/pending-changes-banner.tsx:25)"}, "properties": {"repobilityId": "474ae6bee2383788", "scanner": "scanner-primary", "fingerprint": "0637f82897f858fa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c40ca93e86166b36", "level": "error", "message": {"text": "Dangling fetch: POST /api/claim/reprocess (src/components/pending-changes-banner.tsx:43)"}, "properties": {"repobilityId": "294b414004e2ac69", "scanner": "scanner-primary", "fingerprint": "c40ca93e86166b36", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f644779cda494e01", "level": "error", "message": {"text": "Dangling fetch: POST /api/instant-intake/upload (src/components/start-chat.tsx:247)"}, "properties": {"repobilityId": "92d3c4c10333acb7", "scanner": "scanner-primary", "fingerprint": "f644779cda494e01", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5614016781c68a10", "level": "error", "message": {"text": "Dangling fetch: GET /api/scope-comparison?claim_id=${claimId} (src/components/scope-comparison.tsx:37)"}, "properties": {"repobilityId": "d71c529cac835cd0", "scanner": "scanner-primary", "fingerprint": "5614016781c68a10", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0dc1f097897f6b37", "level": "error", "message": {"text": "Dangling fetch: POST /api/claim/${claimId}/expense (src/components/expense-upload-modal.tsx:130)"}, "properties": {"repobilityId": "591da11b63ce3510", "scanner": "scanner-primary", "fingerprint": "0dc1f097897f6b37", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9395f2777f7ddddd", "level": "error", "message": {"text": "Dangling fetch: POST /api/production/validate/${claimId} (src/components/ready-to-build-card.tsx:152)"}, "properties": {"repobilityId": "18860eed8040fead", "scanner": "scanner-primary", "fingerprint": "9395f2777f7ddddd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2f409ec9a2cd7fba", "level": "error", "message": {"text": "Dangling fetch: POST /api/production/send/${claimId} (src/components/ready-to-build-card.tsx:177)"}, "properties": {"repobilityId": "2fc4231dd3c6f720", "scanner": "scanner-primary", "fingerprint": "2f409ec9a2cd7fba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-141e12a22799018a", "level": "error", "message": {"text": "Dangling fetch: GET /api/referrals/stats (src/components/refer-company-modal.tsx:36)"}, "properties": {"repobilityId": "2b947370638fdc19", "scanner": "scanner-primary", "fingerprint": "141e12a22799018a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-73c2ad8525d69427", "level": "error", "message": {"text": "Dangling fetch: POST /api/referrals/send (src/components/refer-company-modal.tsx:82)"}, "properties": {"repobilityId": "e87c7a0bc57cb42c", "scanner": "scanner-primary", "fingerprint": "73c2ad8525d69427", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7d996d0f739db0ef", "level": "error", "message": {"text": "Dangling fetch: POST /api/correspondence/attachments (src/components/claim-detail/communications-center.tsx:104)"}, "properties": {"repobilityId": "d4110871344ff826", "scanner": "scanner-primary", "fingerprint": "7d996d0f739db0ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4a77aed8fe2c79fa", "level": "error", "message": {"text": "Dangling fetch: POST /api/claim/upload-estimate (src/components/claim-detail/v2/tabs/scope-tab.tsx:204)"}, "properties": {"repobilityId": "f25711d8eaecb79e", "scanner": "scanner-primary", "fingerprint": "4a77aed8fe2c79fa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-44b0be11661c2290", "level": "error", "message": {"text": "Dangling fetch: POST /api/claim/set-trades (src/components/claim-detail/v2/tabs/scope-tab.tsx:341)"}, "properties": {"repobilityId": "c3bd0b4a4e70f17b", "scanner": "scanner-primary", "fingerprint": "44b0be11661c2290", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-26e3015ef1446e86", "level": "error", "message": {"text": "Dangling fetch: POST /api/pa-apply (src/app/pa-club/pa-club-content.tsx:46)"}, "properties": {"repobilityId": "2b3a547abd8dc6b2", "scanner": "scanner-primary", "fingerprint": "26e3015ef1446e86", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c89f0eccd887c832", "level": "error", "message": {"text": "Dangling fetch: POST /api/team/accept (src/app/invite/[token]/accept-client.tsx:27)"}, "properties": {"repobilityId": "949da8d8fbc053a8", "scanner": "scanner-primary", "fingerprint": "c89f0eccd887c832", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d1670472e8c2d970", "level": "error", "message": {"text": "Dangling fetch: POST /api/notify-signup (src/app/login/page.tsx:103)"}, "properties": {"repobilityId": "59ed787236272c06", "scanner": "scanner-primary", "fingerprint": "d1670472e8c2d970", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9cf4ea25d47c7cc9", "level": "error", "message": {"text": "Dangling fetch: POST /api/notify-signup (src/app/login/page.tsx:118)"}, "properties": {"repobilityId": "0b7155f601e592f0", "scanner": "scanner-primary", "fingerprint": "9cf4ea25d47c7cc9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-536db9c61e128fbe", "level": "error", "message": {"text": "Dangling fetch: POST https://api.resend.com/emails (src/app/api/welcome-email/route.ts:79)"}, "properties": {"repobilityId": "0773cf3e800bfda2", "scanner": "scanner-primary", "fingerprint": "536db9c61e128fbe", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f8fbe74dc211adc4", "level": "error", "message": {"text": "Dangling fetch: POST https://www.dumbroof.ai/api/notify-complete (src/app/api/admin/qa-review/[id]/release/route.ts:76)"}, "properties": {"repobilityId": "1b13f60dbf041973", "scanner": "scanner-primary", "fingerprint": "f8fbe74dc211adc4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-232989b6591584c0", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/cron/enrich-incomplete-profiles/route.ts:202)"}, "properties": {"repobilityId": "d7cdb439f3c47e1b", "scanner": "scanner-primary", "fingerprint": "232989b6591584c0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8b5ed2a7eb7ce5c6", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/app/api/cron/aeo-monitor/route.ts:170)"}, "properties": {"repobilityId": "3e7bad8e0dadea8c", "scanner": "scanner-primary", "fingerprint": "8b5ed2a7eb7ce5c6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c009f5c1ff77a2f8", "level": "error", "message": {"text": "Dangling fetch: GET /api/referrals/stats (src/app/dashboard/dashboard-content.tsx:115)"}, "properties": {"repobilityId": "b32cc6db93bdf920", "scanner": "scanner-primary", "fingerprint": "c009f5c1ff77a2f8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9c8cb5220dd199cd", "level": "error", "message": {"text": "Dangling fetch: GET /api/team-claims (src/app/dashboard/dashboard-content.tsx:177)"}, "properties": {"repobilityId": "231a845c60b17968", "scanner": "scanner-primary", "fingerprint": "9c8cb5220dd199cd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-11c40cf3e880c9e8", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/whats-next (src/app/dashboard/dashboard-content.tsx:1583)"}, "properties": {"repobilityId": "682d6733fac7e10d", "scanner": "scanner-primary", "fingerprint": "11c40cf3e880c9e8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9212938f0da9add9", "level": "error", "message": {"text": "Dangling fetch: GET /api/photo-review?${params} (src/app/dashboard/photo-review/photo-review-content.tsx:126)"}, "properties": {"repobilityId": "b1e2bbf119bc4354", "scanner": "scanner-primary", "fingerprint": "9212938f0da9add9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a5c534fb90f06b9d", "level": "error", "message": {"text": "Dangling fetch: POST /api/photo-review (src/app/dashboard/photo-review/photo-review-content.tsx:228)"}, "properties": {"repobilityId": "0e3653957365c4af", "scanner": "scanner-primary", "fingerprint": "a5c534fb90f06b9d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0d0347b085d1a30c", "level": "error", "message": {"text": "Dangling fetch: POST /api/claims/preflight (src/app/dashboard/new-claim/page.tsx:292)"}, "properties": {"repobilityId": "ed9dff781f612d68", "scanner": "scanner-primary", "fingerprint": "0d0347b085d1a30c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2c2410d9884c06f7", "level": "error", "message": {"text": "Dangling fetch: POST /api/capi-event (src/app/dashboard/new-claim/page.tsx:463)"}, "properties": {"repobilityId": "e42526dacb980c9b", "scanner": "scanner-primary", "fingerprint": "2c2410d9884c06f7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e31a051ef194165e", "level": "error", "message": {"text": "Dangling fetch: POST /api/billing/acknowledge-overage (src/app/dashboard/new-claim/page.tsx:711)"}, "properties": {"repobilityId": "b2c7e66df0db2b00", "scanner": "scanner-primary", "fingerprint": "e31a051ef194165e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9197662243507177", "level": "error", "message": {"text": "Dangling fetch: POST /api/billing/create-portal (src/app/dashboard/settings/page.tsx:647)"}, "properties": {"repobilityId": "05ef988855590c28", "scanner": "scanner-primary", "fingerprint": "9197662243507177", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-85b47368a431687d", "level": "error", "message": {"text": "Dangling fetch: POST /api/stripe-connect (src/app/dashboard/settings/page.tsx:1598)"}, "properties": {"repobilityId": "794c3250e0fa149b", "scanner": "scanner-primary", "fingerprint": "85b47368a431687d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b9d903875b21933d", "level": "error", "message": {"text": "Dangling fetch: GET /api/stripe-connect (src/app/dashboard/settings/page.tsx:1614)"}, "properties": {"repobilityId": "e8dd1be6e7418c15", "scanner": "scanner-primary", "fingerprint": "b9d903875b21933d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7f8c811d1d9d2c60", "level": "error", "message": {"text": "Dangling fetch: POST /api/stripe-connect (src/app/dashboard/settings/page.tsx:1639)"}, "properties": {"repobilityId": "f410ff5ed60fbf30", "scanner": "scanner-primary", "fingerprint": "7f8c811d1d9d2c60", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-15ecb28c861e3c48", "level": "error", "message": {"text": "Dangling fetch: GET /api/scope-review?claim_id=${claimId} (src/app/dashboard/scope-review/scope-review-content.tsx:62)"}, "properties": {"repobilityId": "27e651e457a9135b", "scanner": "scanner-primary", "fingerprint": "15ecb28c861e3c48", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dfd9f16740d321ce", "level": "error", "message": {"text": "Dangling fetch: POST /api/scope-review (src/app/dashboard/scope-review/scope-review-content.tsx:91)"}, "properties": {"repobilityId": "f8e34f404847da75", "scanner": "scanner-primary", "fingerprint": "dfd9f16740d321ce", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-f6faff64ac530d3d", "level": "error", "message": {"text": "Dangling fetch: PUT /api/scope-review (src/app/dashboard/scope-review/scope-review-content.tsx:140)"}, "properties": {"repobilityId": "3f8228a4ec0e14d5", "scanner": "scanner-primary", "fingerprint": "f6faff64ac530d3d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1e9977708592087e", "level": "error", "message": {"text": "Dangling fetch: POST /api/claim/reprocess (src/app/dashboard/scope-review/scope-review-content.tsx:174)"}, "properties": {"repobilityId": "2ae8a51625db1b65", "scanner": "scanner-primary", "fingerprint": "1e9977708592087e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b56c2b42ad4fe698", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/claims-grid?${params.toString()} (src/app/dashboard/reps/page.tsx:57)"}, "properties": {"repobilityId": "9e4cd5a12bacd678", "scanner": "scanner-primary", "fingerprint": "b56c2b42ad4fe698", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-69f30d19178ab256", "level": "error", "message": {"text": "Dangling fetch: GET /api/commissions/mine (src/app/dashboard/commissions/commissions-content.tsx:55)"}, "properties": {"repobilityId": "b00a6b13e2b676ca", "scanner": "scanner-primary", "fingerprint": "69f30d19178ab256", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-51141357e2df6abc", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/leadgen/campaigns/${campaignId} (src/app/dashboard/storm-leads/storm-leads-client.tsx:240)"}, "properties": {"repobilityId": "bad02d720790c786", "scanner": "scanner-primary", "fingerprint": "51141357e2df6abc", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a2ef923e3957075c", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/leadgen/campaigns/${campaignId} (src/app/dashboard/storm-leads/storm-leads-client.tsx:270)"}, "properties": {"repobilityId": "1e1516b6df957e6c", "scanner": "scanner-primary", "fingerprint": "a2ef923e3957075c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4688d8ef1a23375c", "level": "error", "message": {"text": "Dangling fetch: GET /api/leadgen/campaigns (src/app/dashboard/storm-leads/storm-leads-client.tsx:596)"}, "properties": {"repobilityId": "33dfdf08cbd92a07", "scanner": "scanner-primary", "fingerprint": "4688d8ef1a23375c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1718403a22dff8a7", "level": "error", "message": {"text": "Dangling fetch: GET /api/leadgen/sender-domain (src/app/dashboard/storm-leads/storm-leads-client.tsx:617)"}, "properties": {"repobilityId": "7621801fec8e5d67", "scanner": "scanner-primary", "fingerprint": "1718403a22dff8a7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3ac07c4a66e7c0eb", "level": "error", "message": {"text": "Dangling fetch: GET /api/leadgen/integrations (src/app/dashboard/storm-leads/storm-leads-client.tsx:641)"}, "properties": {"repobilityId": "3d71b1a12e38b664", "scanner": "scanner-primary", "fingerprint": "3ac07c4a66e7c0eb", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b6d4ca470576fce4", "level": "error", "message": {"text": "Dangling fetch: POST /api/leadgen/sender-domain (src/app/dashboard/storm-leads/storm-leads-client.tsx:671)"}, "properties": {"repobilityId": "bf87922ca5f0022c", "scanner": "scanner-primary", "fingerprint": "b6d4ca470576fce4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-952e7534fa0d77e9", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/leadgen/campaigns/${c.id} (src/app/dashboard/storm-leads/storm-leads-client.tsx:707)"}, "properties": {"repobilityId": "3ef7641536190530", "scanner": "scanner-primary", "fingerprint": "952e7534fa0d77e9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9bd56b72433ff563", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/leadgen/campaigns/${c.id} (src/app/dashboard/storm-leads/storm-leads-client.tsx:733)"}, "properties": {"repobilityId": "d0b3ff974d73adac", "scanner": "scanner-primary", "fingerprint": "9bd56b72433ff563", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-43a74ef97516f47f", "level": "error", "message": {"text": "Dangling fetch: POST /api/leadgen/campaigns (src/app/dashboard/storm-leads/storm-leads-client.tsx:801)"}, "properties": {"repobilityId": "96ce2fd74106e2fe", "scanner": "scanner-primary", "fingerprint": "43a74ef97516f47f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a4167cb46febd977", "level": "error", "message": {"text": "Dangling fetch: POST /api/leadgen/integrations (src/app/dashboard/storm-leads/storm-leads-client.tsx:829)"}, "properties": {"repobilityId": "ebbd6427a52e79ae", "scanner": "scanner-primary", "fingerprint": "a4167cb46febd977", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e7e8ace4e3b18c13", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/crews (src/app/dashboard/production/page.tsx:413)"}, "properties": {"repobilityId": "e507df29fded8de8", "scanner": "scanner-primary", "fingerprint": "e7e8ace4e3b18c13", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-af47de189ebf756c", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/crews (src/app/dashboard/production/page.tsx:432)"}, "properties": {"repobilityId": "8d6a6f3d1ddb3ade", "scanner": "scanner-primary", "fingerprint": "af47de189ebf756c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-13b01d9dc992e19c", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/claims-grid?filter=${filter}&scope=active (src/app/dashboard/admin/page.tsx:65)"}, "properties": {"repobilityId": "88b7e4f89e2584ff", "scanner": "scanner-primary", "fingerprint": "13b01d9dc992e19c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3ab2f42d709a799b", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/overview (src/app/dashboard/admin/page.tsx:68)"}, "properties": {"repobilityId": "278bb5bd3b0b3758", "scanner": "scanner-primary", "fingerprint": "3ab2f42d709a799b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a2e4480ddd956638", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/team (src/app/dashboard/admin/settings/page.tsx:336)"}, "properties": {"repobilityId": "2365cf47c130866c", "scanner": "scanner-primary", "fingerprint": "a2e4480ddd956638", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-500ba0f920e451c7", "level": "error", "message": {"text": "Dangling fetch: POST /api/storage/sign-upload (src/app/dashboard/admin/settings/page.tsx:389)"}, "properties": {"repobilityId": "d9fb6e834eaac020", "scanner": "scanner-primary", "fingerprint": "500ba0f920e451c7", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-372a9979a7aafd4b", "level": "error", "message": {"text": "Dangling fetch: POST /api/storage/sign-upload (src/app/dashboard/admin/settings/page.tsx:477)"}, "properties": {"repobilityId": "36f3d80aff199986", "scanner": "scanner-primary", "fingerprint": "372a9979a7aafd4b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-11b04543c3d1c2e4", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/carriers (src/app/dashboard/admin/carriers/page.tsx:58)"}, "properties": {"repobilityId": "5c06e6ccf8e6c01a", "scanner": "scanner-primary", "fingerprint": "11b04543c3d1c2e4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-465539c22fb97ef5", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/commissions?status=${tab} (src/app/dashboard/admin/commissions/page.tsx:66)"}, "properties": {"repobilityId": "62ac76c7f3e96370", "scanner": "scanner-primary", "fingerprint": "465539c22fb97ef5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3ce93fbaa886de12", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/commissions?status=pending (src/app/dashboard/admin/commissions/page.tsx:92)"}, "properties": {"repobilityId": "51a7e61db4eb0f56", "scanner": "scanner-primary", "fingerprint": "3ce93fbaa886de12", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3e865d4a78730110", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/commissions (src/app/dashboard/admin/commissions/page.tsx:110)"}, "properties": {"repobilityId": "6e907f8a73a07f18", "scanner": "scanner-primary", "fingerprint": "3e865d4a78730110", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c8998a4e42e7b8b2", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/import/runs?status=all (src/app/dashboard/admin/imports/page.tsx:48)"}, "properties": {"repobilityId": "7d3462e46dc28d96", "scanner": "scanner-primary", "fingerprint": "c8998a4e42e7b8b2", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e6b236bf469bd96d", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/import/unmatched?status=pending (src/app/dashboard/admin/imports/page.tsx:64)"}, "properties": {"repobilityId": "b6952c877ecd1304", "scanner": "scanner-primary", "fingerprint": "e6b236bf469bd96d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9b083f31dc159f72", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/import/rollback/${runId} (src/app/dashboard/admin/imports/page.tsx:87)"}, "properties": {"repobilityId": "4a475d43ad90576d", "scanner": "scanner-primary", "fingerprint": "9b083f31dc159f72", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-38e7f0eb1a37f273", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/import/unmatched?${params} (src/app/dashboard/admin/imports/unmatched/page.tsx:44)"}, "properties": {"repobilityId": "d465bb8661ab0c08", "scanner": "scanner-primary", "fingerprint": "38e7f0eb1a37f273", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5a181a12c1c26924", "level": "error", "message": {"text": "Dangling fetch: GET /api/claims/search?q=${encodeURIComponent(query)}&limit=10 (src/app/dashboard/admin/imports/unmatched/page.tsx:73)"}, "properties": {"repobilityId": "982f8baf53c36e33", "scanner": "scanner-primary", "fingerprint": "5a181a12c1c26924", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf05512308162efd", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/import/unmatched/${rowId}/convert (src/app/dashboard/admin/imports/unmatched/page.tsx:92)"}, "properties": {"repobilityId": "93bf7e8f6dc79a79", "scanner": "scanner-primary", "fingerprint": "cf05512308162efd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bd2b389f73f9ea4e", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/job-pnl (src/app/dashboard/admin/expenses/page.tsx:98)"}, "properties": {"repobilityId": "39479fb63af51264", "scanner": "scanner-primary", "fingerprint": "bd2b389f73f9ea4e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-42794316e101e806", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/pnl-audit (src/app/dashboard/admin/expenses/page.tsx:121)"}, "properties": {"repobilityId": "4ad039b829f23da0", "scanner": "scanner-primary", "fingerprint": "42794316e101e806", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b9783e186dcb4d98", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/pnl-audit/clean-duplicates (src/app/dashboard/admin/expenses/page.tsx:142)"}, "properties": {"repobilityId": "53d9be3ee1a615ce", "scanner": "scanner-primary", "fingerprint": "b9783e186dcb4d98", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-adbe3cfbe6b0c209", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/expense-proposals (src/app/dashboard/admin/expenses/page.tsx:667)"}, "properties": {"repobilityId": "120091af1af1a0de", "scanner": "scanner-primary", "fingerprint": "adbe3cfbe6b0c209", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-070db4620581d610", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/expense-proposals (src/app/dashboard/admin/expenses/page.tsx:691)"}, "properties": {"repobilityId": "e6c0643548c0a872", "scanner": "scanner-primary", "fingerprint": "070db4620581d610", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3c90329fb18a6920", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/claims-grid?filter=${filter}&scope=all (src/app/dashboard/admin/pipeline/page.tsx:68)"}, "properties": {"repobilityId": "1ca2086645a385e4", "scanner": "scanner-primary", "fingerprint": "3c90329fb18a6920", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a13c5eb3e00af9a3", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/meta/campaigns?datePreset=${datePreset} (src/app/dashboard/admin/meta-ads/page.tsx:55)"}, "properties": {"repobilityId": "b70bdec3ddbc42d4", "scanner": "scanner-primary", "fingerprint": "a13c5eb3e00af9a3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-16d92fc4af240f37", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/meta/insights?datePreset=${datePreset} (src/app/dashboard/admin/meta-ads/page.tsx:56)"}, "properties": {"repobilityId": "97c0f402f868d288", "scanner": "scanner-primary", "fingerprint": "16d92fc4af240f37", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1d9ac24ebca5e405", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/meta/campaigns/${id} (src/app/dashboard/admin/meta-ads/page.tsx:83)"}, "properties": {"repobilityId": "e1c4f25f6b338fca", "scanner": "scanner-primary", "fingerprint": "1d9ac24ebca5e405", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-52216b6befa9d954", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/revenue (src/app/dashboard/admin/revenue/page.tsx:86)"}, "properties": {"repobilityId": "542e0f0d62fde2f8", "scanner": "scanner-primary", "fingerprint": "52216b6befa9d954", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-70127e50ff70ddbd", "level": "error", "message": {"text": "Dangling fetch: PUT /api/invoices (src/app/dashboard/admin/revenue/page.tsx:109)"}, "properties": {"repobilityId": "79441d5632f12e6c", "scanner": "scanner-primary", "fingerprint": "70127e50ff70ddbd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa29978d506325da", "level": "error", "message": {"text": "Dangling fetch: GET /api/retail-templates (src/app/dashboard/retail-estimate/retail-estimate-client.tsx:115)"}, "properties": {"repobilityId": "d9f979b6ca679063", "scanner": "scanner-primary", "fingerprint": "fa29978d506325da", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dbdaf20ce010c431", "level": "error", "message": {"text": "Dangling fetch: GET /api/retail-estimates/${existingId} (src/app/dashboard/retail-estimate/retail-estimate-client.tsx:117)"}, "properties": {"repobilityId": "78e161df563f042f", "scanner": "scanner-primary", "fingerprint": "dbdaf20ce010c431", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-098e8355c8526691", "level": "error", "message": {"text": "Dangling fetch: POST /api/retail-measurements/parse (src/app/dashboard/retail-estimate/retail-estimate-client.tsx:219)"}, "properties": {"repobilityId": "f6dbda5ebd941751", "scanner": "scanner-primary", "fingerprint": "098e8355c8526691", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-548dcac23cc591f9", "level": "error", "message": {"text": "Dangling fetch: POST /api/retail-measurements/estimate-siding (src/app/dashboard/retail-estimate/retail-estimate-client.tsx:266)"}, "properties": {"repobilityId": "554e3051cf01fd86", "scanner": "scanner-primary", "fingerprint": "548dcac23cc591f9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-0ee66ad9f1c2a7f6", "level": "error", "message": {"text": "Dangling fetch: POST /api/retail-estimates/${idForInvoice}/invoice (src/app/dashboard/retail-estimate/retail-estimate-client.tsx:320)"}, "properties": {"repobilityId": "7e05523723f3ec65", "scanner": "scanner-primary", "fingerprint": "0ee66ad9f1c2a7f6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2eea172357b8d8ae", "level": "error", "message": {"text": "Dangling fetch: POST /api/retail-estimates/${idForSign}/sign-token (src/app/dashboard/retail-estimate/retail-estimate-client.tsx:362)"}, "properties": {"repobilityId": "b2c601f73432e4a7", "scanner": "scanner-primary", "fingerprint": "2eea172357b8d8ae", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7198252914763d58", "level": "error", "message": {"text": "Dangling fetch: POST /api/retail-estimates/${idToSend}/send (src/app/dashboard/retail-estimate/retail-estimate-client.tsx:404)"}, "properties": {"repobilityId": "ed0b759e3ef7f728", "scanner": "scanner-primary", "fingerprint": "7198252914763d58", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8d8976d02cddab58", "level": "error", "message": {"text": "Dangling fetch: GET /api/team-claims/claim?id=${claimId} (src/app/dashboard/claim/[id]/page.tsx:196)"}, "properties": {"repobilityId": "dd97ea35de4ec5fb", "scanner": "scanner-primary", "fingerprint": "8d8976d02cddab58", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-92ea4e838901af55", "level": "error", "message": {"text": "Dangling fetch: GET /api/claims/${claim.id}/esx (src/app/dashboard/claim/[id]/page.tsx:523)"}, "properties": {"repobilityId": "a8dee11aec709533", "scanner": "scanner-primary", "fingerprint": "92ea4e838901af55", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d30377c4443d8476", "level": "error", "message": {"text": "Dangling fetch: POST /api/claims/update (src/app/dashboard/claim/[id]/page.tsx:583)"}, "properties": {"repobilityId": "0127833ce8fe2b6d", "scanner": "scanner-primary", "fingerprint": "d30377c4443d8476", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-23a97b1f5cc6a6fd", "level": "error", "message": {"text": "Dangling fetch: POST /api/claim/reprocess (src/app/dashboard/claim/[id]/page.tsx:613)"}, "properties": {"repobilityId": "4ee05e50ec6132c2", "scanner": "scanner-primary", "fingerprint": "23a97b1f5cc6a6fd", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-436cd88e9095faad", "level": "error", "message": {"text": "Dangling fetch: POST /api/send-email (src/app/dashboard/claim/[id]/page.tsx:636)"}, "properties": {"repobilityId": "00034b3b309e0141", "scanner": "scanner-primary", "fingerprint": "436cd88e9095faad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-6d13f20ba303a310", "level": "error", "message": {"text": "Dangling fetch: POST /api/claims/update (src/app/dashboard/claim/[id]/page.tsx:1031)"}, "properties": {"repobilityId": "c482566d66e09926", "scanner": "scanner-primary", "fingerprint": "6d13f20ba303a310", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d8d9b06639f30117", "level": "error", "message": {"text": "Dangling fetch: POST /api/claim/reprocess (src/app/dashboard/claim/[id]/page.tsx:2431)"}, "properties": {"repobilityId": "11d39d7f90330a5d", "scanner": "scanner-primary", "fingerprint": "d8d9b06639f30117", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-9e99d948752e1b20", "level": "error", "message": {"text": "Dangling fetch: GET /api/company-docs (src/app/dashboard/company-docs/company-docs-client.tsx:62)"}, "properties": {"repobilityId": "d7c266fcbaf366b7", "scanner": "scanner-primary", "fingerprint": "9e99d948752e1b20", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c3b5eb3792830707", "level": "error", "message": {"text": "Dangling fetch: POST /api/company-docs/upload-url (src/app/dashboard/company-docs/company-docs-client.tsx:87)"}, "properties": {"repobilityId": "482dd6c488d8f46f", "scanner": "scanner-primary", "fingerprint": "c3b5eb3792830707", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fcc6bf06f8141eb6", "level": "error", "message": {"text": "Dangling fetch: POST /api/company-docs (src/app/dashboard/company-docs/company-docs-client.tsx:118)"}, "properties": {"repobilityId": "63473f90099bbd7f", "scanner": "scanner-primary", "fingerprint": "fcc6bf06f8141eb6", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2366255aef75623f", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/company-docs/${id} (src/app/dashboard/company-docs/company-docs-client.tsx:146)"}, "properties": {"repobilityId": "3add755f421ef666", "scanner": "scanner-primary", "fingerprint": "2366255aef75623f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3da11a67416b9d95", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/company-docs/${id} (src/app/dashboard/company-docs/company-docs-client.tsx:160)"}, "properties": {"repobilityId": "cbed2349d42c3ea7", "scanner": "scanner-primary", "fingerprint": "3da11a67416b9d95", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7d84bd7c391ab196", "level": "error", "message": {"text": "Dangling fetch: GET /api/company-docs/${id} (src/app/dashboard/company-docs/company-docs-client.tsx:178)"}, "properties": {"repobilityId": "ce24ca3579f47679", "scanner": "scanner-primary", "fingerprint": "7d84bd7c391ab196", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4093029973e9bc47", "level": "error", "message": {"text": "Dangling fetch: GET /api/repair-review (src/app/dashboard/repair-review/repair-review-content.tsx:41)"}, "properties": {"repobilityId": "44f8afa6341e94bd", "scanner": "scanner-primary", "fingerprint": "4093029973e9bc47", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-adc72762fd37c71e", "level": "error", "message": {"text": "Dangling fetch: POST /api/repair-review (src/app/dashboard/repair-review/repair-review-content.tsx:53)"}, "properties": {"repobilityId": "175dd8e24dc304d8", "scanner": "scanner-primary", "fingerprint": "adc72762fd37c71e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5af020e31ddea056", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/email-templates (src/app/dashboard/email-templates/page.tsx:41)"}, "properties": {"repobilityId": "78a898feb73eed00", "scanner": "scanner-primary", "fingerprint": "5af020e31ddea056", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-5a474737b70d7718", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/marketing-assets (src/app/dashboard/email-templates/page.tsx:42)"}, "properties": {"repobilityId": "a8de16ab2e7bd7b4", "scanner": "scanner-primary", "fingerprint": "5a474737b70d7718", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-ab448e10a179945c", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/email-templates (src/app/dashboard/email-templates/page.tsx:72)"}, "properties": {"repobilityId": "e3e0f0678bc4663f", "scanner": "scanner-primary", "fingerprint": "ab448e10a179945c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2549900d4ab7e2a8", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/email-templates/${selected.id} (src/app/dashboard/email-templates/page.tsx:107)"}, "properties": {"repobilityId": "183f67422c3a3175", "scanner": "scanner-primary", "fingerprint": "2549900d4ab7e2a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3df42b23fee4ca8b", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/email-templates/${selected.id} (src/app/dashboard/email-templates/page.tsx:128)"}, "properties": {"repobilityId": "6ecb2d00dd92eb20", "scanner": "scanner-primary", "fingerprint": "3df42b23fee4ca8b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-053b396b53d7d683", "level": "error", "message": {"text": "Dangling fetch: POST /api/repair-checkpoint (src/app/dashboard/repair/[id]/page.tsx:134)"}, "properties": {"repobilityId": "522100b8cb42a4f2", "scanner": "scanner-primary", "fingerprint": "053b396b53d7d683", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d61f1a9235d00b66", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/marketing-assets (src/app/dashboard/marketing-assets/page.tsx:44)"}, "properties": {"repobilityId": "5653a1e68b27183c", "scanner": "scanner-primary", "fingerprint": "d61f1a9235d00b66", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-044a46d9df7f672f", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/marketing-assets/sign-upload (src/app/dashboard/marketing-assets/page.tsx:61)"}, "properties": {"repobilityId": "1df59a8031c62cb2", "scanner": "scanner-primary", "fingerprint": "044a46d9df7f672f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-cf36f325a567ca27", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/marketing-assets (src/app/dashboard/marketing-assets/page.tsx:82)"}, "properties": {"repobilityId": "a3d430b78834eb5d", "scanner": "scanner-primary", "fingerprint": "cf36f325a567ca27", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4df088809bb4ac7e", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/marketing-assets/${id} (src/app/dashboard/marketing-assets/page.tsx:108)"}, "properties": {"repobilityId": "c86566cbe5be8400", "scanner": "scanner-primary", "fingerprint": "4df088809bb4ac7e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3999ab6a3f968bfa", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/admin/marketing-assets/${id} (src/app/dashboard/marketing-assets/page.tsx:123)"}, "properties": {"repobilityId": "8e61034d3493e28b", "scanner": "scanner-primary", "fingerprint": "3999ab6a3f968bfa", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-13a9be99d9082503", "level": "error", "message": {"text": "Dangling fetch: DELETE /api/retail-estimates/${id} (src/app/dashboard/retail-estimates/retail-estimates-list.tsx:202)"}, "properties": {"repobilityId": "13a99a654ae12c87", "scanner": "scanner-primary", "fingerprint": "13a9be99d9082503", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-11462a70f8710e26", "level": "error", "message": {"text": "Dangling fetch: POST /api/claims/preflight (src/app/dashboard/quick-report/page.tsx:130)"}, "properties": {"repobilityId": "9fe406aaaa19300d", "scanner": "scanner-primary", "fingerprint": "11462a70f8710e26", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-70876dc4c968c117", "level": "error", "message": {"text": "Dangling fetch: POST /api/capi-event (src/app/dashboard/quick-report/page.tsx:221)"}, "properties": {"repobilityId": "460b5c60cc0986c5", "scanner": "scanner-primary", "fingerprint": "70876dc4c968c117", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a84556918c5abf3f", "level": "error", "message": {"text": "Dangling fetch: POST /api/billing/acknowledge-overage (src/app/dashboard/quick-report/page.tsx:380)"}, "properties": {"repobilityId": "f22bea22f398130f", "scanner": "scanner-primary", "fingerprint": "a84556918c5abf3f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-481c9e97f25feb02", "level": "error", "message": {"text": "Dangling fetch: GET /api/templates (src/app/dashboard/send-document/page.tsx:45)"}, "properties": {"repobilityId": "3c3f291a16f6f2f7", "scanner": "scanner-primary", "fingerprint": "481c9e97f25feb02", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8d932275c6f38db0", "level": "error", "message": {"text": "Dangling fetch: POST /api/signatures (src/app/dashboard/send-document/page.tsx:78)"}, "properties": {"repobilityId": "6a7b7f444b1aa7b0", "scanner": "scanner-primary", "fingerprint": "8d932275c6f38db0", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2fd5aff565af5fb9", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/retail${q} (src/app/dashboard/retail/page.tsx:117)"}, "properties": {"repobilityId": "add15cb014804dc1", "scanner": "scanner-primary", "fingerprint": "2fd5aff565af5fb9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-afe09566a1a05883", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/retail/${jobId} (src/app/dashboard/retail/page.tsx:399)"}, "properties": {"repobilityId": "72e5616304800f1c", "scanner": "scanner-primary", "fingerprint": "afe09566a1a05883", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b1eddd2baf64ff55", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/retail/${jobId}/invoices/${invoiceId}/send (src/app/dashboard/retail/page.tsx:419)"}, "properties": {"repobilityId": "053a9608ff4eb230", "scanner": "scanner-primary", "fingerprint": "b1eddd2baf64ff55", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-448ca167ffdc6f47", "level": "error", "message": {"text": "Dangling fetch: POST /api/unsubscribe (src/app/unsubscribe/unsubscribe-client.tsx:32)"}, "properties": {"repobilityId": "326280ee7dfc7d4d", "scanner": "scanner-primary", "fingerprint": "448ca167ffdc6f47", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-58cbae0a171c0b6b", "level": "error", "message": {"text": "Dangling fetch: POST /api/signup/check-domain (src/app/signup/signup-client.tsx:65)"}, "properties": {"repobilityId": "135c4cb176d7c0b1", "scanner": "scanner-primary", "fingerprint": "58cbae0a171c0b6b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fa9ee72d28c26e01", "level": "error", "message": {"text": "Dangling fetch: POST /api/notify-signup (src/app/signup/signup-client.tsx:163)"}, "properties": {"repobilityId": "d4ce897824e713bb", "scanner": "scanner-primary", "fingerprint": "fa9ee72d28c26e01", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b38bd78090bbc0ba", "level": "error", "message": {"text": "Dangling fetch: POST /api/team/accept (src/app/signup/signup-client.tsx:178)"}, "properties": {"repobilityId": "ffcee8c16907d85a", "scanner": "scanner-primary", "fingerprint": "b38bd78090bbc0ba", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-16734993d819ba5c", "level": "error", "message": {"text": "Dangling fetch: POST /api/referrals/link (src/app/signup/signup-client.tsx:187)"}, "properties": {"repobilityId": "ae846d32fb314f77", "scanner": "scanner-primary", "fingerprint": "16734993d819ba5c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c055d1f24c2a680a", "level": "error", "message": {"text": "Dangling fetch: POST /api/sign/${signatureId} (src/app/sign/[id]/sign-form.tsx:229)"}, "properties": {"repobilityId": "142a35d265262dfa", "scanner": "scanner-primary", "fingerprint": "c055d1f24c2a680a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e1054ea828b0e71e", "level": "error", "message": {"text": "Dangling fetch: POST /api/sign/retail/${token}/submit (src/app/sign/retail/[token]/sign-form.tsx:85)"}, "properties": {"repobilityId": "5d051a945b150d14", "scanner": "scanner-primary", "fingerprint": "e1054ea828b0e71e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-037d25a567f55b9e", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/directory (src/app/admin/admin-dashboard.tsx:128)"}, "properties": {"repobilityId": "92f5284b850a3199", "scanner": "scanner-primary", "fingerprint": "037d25a567f55b9e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4e85632ee3ec3762", "level": "error", "message": {"text": "Dangling fetch: POST /api/inspector-invite (src/app/admin/admin-dashboard.tsx:327)"}, "properties": {"repobilityId": "5003f3d4afbccb1d", "scanner": "scanner-primary", "fingerprint": "4e85632ee3ec3762", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-1a246f549c55c11d", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/live (src/app/admin/analytics/analytics-content.tsx:121)"}, "properties": {"repobilityId": "2ab894b45e7c71b6", "scanner": "scanner-primary", "fingerprint": "1a246f549c55c11d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d9d2754881f1249f", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/analytics/insights (src/app/admin/analytics/analytics-content.tsx:135)"}, "properties": {"repobilityId": "dc5194f3e158f045", "scanner": "scanner-primary", "fingerprint": "d9d2754881f1249f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8141cc4ea222e6b4", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/leads (src/app/admin/leads/leads-client.tsx:38)"}, "properties": {"repobilityId": "1e093f73a59bfbc3", "scanner": "scanner-primary", "fingerprint": "8141cc4ea222e6b4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3fde7e867f43df0a", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/leads/reply (src/app/admin/leads/leads-client.tsx:65)"}, "properties": {"repobilityId": "6e14a111672f9fce", "scanner": "scanner-primary", "fingerprint": "3fde7e867f43df0a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-bec7ba633cd6d58f", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/activation (src/app/admin/activation/activation-content.tsx:47)"}, "properties": {"repobilityId": "bbdff70df96d4652", "scanner": "scanner-primary", "fingerprint": "bec7ba633cd6d58f", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8ac8ceff7e26f1a9", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/paths (src/app/admin/paths/paths-monitor.tsx:38)"}, "properties": {"repobilityId": "489312a1197b50d3", "scanner": "scanner-primary", "fingerprint": "8ac8ceff7e26f1a9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8d0e3cbc116b9222", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/claims-update (src/app/admin/claim/[id]/admin-claim-detail.tsx:149)"}, "properties": {"repobilityId": "461ca54519c26d1b", "scanner": "scanner-primary", "fingerprint": "8d0e3cbc116b9222", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dd56c5938abab909", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/delete-file (src/app/admin/claim/[id]/admin-claim-detail.tsx:175)"}, "properties": {"repobilityId": "581db02b1b2690bb", "scanner": "scanner-primary", "fingerprint": "dd56c5938abab909", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-97e06268de852da9", "level": "error", "message": {"text": "Dangling fetch: POST /api/claim/reprocess (src/app/admin/claim/[id]/admin-claim-detail.tsx:201)"}, "properties": {"repobilityId": "bbc9e5c71ed91543", "scanner": "scanner-primary", "fingerprint": "97e06268de852da9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-fe8b57153315798b", "level": "error", "message": {"text": "Dangling fetch: PATCH /api/admin/qa-learning/${id} (src/app/admin/qa-learning/qa-learning-queue.tsx:97)"}, "properties": {"repobilityId": "37243513b3948fcc", "scanner": "scanner-primary", "fingerprint": "fe8b57153315798b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-71db4afb64f8eb11", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/qa-review/${claimId}/release (src/app/admin/qa-review/qa-review-queue.tsx:111)"}, "properties": {"repobilityId": "5a3fe3bde7c1efc9", "scanner": "scanner-primary", "fingerprint": "71db4afb64f8eb11", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-83dbf06ca776d579", "level": "error", "message": {"text": "Dangling fetch: POST /api/claim/reprocess (src/app/admin/qa-review/qa-review-queue.tsx:129)"}, "properties": {"repobilityId": "09914b8de2af8920", "scanner": "scanner-primary", "fingerprint": "83dbf06ca776d579", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7893ecf21e27c424", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/qa-review/${claimId}/auto-fix (src/app/admin/qa-review/qa-review-queue.tsx:156)"}, "properties": {"repobilityId": "9b16b8b599cc47ce", "scanner": "scanner-primary", "fingerprint": "7893ecf21e27c424", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-54919e30b9971922", "level": "error", "message": {"text": "Dangling fetch: POST /api/claim/regen (src/app/admin/qa-review/qa-review-queue.tsx:456)"}, "properties": {"repobilityId": "0fd9f052251955b1", "scanner": "scanner-primary", "fingerprint": "54919e30b9971922", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2fd24cc4b83ddc79", "level": "error", "message": {"text": "Dangling fetch: GET /api/admin/crm-keys${qs} (src/app/admin/api-keys/api-keys-client.tsx:53)"}, "properties": {"repobilityId": "e9e8943f147271a8", "scanner": "scanner-primary", "fingerprint": "2fd24cc4b83ddc79", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-4c4fa7097bd4c0db", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/crm-keys (src/app/admin/api-keys/api-keys-client.tsx:77)"}, "properties": {"repobilityId": "4a3a408631a6533b", "scanner": "scanner-primary", "fingerprint": "4c4fa7097bd4c0db", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c428d21e1a07aef8", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/crm-keys/revoke (src/app/admin/api-keys/api-keys-client.tsx:114)"}, "properties": {"repobilityId": "cb87640791548125", "scanner": "scanner-primary", "fingerprint": "c428d21e1a07aef8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-7ed758929115dc60", "level": "error", "message": {"text": "Dangling fetch: POST /api/admin/agent-recommendations/${id}/${action} (src/app/admin/agent-recommendations/recommendations-queue.tsx:56)"}, "properties": {"repobilityId": "0da169780412e1cf", "scanner": "scanner-primary", "fingerprint": "7ed758929115dc60", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a6efa834bd58fb9a", "level": "error", "message": {"text": "Dangling fetch: POST /api/onboarding/profile (src/app/onboarding/profile/onboarding-client.tsx:97)"}, "properties": {"repobilityId": "a7a9f542e116321f", "scanner": "scanner-primary", "fingerprint": "a6efa834bd58fb9a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-734c057b3e23276d", "level": "error", "message": {"text": "Dangling fetch: POST /api/portal/${snapshot.token} (src/app/portal/[token]/portal-client.tsx:138)"}, "properties": {"repobilityId": "3dfa753f3515cfc0", "scanner": "scanner-primary", "fingerprint": "734c057b3e23276d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-74407faed8ef9a5e", "level": "error", "message": {"text": "Dangling fetch: POST /api/portal/${token} (src/app/portal/[token]/portal-client.tsx:363)"}, "properties": {"repobilityId": "60cd6af086353108", "scanner": "scanner-primary", "fingerprint": "74407faed8ef9a5e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d13e492bd45a8498", "level": "error", "message": {"text": "Dangling fetch: GET /api/billing/validate-coupon?coupon=${encodeURIComponent(coupon)} (src/app/pricing/pricing-client.tsx:56)"}, "properties": {"repobilityId": "f109b81e1b78d702", "scanner": "scanner-primary", "fingerprint": "d13e492bd45a8498", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-8debbe12f5f727a8", "level": "error", "message": {"text": "Dangling fetch: POST /api/billing/create-checkout (src/app/pricing/pricing-client.tsx:98)"}, "properties": {"repobilityId": "bc65892173c23046", "scanner": "scanner-primary", "fingerprint": "8debbe12f5f727a8", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2e58ed8b8d3222f3", "level": "error", "message": {"text": "Dangling fetch: POST /api/instant-intake/upload (src/app/instant/continue/instant-recover-client.tsx:53)"}, "properties": {"repobilityId": "2baf68e3224c8d43", "scanner": "scanner-primary", "fingerprint": "2e58ed8b8d3222f3", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-2ee4003e41ff7a9a", "level": "error", "message": {"text": "Dangling fetch: POST /api/instant-intake/claim (src/app/instant/continue/instant-recover-client.tsx:64)"}, "properties": {"repobilityId": "8d67534c1a3323d5", "scanner": "scanner-primary", "fingerprint": "2ee4003e41ff7a9a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-3bedf8bfa5bb0324", "level": "error", "message": {"text": "Dangling fetch: POST /api/track (src/lib/track.ts:85)"}, "properties": {"repobilityId": "e3315ab067f62579", "scanner": "scanner-primary", "fingerprint": "3bedf8bfa5bb0324", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e6a75415254a23af", "level": "error", "message": {"text": "Dangling fetch: GET /api/auth/token (src/lib/richard-auth.ts:28)"}, "properties": {"repobilityId": "89ad04c166b35703", "scanner": "scanner-primary", "fingerprint": "e6a75415254a23af", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-dabba8bb42e03158", "level": "error", "message": {"text": "Dangling fetch: GET /${campaignId} (src/lib/meta-ads.ts:199)"}, "properties": {"repobilityId": "84d9fe0d2908b708", "scanner": "scanner-primary", "fingerprint": "dabba8bb42e03158", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-f61ddfdc495239b5", "level": "error", "message": {"text": "Dangling fetch: POST /act_${this.adAccountId}/campaigns (src/lib/meta-ads.ts:214)"}, "properties": {"repobilityId": "25d271914f63cfb2", "scanner": "scanner-primary", "fingerprint": "f61ddfdc495239b5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-b7aff7221e5db69a", "level": "error", "message": {"text": "Dangling fetch: POST /${campaignId} (src/lib/meta-ads.ts:234)"}, "properties": {"repobilityId": "7f27bda764c6ae2f", "scanner": "scanner-primary", "fingerprint": "b7aff7221e5db69a", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-7629c5df5d052828", "level": "error", "message": {"text": "Dangling fetch: POST /${campaignId}/copies (src/lib/meta-ads.ts:262)"}, "properties": {"repobilityId": "81c91f078758a066", "scanner": "scanner-primary", "fingerprint": "7629c5df5d052828", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-1871d78cc90823b9", "level": "error", "message": {"text": "Dangling fetch: POST /act_${this.adAccountId}/adsets (src/lib/meta-ads.ts:332)"}, "properties": {"repobilityId": "3797caa256427620", "scanner": "scanner-primary", "fingerprint": "1871d78cc90823b9", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c069a1726ae4ca7d", "level": "error", "message": {"text": "Dangling fetch: POST /${adSetId} (src/lib/meta-ads.ts:343)"}, "properties": {"repobilityId": "d0389a768a71eec4", "scanner": "scanner-primary", "fingerprint": "c069a1726ae4ca7d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-54d12012733eea96", "level": "error", "message": {"text": "Dangling fetch: POST /${adId} (src/lib/meta-ads.ts:376)"}, "properties": {"repobilityId": "aa4502c1f5ac6894", "scanner": "scanner-primary", "fingerprint": "54d12012733eea96", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-2b0959c0094f2b62", "level": "error", "message": {"text": "Dangling fetch: POST /act_${this.adAccountId}/adcreatives (src/lib/meta-ads.ts:399)"}, "properties": {"repobilityId": "9da68c2c5e0db143", "scanner": "scanner-primary", "fingerprint": "2b0959c0094f2b62", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-a02640bd69550f5b", "level": "error", "message": {"text": "Dangling fetch: POST /act_${this.adAccountId}/ads (src/lib/meta-ads.ts:416)"}, "properties": {"repobilityId": "8a88024b1d409e80", "scanner": "scanner-primary", "fingerprint": "a02640bd69550f5b", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-200d36f4a50c1e72", "level": "error", "message": {"text": "Dangling fetch: GET /${adId} (src/lib/meta-ads.ts:437)"}, "properties": {"repobilityId": "ebd7a02634f5cd6d", "scanner": "scanner-primary", "fingerprint": "200d36f4a50c1e72", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-39d2412304036e46", "level": "error", "message": {"text": "Dangling fetch: POST /act_${this.adAccountId}/adcreatives (src/lib/meta-ads.ts:457)"}, "properties": {"repobilityId": "a8b8ea85b8f6d055", "scanner": "scanner-primary", "fingerprint": "39d2412304036e46", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-733341fb5fcdf68d", "level": "error", "message": {"text": "Dangling fetch: POST /${adId} (src/lib/meta-ads.ts:466)"}, "properties": {"repobilityId": "bd465a59c6191c6e", "scanner": "scanner-primary", "fingerprint": "733341fb5fcdf68d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-6acb726ce52800c5", "level": "error", "message": {"text": "Dangling fetch: POST /act_${this.adAccountId}/customaudiences (src/lib/meta-ads.ts:601)"}, "properties": {"repobilityId": "9b5d3ca781c063ae", "scanner": "scanner-primary", "fingerprint": "6acb726ce52800c5", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-c3db6590e09f039c", "level": "error", "message": {"text": "Dangling fetch: POST /${audience.id}/users (src/lib/meta-ads.ts:615)"}, "properties": {"repobilityId": "66f06a7298d4df07", "scanner": "scanner-primary", "fingerprint": "c3db6590e09f039c", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-d112644144efe68d", "level": "error", "message": {"text": "Dangling fetch: POST /act_${this.adAccountId}/customaudiences (src/lib/meta-ads.ts:639)"}, "properties": {"repobilityId": "cf79a88b372ea156", "scanner": "scanner-primary", "fingerprint": "d112644144efe68d", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "helper:request"]}}, {"ruleId": "scanner-4621c6fe7bbb357e", "level": "error", "message": {"text": "Dangling fetch: POST https://graph.facebook.com/${API_VERSION}/${PIXEL_ID}/events?access_token=${ACCESS_TOKEN} (src/lib/meta-capi.ts:65)"}, "properties": {"repobilityId": "0b7a96409f1173b5", "scanner": "scanner-primary", "fingerprint": "4621c6fe7bbb357e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-43c9f981aa23f934", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/lib/analytics/ga4-paths.ts:29)"}, "properties": {"repobilityId": "4303edaf2355109b", "scanner": "scanner-primary", "fingerprint": "43c9f981aa23f934", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-45d646d092ce43ef", "level": "error", "message": {"text": "Dangling fetch: POST https://analyticsdata.googleapis.com/v1beta/properties/${propertyId}:${method} (src/lib/analytics/ga4-paths.ts:74)"}, "properties": {"repobilityId": "a55971dffe2655d1", "scanner": "scanner-primary", "fingerprint": "45d646d092ce43ef", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-d6ae149b55bc2ba4", "level": "error", "message": {"text": "Dangling fetch: POST https://api.anthropic.com/v1/messages (src/lib/funnel-monitor/ai-insight.ts:74)"}, "properties": {"repobilityId": "ba791407e6a08fcf", "scanner": "scanner-primary", "fingerprint": "d6ae149b55bc2ba4", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-b3f0af758b4a9e71", "level": "error", "message": {"text": "Dangling fetch: GET https://api.vercel.com/v1/web-analytics/views?${params.toString()} (src/lib/funnel-monitor/sources/vercel-analytics.ts:45)"}, "properties": {"repobilityId": "bb0c94e75b6a14f2", "scanner": "scanner-primary", "fingerprint": "b3f0af758b4a9e71", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-e2b278e8bbe6206e", "level": "error", "message": {"text": "Dangling fetch: POST https://oauth2.googleapis.com/token (src/lib/funnel-monitor/sources/ga4.ts:51)"}, "properties": {"repobilityId": "081dd83f0bff1275", "scanner": "scanner-primary", "fingerprint": "e2b278e8bbe6206e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-a43733b89f33e8ad", "level": "error", "message": {"text": "Dangling fetch: GET https://api.resend.com/emails?limit=100 (src/lib/funnel-monitor/sources/resend.ts:18)"}, "properties": {"repobilityId": "ba90acf2f3a8261a", "scanner": "scanner-primary", "fingerprint": "a43733b89f33e8ad", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-40a1eabc4b06bd8e", "level": "error", "message": {"text": "Dangling fetch: GET /api/billing/check-quota (src/hooks/use-billing-quota.ts:10)"}, "properties": {"repobilityId": "891c905c55365573", "scanner": "scanner-primary", "fingerprint": "40a1eabc4b06bd8e", "layer": "api", "severity": "high", "confidence": 1.0, "tags": ["wiring", "dangling-fetch", "fetch"]}}, {"ruleId": "scanner-c1e1ee09590b0a49", "level": "note", "message": {"text": "Unused endpoint: GET /projects"}, "properties": {"repobilityId": "6eab184340f710cd", "scanner": "scanner-primary", "fingerprint": "c1e1ee09590b0a49", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f3f3b97255ab7924", "level": "note", "message": {"text": "Unused endpoint: GET /pricelist/{code}/export"}, "properties": {"repobilityId": "a95ebdf720ea7767", "scanner": "scanner-primary", "fingerprint": "f3f3b97255ab7924", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5752f5963e57ba22", "level": "note", "message": {"text": "Unused endpoint: POST /pricelist/{code}/clone"}, "properties": {"repobilityId": "c7ae13c5e5f16f5f", "scanner": "scanner-primary", "fingerprint": "5752f5963e57ba22", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-42982843ebf55d34", "level": "note", "message": {"text": "Unused endpoint: GET /token/status"}, "properties": {"repobilityId": "505e69ba1a41858f", "scanner": "scanner-primary", "fingerprint": "42982843ebf55d34", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0c2cfd73ef2e3487", "level": "note", "message": {"text": "Unused endpoint: GET /pricing"}, "properties": {"repobilityId": "caeca16d03521157", "scanner": "scanner-primary", "fingerprint": "0c2cfd73ef2e3487", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-72982445b2bb2354", "level": "note", "message": {"text": "Unused endpoint: POST /process-claim"}, "properties": {"repobilityId": "189c4db887c70141", "scanner": "scanner-primary", "fingerprint": "72982445b2bb2354", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4de977927457f6d3", "level": "note", "message": {"text": "Unused endpoint: POST /draft-supplement"}, "properties": {"repobilityId": "0235f60afa01daee", "scanner": "scanner-primary", "fingerprint": "4de977927457f6d3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d3eaacdbdba88007", "level": "note", "message": {"text": "Unused endpoint: POST /annotate-photo"}, "properties": {"repobilityId": "1ff0c1305fdba233", "scanner": "scanner-primary", "fingerprint": "d3eaacdbdba88007", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cd3484e3a195dcf9", "level": "note", "message": {"text": "Unused endpoint: GET /job/{job_id}"}, "properties": {"repobilityId": "91b999398c2cde43", "scanner": "scanner-primary", "fingerprint": "cd3484e3a195dcf9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-21d4e3431aa9b5dc", "level": "note", "message": {"text": "Unused endpoint: POST /parse"}, "properties": {"repobilityId": "c39339423dac62a6", "scanner": "scanner-primary", "fingerprint": "21d4e3431aa9b5dc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c0a1c60fe1f40dcb", "level": "note", "message": {"text": "Unused endpoint: POST /estimate-siding"}, "properties": {"repobilityId": "f529b452b3489fbd", "scanner": "scanner-primary", "fingerprint": "c0a1c60fe1f40dcb", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2a80ba5dfaf44b1f", "level": "note", "message": {"text": "Unused endpoint: POST /claims"}, "properties": {"repobilityId": "b66a86d5cc2a707f", "scanner": "scanner-primary", "fingerprint": "2a80ba5dfaf44b1f", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b1660e14dd34a5d6", "level": "note", "message": {"text": "Unused endpoint: GET /claims/{claim_id}"}, "properties": {"repobilityId": "faa77ec59a6d036e", "scanner": "scanner-primary", "fingerprint": "b1660e14dd34a5d6", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3d8851d02537151d", "level": "note", "message": {"text": "Unused endpoint: POST /sms"}, "properties": {"repobilityId": "4f8a4a657b0259ed", "scanner": "scanner-primary", "fingerprint": "3d8851d02537151d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-626922a75134a420", "level": "note", "message": {"text": "Unused endpoint: POST /whatsapp"}, "properties": {"repobilityId": "d48a3857a7e939bd", "scanner": "scanner-primary", "fingerprint": "626922a75134a420", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-b0c737301aa8b493", "level": "note", "message": {"text": "Unused endpoint: POST /email"}, "properties": {"repobilityId": "7cfe2cfcbaaacab2", "scanner": "scanner-primary", "fingerprint": "b0c737301aa8b493", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-d4cab17a0ca8a24c", "level": "note", "message": {"text": "Unused endpoint: POST /api/upload-link/{token}/files"}, "properties": {"repobilityId": "77116eda39b38009", "scanner": "scanner-primary", "fingerprint": "d4cab17a0ca8a24c", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-6a4f7911bcf9aca9", "level": "note", "message": {"text": "Unused endpoint: POST /api/internal/poll-email-intake"}, "properties": {"repobilityId": "ab909dbdef834356", "scanner": "scanner-primary", "fingerprint": "6a4f7911bcf9aca9", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-3a22c0f4ca76bffa", "level": "note", "message": {"text": "Unused endpoint: POST /api/internal/sweep-pending-correspondence"}, "properties": {"repobilityId": "836136dfe165c886", "scanner": "scanner-primary", "fingerprint": "3a22c0f4ca76bffa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f874c1a75bd3e352", "level": "note", "message": {"text": "Unused endpoint: GET /api/debug/profile/{user_id}"}, "properties": {"repobilityId": "5addf7c0c44641fb", "scanner": "scanner-primary", "fingerprint": "f874c1a75bd3e352", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5be9951e25207ebe", "level": "note", "message": {"text": "Unused endpoint: POST /api/reprocess/{claim_id}"}, "properties": {"repobilityId": "2a919dbf04f3013e", "scanner": "scanner-primary", "fingerprint": "5be9951e25207ebe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2e31fa78bdc899aa", "level": "note", "message": {"text": "Unused endpoint: POST /api/regen/{claim_id}"}, "properties": {"repobilityId": "2a284a7f25708037", "scanner": "scanner-primary", "fingerprint": "2e31fa78bdc899aa", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2bdb460cbeabb108", "level": "note", "message": {"text": "Unused endpoint: POST /api/qa/auto-fix/{claim_id}"}, "properties": {"repobilityId": "c20bd0092bee60dc", "scanner": "scanner-primary", "fingerprint": "2bdb460cbeabb108", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-223226c263fb5a3d", "level": "note", "message": {"text": "Unused endpoint: POST /api/process/{claim_id}"}, "properties": {"repobilityId": "acbd3875bb1a245d", "scanner": "scanner-primary", "fingerprint": "223226c263fb5a3d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1b8e5a834e7726ff", "level": "note", "message": {"text": "Unused endpoint: POST /api/process-repair/{repair_id}"}, "properties": {"repobilityId": "11b08a65d43ddccd", "scanner": "scanner-primary", "fingerprint": "1b8e5a834e7726ff", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cdbd1ba0ff18189e", "level": "note", "message": {"text": "Unused endpoint: POST /api/reprocess-repair/{repair_id}"}, "properties": {"repobilityId": "ad0f9a5ae727da3a", "scanner": "scanner-primary", "fingerprint": "cdbd1ba0ff18189e", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cff4080a39d0f377", "level": "note", "message": {"text": "Unused endpoint: GET /api/repair/{repair_id}/checkpoints"}, "properties": {"repobilityId": "f18193de44a5465e", "scanner": "scanner-primary", "fingerprint": "cff4080a39d0f377", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-c2bf728eb5d0e6d3", "level": "note", "message": {"text": "Unused endpoint: POST /api/repair/{repair_id}/checkpoint/{cp_id}/submit"}, "properties": {"repobilityId": "7325ad0324e63e4f", "scanner": "scanner-primary", "fingerprint": "c2bf728eb5d0e6d3", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-212c08b3b67e91e1", "level": "note", "message": {"text": "Unused endpoint: POST /api/repair/{repair_id}/checkpoint/{cp_id}/skip"}, "properties": {"repobilityId": "8196403791575f35", "scanner": "scanner-primary", "fingerprint": "212c08b3b67e91e1", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4ff2107180938c19", "level": "note", "message": {"text": "Unused endpoint: POST /api/cadence/send-one"}, "properties": {"repobilityId": "b36d4f03738e52ec", "scanner": "scanner-primary", "fingerprint": "4ff2107180938c19", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-96f6e741a4d1c45a", "level": "note", "message": {"text": "Unused endpoint: GET /api/analytics/overview"}, "properties": {"repobilityId": "d5c63e8bace2eb1f", "scanner": "scanner-primary", "fingerprint": "96f6e741a4d1c45a", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9c68bdc7caa48110", "level": "note", "message": {"text": "Unused endpoint: GET /api/analytics/processing-costs"}, "properties": {"repobilityId": "1c2241e17df8450d", "scanner": "scanner-primary", "fingerprint": "9c68bdc7caa48110", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-4e0ff41e3d81dfdc", "level": "note", "message": {"text": "Unused endpoint: GET /api/analytics/pricing"}, "properties": {"repobilityId": "44ce3b8078cc7b4c", "scanner": "scanner-primary", "fingerprint": "4e0ff41e3d81dfdc", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-9a887aba395a7b91", "level": "note", "message": {"text": "Unused endpoint: GET /api/analytics/photos"}, "properties": {"repobilityId": "9e574064ac6cf58b", "scanner": "scanner-primary", "fingerprint": "9a887aba395a7b91", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a402bd519e57eb8b", "level": "note", "message": {"text": "Unused endpoint: GET /api/analytics/predict"}, "properties": {"repobilityId": "95d9a018becd757c", "scanner": "scanner-primary", "fingerprint": "a402bd519e57eb8b", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-12273e5c7c0bb279", "level": "note", "message": {"text": "Unused endpoint: GET /api/intelligence/carriers"}, "properties": {"repobilityId": "932ac8b5dfdc727e", "scanner": "scanner-primary", "fingerprint": "12273e5c7c0bb279", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-933da45dd07a25bd", "level": "note", "message": {"text": "Unused endpoint: GET /api/intelligence/carrier/{carrier_name}"}, "properties": {"repobilityId": "bc9eacc424e9c219", "scanner": "scanner-primary", "fingerprint": "933da45dd07a25bd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-cf5c7308fcc7ff98", "level": "note", "message": {"text": "Unused endpoint: GET /api/intelligence/arguments/{carrier_name}"}, "properties": {"repobilityId": "cad21e48d4b83693", "scanner": "scanner-primary", "fingerprint": "cf5c7308fcc7ff98", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-f5e59ea9393dfb1d", "level": "note", "message": {"text": "Unused endpoint: GET /api/intelligence/suggest/{carrier_name}"}, "properties": {"repobilityId": "7c39b52cda21dc06", "scanner": "scanner-primary", "fingerprint": "f5e59ea9393dfb1d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-a8105f73401e28a2", "level": "note", "message": {"text": "Unused endpoint: POST /api/noaa-scan"}, "properties": {"repobilityId": "7e138f3298aec6f2", "scanner": "scanner-primary", "fingerprint": "a8105f73401e28a2", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-575a6745c6d05455", "level": "note", "message": {"text": "Unused endpoint: POST /api/analyze-correspondence/{correspondence_id}"}, "properties": {"repobilityId": "a3b949cbcaba01a8", "scanner": "scanner-primary", "fingerprint": "575a6745c6d05455", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2625c6e9c7559706", "level": "note", "message": {"text": "Unused endpoint: GET /api/correspondence/{claim_id}"}, "properties": {"repobilityId": "f3109d8de4330d88", "scanner": "scanner-primary", "fingerprint": "2625c6e9c7559706", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-2033ba2d1a0a71ac", "level": "note", "message": {"text": "Unused endpoint: GET /api/correspondence"}, "properties": {"repobilityId": "507eab9129e85140", "scanner": "scanner-primary", "fingerprint": "2033ba2d1a0a71ac", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-36b5c9bab8e123d4", "level": "note", "message": {"text": "Unused endpoint: GET /api/drafts/{claim_id}"}, "properties": {"repobilityId": "302a4ff733ad3192", "scanner": "scanner-primary", "fingerprint": "36b5c9bab8e123d4", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-dcb1fd52fe460c11", "level": "note", "message": {"text": "Unused endpoint: PUT /api/drafts/{draft_id}"}, "properties": {"repobilityId": "fea40e5ba80b804a", "scanner": "scanner-primary", "fingerprint": "dcb1fd52fe460c11", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-34fa2446e65c50bd", "level": "note", "message": {"text": "Unused endpoint: POST /api/drafts/{draft_id}/send"}, "properties": {"repobilityId": "61d031ddf3363bed", "scanner": "scanner-primary", "fingerprint": "34fa2446e65c50bd", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1315c86e012558ab", "level": "note", "message": {"text": "Unused endpoint: POST /api/drafts/{draft_id}/regenerate"}, "properties": {"repobilityId": "789c937e1e107af2", "scanner": "scanner-primary", "fingerprint": "1315c86e012558ab", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-5d499401deab8efe", "level": "note", "message": {"text": "Unused endpoint: POST /api/correspondence/{correspondence_id}/match"}, "properties": {"repobilityId": "f0c9f195625978f4", "scanner": "scanner-primary", "fingerprint": "5d499401deab8efe", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-0f16836bb48d0b5d", "level": "note", "message": {"text": "Unused endpoint: GET /api/forwarders"}, "properties": {"repobilityId": "17ce092ff693c6e4", "scanner": "scanner-primary", "fingerprint": "0f16836bb48d0b5d", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}, {"ruleId": "scanner-1343254eb3ff1f39", "level": "note", "message": {"text": "Unused endpoint: POST /api/forwarders"}, "properties": {"repobilityId": "2a16bf0cbe417815", "scanner": "scanner-primary", "fingerprint": "1343254eb3ff1f39", "layer": "api", "severity": "low", "confidence": 1.0, "tags": ["wiring", "unused-endpoint"]}}]}]}